/** * Finalize module install * * @param string $module * @param string $folder * @param string $modulesPath * @param \Pop\Service\Locator $services * @return void */ protected function finalizeInstall($module, $folder, $modulesPath, $services) { // Get module config and module info from config file $config = (include $modulesPath . '/' . $folder . '/config/module.php'); $info = $this->getInfo(file_get_contents($modulesPath . '/' . $folder . '/config/module.php')); $name = key($config); $descName = ''; if (isset($info['name'])) { $descName = $info['name']; } else { if (isset($info['Name'])) { $descName = $info['Name']; } else { if (isset($info['NAME'])) { $descName = $info['NAME']; } else { if (isset($info['module name'])) { $descName = $info['module name']; } else { if (isset($info['Module Name'])) { $descName = $info['Module Name']; } else { if (isset($info['MODULE NAME'])) { $descName = $info['MODULE NAME']; } } } } } } $info['Desc Name'] = $descName; if (isset($info['version'])) { $version = $info['version']; } else { if (isset($info['Version'])) { $version = $info['Version']; } else { if (isset($info['VERSION'])) { $version = $info['VERSION']; } else { $version = 'N/A'; } } } // Get SQL, if exists $sqlType = strtolower(DB_INTERFACE == 'pdo' ? DB_TYPE : DB_INTERFACE); $sqlFile = $modulesPath . '/' . $folder . '/data/' . $name . '.' . $sqlType . '.sql'; if (!file_exists($sqlFile)) { $sqlFile = null; } $tables = null !== $sqlFile ? $this->getTables(file_get_contents($sqlFile)) : []; // Save module in the database $mod = new Table\Modules(['file' => $module, 'folder' => $folder, 'name' => $name, 'prefix' => isset($config[$name]['prefix']) ? $config[$name]['prefix'] : '', 'version' => $version, 'active' => 1, 'order' => (int) Table\Modules::findAll()->count() + 1, 'assets' => serialize(['tables' => $tables, 'info' => $info]), 'installed_on' => date('Y-m-d H:i:s')]); $mod->save(); $this->sendStats($name, $version); // Execute any SQL that came with the module if (null !== $sqlFile) { Db::install($sqlFile, ['database' => DB_NAME, 'username' => DB_USER, 'password' => DB_PASS, 'host' => DB_HOST, 'prefix' => DB_PREFIX, 'type' => DB_TYPE], ucfirst(strtolower(DB_INTERFACE))); } // Run any install functions if (isset($config[$name]) && isset($config[$name]['install']) && !empty($config[$name]['install'])) { call_user_func_array($config[$name]['install'], [$services]); } }
/** * Get update info * * @param boolean $live * @return \ArrayObject */ public function getUpdates($live = true) { $updates = ['phirecms' => null, 'modules' => []]; if ($live) { $headers = ['Authorization: ' . base64_encode('phire-updater-' . time()), 'User-Agent: ' . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0')]; $curl = new Curl('http://updates.phirecms.org/latest/phirecms', [CURLOPT_HTTPHEADER => $headers]); $curl->send(); if ($curl->getCode() == 200) { $json = json_decode($curl->getBody(), true); $updates['phirecms'] = $json['version']; } $modules = Table\Modules::findAll(); if ($modules->hasRows()) { foreach ($modules->rows() as $module) { $curl = new Curl('http://updates.phirecms.org/latest/' . $module->name, [CURLOPT_HTTPHEADER => $headers]); $curl->send(); if ($curl->getCode() == 200) { $json = json_decode($curl->getBody(), true); $updates['modules'][$module->name] = $json['version']; } } } } return new \ArrayObject($updates, \ArrayObject::ARRAY_AS_PROPS); }
/** * Get module id * * @return int */ protected function getModuleId() { $modules = Table\Modules::findAll()->rows(); $module = new Model\Module(); $new = $module->detectNew(); $moduleIds = []; if ($new > 0) { $this->console->append('[' . $new . ' New Module' . ($new > 1 ? 's' : '') . ' Detected]' . PHP_EOL); } $this->console->append("ID \tActive\t\tModule"); $this->console->append("----\t------\t\t------"); foreach ($modules as $module) { $moduleIds[] = $module->id; $this->console->append($module->id . "\t" . ($module->active ? 'Yes' : 'No') . "\t\t" . $module->folder); } $this->console->append(); $this->console->send(); $moduleId = null; while (!is_numeric($moduleId) || !in_array($moduleId, $moduleIds)) { $moduleId = $this->console->prompt($this->console->getIndent() . 'Select Module ID: '); } return $moduleId; }