/** * @param string $clusterIdentifier * @throws eZDBException */ public static function fill($clusterIdentifier) { $configPath = "extension/ezoscar/bin/php/seo/config.json"; $cli = eZCLI::instance(); $config = file_get_contents($configPath); if(!$config) { $cli->output("Bad filepath for config file"); eZExecution::cleanExit(); } $config = json_decode($config, true); $db = MMDB::instance(); $rows = $db->arrayQuery(sprintf("SELECT * FROM mm_seo WHERE cluster_identifier = '%s'", $clusterIdentifier)); $progressBar = new ezcConsoleProgressbar( new ezcConsoleOutput(), count($rows), array( 'emptyChar' => ' ', 'barChar' => '=' ) ); $progressBar->start(); foreach($rows as $row) { if(!array_key_exists($clusterIdentifier, $config)) { continue; } $fq = $config[$clusterIdentifier][$row["application_identifier"]]["filters"]; $solrBase = new eZSolrBase(); $params = array( 'indent' => 'on', 'q' => '"'.$row['keyword'].'"', 'fq' => $fq, 'start' => 0, 'rows' => 0, 'fl' => '', 'qt' => 'ezpublish', 'explainOther' => '', 'hl.fl' => '', ); $results = $solrBase->rawSolrRequest('/select', $params); $num_found = $results['response']['numFound']; $db->query(sprintf("UPDATE mm_seo SET nb_results=%d, speciality_url='%s', keyword_url='%s' WHERE id=%d", $num_found, self::sanitize($row["speciality"]), self::sanitize($row["keyword"]), $row["id"])); $progressBar->advance(); } $progressBar->finish(); $cli->output(); }
/** * Clears view cache for imported content objects. * ObjectIDs are stored in 'ezpending_actions' table, with {@link SQLIContent::ACTION_CLEAR_CACHE} action */ public static function viewCacheClear() { $db = eZDB::instance(); $isCli = isset($_SERVER['argv']); $output = null; $progressBar = null; $i = 0; $conds = array('action' => SQLIContent::ACTION_CLEAR_CACHE); $limit = array('offset' => 0, 'length' => 50); $count = (int) eZPersistentObject::count(eZPendingActions::definition(), $conds); if ($isCli && $count > 0) { // Progress bar implementation $output = new ezcConsoleOutput(); $output->outputLine('Starting to clear view cache for imported objects...'); $progressBarOptions = array('emptyChar' => ' ', 'barChar' => '='); $progressBar = new ezcConsoleProgressbar($output, $count, $progressBarOptions); $progressBar->start(); } /* * To avoid fatal errors due to memory exhaustion, pending actions are fetched by packets */ do { $aObjectsToClear = eZPendingActions::fetchObjectList(eZPendingActions::definition(), null, $conds, null, $limit); $jMax = count($aObjectsToClear); if ($jMax > 0) { for ($j = 0; $j < $jMax; ++$j) { if ($isCli) { $progressBar->advance(); } $db->begin(); eZContentCacheManager::clearContentCacheIfNeeded((int) $aObjectsToClear[$j]->attribute('param')); $aObjectsToClear[$j]->remove(); $db->commit(); $i++; } } unset($aObjectsToClear); eZContentObject::clearCache(); if (eZINI::instance('site.ini')->variable('ContentSettings', 'StaticCache') == 'enabled') { $optionArray = array('iniFile' => 'site.ini', 'iniSection' => 'ContentSettings', 'iniVariable' => 'StaticCacheHandler'); $options = new ezpExtensionOptions($optionArray); $staticCacheHandler = eZExtension::getHandlerClass($options); $staticCacheHandler::executeActions(); } } while ($i < $count); if ($isCli && $count > 0) { $progressBar->finish(); $output->outputLine(); } }
<?php $mdb = MMDB::instance(); $rows = $mdb->arrayQuery("SELECT id, remote_id FROM ezcontentobject"); $tabRemotes = array(); foreach($rows as $row) $tabRemotes[$row["id"]] = $row["remote_id"]; $sql = "SELECT count(*) as nb FROM mm_users WHERE preferences like '%ratings%'"; $result = $mdb->arrayQuery($sql); $progressBar = new ezcConsoleProgressbar( new ezcConsoleOutput(), intval($result[0]["nb"]), array( 'emptyChar' => ' ', 'barChar' => '=' ) ); $progressBar->start(); $sql = "SELECT * FROM mm_users WHERE preferences like '%ratings%'"; foreach($mdb->arrayQuery($sql) as $row) { if($row["preferences"] != "") { $uuid = $row["uuid"]; $country = $row["country"]; $preferences = json_decode($row["preferences"], true); if($preferences && is_array($preferences) && $preferences["ratings"] && is_array($preferences["ratings"])) { $ratings = $preferences["ratings"]; $ratingsRemote = array();
/** * Starts to run the import * @param array( SQLIImportItem ) $aImportItems * @throws SQLIImportBaseException * @throws ezcConfigurationNoConfigException */ public function runImport(array $aImportItems) { // First check if an import is already running if (SQLIImportToken::importIsRunning()) { throw new SQLIImportBaseException('Another import is already running. Aborting...', SQLIImportBaseException::IMPORT_ALREADY_RUNNING); } $this->token = SQLIImportToken::registerNewImport(); $this->handlePerformanceSettings(); if (empty($aImportItems)) { // If no source handler is provided, consider processing all source handlers available $aImportItems = $this->importINI->variable('ImportSettings', 'AvailableSourceHandlers'); } // Process import items one by one for ($i = 0, $iMax = count($aImportItems); $i < $iMax; ++$i) { try { if (!$aImportItems[$i] instanceof SQLIImportItem) { throw new SQLIImportRuntimeException('Invalid import item !'); } // Update status for import item $aImportItems[$i]->setAttribute('status', SQLIImportItem::STATUS_RUNNING); $aImportItems[$i]->store(); $this->currentImportItem = $aImportItems[$i]; // First check if this handler has all needed configuration $handler = $aImportItems[$i]->attribute('handler'); $handlerSection = $handler . '-HandlerSettings'; if (!$this->importINI->hasSection($handlerSection)) { // Check INI Section throw new ezcConfigurationNoConfigException('Error : Handler "' . $handler . '" does not have proper config section in sqliimport.ini !'); } if (!$this->importINI->hasVariable($handlerSection, 'ClassName')) { // Check if ClassName is properly defined throw new ezcConfigurationNoConfigException('Error : ClassName not defined for "' . $handler . '" in sqliimport.ini !'); } // Default values $handlerClassName = $this->importINI->variable($handlerSection, 'ClassName'); $handlerEnabled = true; $debug = false; $defaultParentNodeID = $this->importINI->variable('ImportSettings', 'DefaultParentNodeID'); $streamTimeout = $this->importINI->variable('ImportSettings', 'StreamTimeout'); if ($this->importINI->hasVariable($handlerSection, 'Enabled')) { $handlerEnabled = $this->importINI->variable($handlerSection, 'Enabled') === 'true'; } if ($this->importINI->hasVariable($handlerSection, 'Debug')) { $debug = $this->importINI->variable($handlerSection, 'Debug') === 'enabled'; } if ($this->importINI->hasVariable($handlerSection, 'DefaultParentNodeID')) { $localParentNodeID = $this->importINI->variable($handlerSection, 'DefaultParentNodeID'); $defaultParentNodeID = is_int($localParentNodeID) ? (int) $localParentNode : $defaultParentNodeID; } if ($this->importINI->hasVariable($handlerSection, 'StreamTimeout')) { $streamTimeout = (int) $this->importINI->variable($handlerSection, 'StreamTimeout'); } // Check $defaultParentNodeID and throw an exception if not consistent $parentNode = eZContentObjectTreeNode::fetch($defaultParentNodeID, false, false); if (!$parentNode) { throw new SQLIImportRuntimeException('Error : invalid DefaultParentNodeID ( ' . $defaultParentNodeID . ' )'); } unset($parentNode); // Check handler class validity if (!class_exists($handlerClassName)) { throw new SQLIImportRuntimeException('Error : invalid handler class "' . $handlerClassName . '". Did you regenerate autolads ?'); } // #################################### // ##### IMPORT HANDLER PROCESSING // #################################### // Instantiate the handler with appropriate options and process it. // Handler must implement ISQLIImportHandler and extend SQLIImportAbstractHandler $handlerOptions = $aImportItems[$i]->attribute('options'); $importHandler = new $handlerClassName($handlerOptions); if (!$importHandler instanceof ISQLIImportHandler || !$importHandler instanceof SQLIImportAbstractHandler) { throw new SQLIImportRuntimeException('Error : invalid handler "' . $handlerClassName . '". Must implement ISQLIImportHandler and extend SQLIImportAbstractHandler.'); } $importHandler->handlerConfArray = $this->importINI->group($handlerSection); $importHandler->initialize(); // Get process length to calculate advancement percentage to track advancement $processLength = $importHandler->getProcessLength(); $percentageAdvancementStep = 100 / $processLength; $handlerName = $importHandler->getHandlerName(); $handlerIdentifier = $importHandler->getHandlerIdentifier(); // Progress bar implementation $progressBarOptions = array('emptyChar' => ' ', 'barChar' => '='); $progressBar = new ezcConsoleProgressbar($this->output, $processLength, $progressBarOptions); $progressBar->start(); $this->cli->warning('Now processing "' . $handlerName . '" handler.'); $isInterrupted = false; while ($row = $importHandler->getNextRow()) { try { $progressBar->advance(); $startTime = time(); $importHandler->process($row); } catch (Exception $e) { SQLIImportLogger::logError('An error occurred during "' . $handlerIdentifier . '" import process : ' . $e->getMessage()); } $aImportItems[$i]->updateProgress($percentageAdvancementStep, $importHandler->getProgressionNotes()); // Now calculate process time for this iteration $endTime = time(); $diffTime = $endTime - $startTime; $oldProcessTime = $aImportItems[$i]->attribute('process_time'); $aImportItems[$i]->setAttribute('process_time', $oldProcessTime + $diffTime); $aImportItems[$i]->store(array('process_time')); // Interruption handling if ($aImportItems[$i]->isInterrupted()) { $this->cli->notice(); SQLIImportLogger::logNotice('Interruption has been requested for current import ! Cleaning and aborting process...'); $isInterrupted = true; break; } } $importHandler->cleanup(); $progressBar->finish(); $this->cli->notice(); unset($importHandler); if (!$isInterrupted) { $aImportItems[$i]->setAttribute('status', SQLIImportItem::STATUS_COMPLETED); $aImportItems[$i]->setAttribute('percentage', 100); // Force percentage to 100% $aImportItems[$i]->store(); } // #################################### // ##### END IMPORT HANDLER PROCESSING // #################################### } catch (Exception $e) { SQLIImportLogger::logError($e->getMessage()); $aImportItems[$i]->setAttribute('status', SQLIImportItem::STATUS_FAILED); $aImportItems[$i]->store(); if (isset($importHandler)) { $importHandler->cleanup(); unset($importHandler); } continue; } } }