/** * execute command * * @param InputInterface $input * @param OutputInterface $output */ public function execute(InputInterface $input, OutputInterface $output) { $options['unlimited'] = true; $options['list_for'] = 'admin'; $SitesDb = new \System\Core\Models\SitesDb($this->Db); $site_list = $SitesDb->listSites($options); unset($SitesDb, $options); if (is_array($site_list) && array_key_exists('total', $site_list) && $site_list['total'] > '0' && array_key_exists('items', $site_list)) { $output->writeln('There are total ' . $site_list['total'] . ' sites in db.'); $output->writeln('------------------------------'); $Table = new \Symfony\Component\Console\Helper\Table($output); $list_site_rows = []; foreach ($site_list['items'] as $row) { if ($row->site_status == '2') { $site_status = 'Maintenance'; } elseif ($row->site_status == '1') { $site_status = 'Enabled'; } else { $site_status = 'Disabled'; } $list_site_rows[] = [$row->site_id, $row->site_name, $row->site_domain, $site_status]; unset($site_status); } // endforeach; $Table->setHeaders(['Site ID', 'Site name', 'Domain', 'Status'])->setRows($list_site_rows); $Table->render(); unset($list_site_rows, $row, $Table); } else { $output->writeln('<error>Unable to list site or there is no site.</error>'); } unset($site_list); }
/** * disable module on multiple sites. * * @param OutputInterface $output * @param string $module_system_name module system name same as module folder name. * @param array $site_ids array of site ids. * @return int return number of updated count. */ private function disableModuleSites(OutputInterface $output, $module_system_name, array $site_ids = []) { $output_count = 0; // get all site ids for checking. ------------------------------------------ $options['list_for'] = 'admin'; $options['unlimited'] = true; $SitesDb = new \System\Core\Models\SitesDb($this->Db); $list_sites = $SitesDb->listSites($options); unset($options); $sites = []; if (is_array($list_sites) && array_key_exists('items', $list_sites)) { foreach ($list_sites['items'] as $row) { $sites = array_merge($sites, [$row->site_id]); } unset($row); } unset($list_sites, $SitesDb); // get selected module where site_ids are in --------------------------- if (!empty($site_ids)) { $options['module_system_name'] = $module_system_name; $options['list_for'] = 'admin'; $options['site_ids'] = $site_ids; $options['unlimited'] = true; $ModulesDb = new \System\Core\Models\ModulesDb($this->Db); $list_modules = $ModulesDb->listModulesQb($options); unset($options); $module_site_ids = []; if (is_array($list_modules) && array_key_exists('items', $list_modules)) { foreach ($list_modules['items'] as $row) { $module_id = $row->module_id; $module_site_ids = array_merge($module_site_ids, [$row->site_id]); } unset($row); } } unset($list_modules, $ModulesDb); // check the sites, site_ids values before change status. -------------- if (!empty($site_ids)) { // there are site ids specified. check that site_id is really in the `sites` table. foreach ($site_ids as $site_id) { if ($site_id != null && in_array($site_id, $sites)) { // selected site id is exists in sites table. it is real site which means ok to update. if (isset($module_id) && intval($module_id) != '0') { if (in_array($site_id, $module_site_ids)) { // this module and site id is already exists in db. yeah you are able to disable it. $result = $this->disableModuleSite($output, intval($module_id), intval($site_id)); $sites = array_diff($sites, [$site_id]); if ($result === true) { $output_count++; } } elseif (!in_array($site_id, $module_site_ids)) { // this module had never added to this site, use add and then disable. $result = $this->addDisableModuleSite($output, intval($module_id), intval($site_id)); $sites = array_diff($sites, [$site_id]); if ($result === true) { $output_count++; } } } } } // endforeach; unset($site_id); } unset($module_site_ids, $result, $sites); return $output_count; }
/** * prepare to add module for multiple sites. * * @param \Symfony\Component\Console\Output\OutputInterface $output symfony output interface. * @param string $module_system_name module systen name. * @param array $module_metadata module metadata. * @param array $site_ids array of site id that will be enabled. * @return integer return number of sites per module that were added. */ private function prepareAddModuleSites(OutputInterface $output, $module_system_name, array $module_metadata, array $site_ids = []) { $output_count = 0; $output_subtracted = 0; // get all site ids for checking and adding. ---------------- $options['list_for'] = 'admin'; $options['unlimited'] = true; $SitesDb = new \System\Core\Models\SitesDb($this->Db); $list_sites = $SitesDb->listSites($options); unset($options); $sites = []; if (is_array($list_sites) && array_key_exists('items', $list_sites)) { foreach ($list_sites['items'] as $row) { $sites = array_merge($sites, [$row->site_id]); } unset($row); } unset($list_sites, $SitesDb); // check module exists or not ------------------------------- $options['module_system_name'] = $module_system_name; $ModulesDb = new \System\Core\Models\ModulesDb($this->Db); $module = $ModulesDb->getModule($options); unset($ModulesDb, $options); $module_id = null; $module_site_ids = []; if ($module == null || empty($module)) { // module not exists. $module_id = null; $module_site_ids = $site_ids; } else { // module exists. $module_id = $module->module_id; $module_site_ids = $site_ids; if (is_array($module) || is_object($module) && property_exists($module, 'module_sites') && is_array($module->module_sites)) { foreach ($module->module_sites as $row) { if (in_array($row->site_id, $site_ids)) { // current site_id in module_sites table is in add list. $module_site_ids = array_diff($module_site_ids, [$row->site_id]); $output_subtracted++; } } // endforeach; unset($row); } } unset($module); // end check module exists or not -------------------------- // check for site id is in real sites table. -------------------- if (!empty($site_ids)) { // now, loop to check again that site_id add list that is really exists in sites table. foreach ($module_site_ids as $site_id) { if (!in_array($site_id, $sites)) { // site_id in add list is not really exists in sites table, remove it. $module_site_ids = array_diff($module_site_ids, [$site_id]); } } // endforeach; unset($site_id); } else { $module_site_ids = $sites; } // really add module to sites. -------------------------------- $result = $this->addModuleSites($output, $module_system_name, $module_metadata, $module_id, $module_site_ids); if ($result === true) { $output_count = count($module_site_ids); } unset($module_id, $module_site_ids, $result, $sites); return $output_count + $output_subtracted; }