Détail du message 16152.2

Message numéro 2 dans le sujet Problème de publication de documents.

  • 16152.2 en réponse à 16152.1 écrit par teles

    14/07/2010 08:39


    Franck Stauffer
    Titre : Responsable produit
    Rang : Expert
    S'il faut rattraper une différence, rien n'est prévu car avec ce nouveau système les erreurs sont moins fréquentes qu'avant (si la tache de publication plante à la date D, la prochaine éxecution rattrapera ce qui s'est passé entre D et maintenant).
    Néanmoins, un script du type (à éxecuter avec le Framework chargé et librement inspiré de http://git.rbschange.....14509abaec02b24c2e49 ) fait facilement l'affaire :
    $start = date_Calendar::now()->sub(date_Calendar::MONTH, 1)->toString(); // Ratrapper tout depuis 1 moins
    $end = date_Calendar::now()->toString();
    $toProcess = array();
    $compiledFilePath = f_util_FileUtils::buildChangeBuildPath('publishListenerInfos.ser');
    if (file_exists($compiledFilePath))
    {
    	$models = unserialize(file_get_contents($compiledFilePath));
    	$rc = RequestContext::getInstance();
    	foreach ($models as $modelName => $langs) 
    	{
    		foreach ($langs as $lang)
    		{
    			try
    			{
    				$rc->beginI18nWork($lang);
    				$query = f_persistentdocument_PersistentProvider::getInstance()->createQuery($modelName, false);
    				$query->add(Restrictions::in('publicationstatus', array('ACTIVE', 'PUBLICATED')))
    						->add(Restrictions::orExp(Restrictions::between('startpublicationdate', $start, $end), 
    								Restrictions::between('endpublicationdate', $start, $end)))
    						->setProjection(Projections::property('id', 'id'));
    						
    				$results = $query->find();
    				foreach ($results as $resultArray)
    				{
    					$toProcess[] = $resultArray['id'] . '/' . $lang;
    				}
    				$rc->endI18nWork();
    			}
    			catch (Exception $e)
    			{
    				$rc->endI18nWork($e);
    			}
    		}
    	}
    }
    else
    {
    	Framework::error(__METHOD__ . ' File not found ' . $compiledFilePath);
    }
    
    $documentsArray = array_chunk($toProcess, 500);
    $script = 'framework/listener/publishDocumentsBatch.php';
    foreach ($documentsArray as $chunk)
    {
    	f_util_System::execHTTPScript($script, $chunk);
    }
    

    Édité par Franck Stauffer 14/07/2010 08:39

 
1377 membres
Aucun membre connecté