コード例 #1
0
ファイル: Module.php プロジェクト: kirkbauer2/kirkxc
 /**
  * Uninstall module
  *
  * @param \XLite\Model\Module $module    Module object
  * @param array               &$messages Messages list
  *
  * @return boolean
  */
 public function uninstallModule(\XLite\Model\Module $module, &$messages)
 {
     $result = false;
     // Get module pack
     $pack = new \XLite\Core\Pack\Module($module);
     $dirs = $pack->getDirs();
     $nonWritableDirs = array();
     // Check module directories permissions
     foreach ($dirs as $dir) {
         if (\Includes\Utils\FileManager::isExists($dir) && !\Includes\Utils\FileManager::isDirWriteable($dir)) {
             $nonWritableDirs[] = \Includes\Utils\FileManager::getRelativePath($dir, LC_DIR_ROOT);
         }
     }
     $params = array('name' => sprintf('%s v%s (%s)', $module->getModuleName(), $module->getVersion(), $module->getAuthorName()));
     if (empty($nonWritableDirs)) {
         $yamlData = array();
         $yamlFiles = \Includes\Utils\ModulesManager::getModuleYAMLFiles($module->getAuthor(), $module->getName());
         foreach ($yamlFiles as $yamlFile) {
             $yamlData[] = \Includes\Utils\FileManager::read($yamlFile);
         }
         if (!$module->checkModuleMainClass()) {
             $classFile = LC_DIR_CLASSES . \Includes\Utils\Converter::getClassFile($module->getMainClass());
             if (\Includes\Utils\FileManager::isFileReadable($classFile)) {
                 require_once $classFile;
             }
         }
         // Call uninstall event method
         $r = $module->callModuleMethod('callUninstallEvent', 111);
         if (111 == $r) {
             \XLite\Logger::getInstance()->log($module->getActualName() . ': Method callUninstallEvent() was not called');
         }
         // Remove from FS
         foreach ($dirs as $dir) {
             \Includes\Utils\FileManager::unlinkRecursive($dir);
         }
         \Includes\Utils\ModulesManager::disableModule($module->getActualName());
         \Includes\Utils\ModulesManager::removeModuleFromDisabledStructure($module->getActualName());
         // Remove module from DB
         try {
             // Refresh module entity as it was changed by disableModule() method above
             $module = $this->find($module->getModuleID());
             $this->delete($module);
         } catch (\Exception $e) {
             $messages[] = $e->getMessage();
         }
         if ($module->getModuleID()) {
             $messages[] = \XLite\Core\Translation::getInstance()->translate('A DB error occured while uninstalling the module X', $params);
         } else {
             if (!empty($yamlData)) {
                 foreach ($yamlData as $yaml) {
                     \XLite\Core\Database::getInstance()->unloadFixturesFromYaml($yaml);
                 }
             }
             $messages[] = \XLite\Core\Translation::getInstance()->translate('The module X has been uninstalled successfully', $params);
             $result = true;
         }
     } else {
         $messages[] = \XLite\Core\Translation::getInstance()->translate('Unable to delete module X files: some dirs have no writable permissions: Y', $params + array('dirs' => implode(', ', $nonWritableDirs)));
     }
     return $result;
 }
コード例 #2
0
ファイル: Module.php プロジェクト: kewaunited/xcart
 /**
  * Check if we can call method from the module main class
  *
  * @return boolean
  */
 public function checkModuleMainClass()
 {
     $result = $this->isInstalled();
     if ($result && !\Includes\Utils\Operator::checkIfClassExists($this->getMainClass())) {
         if (defined('LC_MODULE_CONTROL')) {
             $path = LC_DIR_CLASSES . \Includes\Utils\Converter::getClassFile($this->getMainClass());
             if (\Includes\Utils\FileManager::isFileReadable($path)) {
                 require_once $path;
             } else {
                 $result = false;
             }
         } else {
             $result = false;
         }
     }
     return $result;
 }
コード例 #3
0
ファイル: Main.php プロジェクト: kirkbauer2/kirkxc
 /**
  * Add code to replace
  *
  * @param \Doctrine\ORM\Mapping\ClassMetadata $data        Class metadata
  * @param string                              $template    Template to use
  * @param array                               $substitutes List of entries to substitude
  *
  * @return void
  */
 protected function addReplacement(\Doctrine\ORM\Mapping\ClassMetadata $data, $template, array $substitutes)
 {
     if (!empty($substitutes)) {
         $file = \Includes\Utils\Converter::getClassFile($data->reflClass->getName());
         if (!isset($this->replacements[$file])) {
             $this->replacements[$file] = '';
         }
         $this->replacements[$file] .= $this->substituteTemplate($template, $substitutes) . PHP_EOL . PHP_EOL;
     }
 }
コード例 #4
0
ファイル: Classes.php プロジェクト: kingsj/core
 /**
  * Transform class name into the relative path
  *
  * @param string $class Class name OPTIONAL
  *
  * @return string
  */
 public function getPath($class = null)
 {
     return \Includes\Utils\Converter::getClassFile($class ?: $this->getClass());
 }
コード例 #5
0
ファイル: Operator.php プロジェクト: kirkbauer2/kirkxc
 /**
  * Check if class is already declared.
  * NOTE: this function does not use autoloader
  *
  * @param string $name Class name
  *
  * @return boolean
  */
 public static function checkIfClassExists($name)
 {
     $result = class_exists($name, false);
     if (!$result) {
         $result = \Includes\Utils\FileManager::isFileReadable(\Includes\Autoloader::getLCAutoloadDir() . \Includes\Utils\Converter::getClassFile($name));
     }
     return $result;
 }