Example #1
0
 /**
  * Execute les taches crons sur tous les dsn paramétrés
  * XXX: Les noms de variables sont volontairement exotiques, pour éviter 
  * qu'ils soient redéfinis dans les scripts inclus.
  *
  * @static
  * @access public
  * @return void
  */
 public static function run()
 {
     // ajouter ce check aussi dans les scripts à appeller (protection)
     if (php_sapi_name() != 'cli' || !isset($GLOBALS['DSNS'])) {
         exit(1);
     }
     // for compatibility issues
     if (!isset($argv)) {
         $argv = $_SERVER['argv'];
     }
     $_force_ = isset($argv[1]) && ($argv[1] == '-f' || $argv[1] == '--force');
     // error handler custom
     $_mday_ = date('d');
     $_wday_ = date('w');
     $_hour_ = date('H');
     $_logger_ = Tools::loggerFactory();
     // pour intercepter les fatal errors
     set_error_handler(array('CronTaskManager', 'errorHandler'));
     ob_start(array('CronTaskManager', 'fatalErrorHandler'));
     foreach ($GLOBALS['DSNS'] as $_dsn_) {
         $_dsn_ = constant($_dsn_);
         if (substr_count($_dsn_, '/') == 4) {
             // XXX compte qui n'a pas de base propre: les crons ne sont pas
             // executées
             continue;
         }
         Database::connection($_dsn_);
         // IMPORTANT: le parmètre nocache doit être à true !
         $_col_ = Object::loadCollection('CronTask', array(), array(), array(), 0, 1, false, true);
         $_count_ = $_col_->getCount();
         for ($_i_ = 0; $_i_ < $_count_; $_i_++) {
             $_cron_ = $_col_->getItem($_i_);
             if (!$_cron_->getActive() || !$_force_ && $_cron_->getHourOfDay() != $_hour_) {
                 continue;
             }
             if ($_force_ || $_cron_->getDayOfMonth() == $_mday_ || $_cron_->getDayOfWeek() == $_wday_ || $_cron_->getDayOfWeek() == -1 && $_cron_->getDayOfMonth() == 0) {
                 // le script trouvera la cnx à la bado déjà ouverte
                 $_cron_script_ = CRON_DIR . '/' . $_cron_->getScriptName();
                 if (include $_cron_script_) {
                     $vars = $file_vars = $self_vars = array();
                     $self_vars = array_keys(get_defined_vars());
                     $file_vars = array_keys(get_defined_vars());
                     // loggue l'execution du script
                     $_msg_ = sprintf('Cron script "%s" executed on database "%s"', $_cron_script_, Database::connection()->database);
                     $_logger_->log($_msg_, PEAR_LOG_NOTICE);
                     // nettoie les locales du fichier inclu
                     $vars = array_diff($file_vars, $self_vars);
                     foreach ($vars as $v) {
                         unset(${$v});
                     }
                 }
             }
         }
     }
     ob_end_flush();
     restore_error_handler();
 }
Example #2
0
File: Server.php Project: arhe/pwak
 /**
  * Appelle la méthode statique $method de la classe $entity.
  *
  * @access public
  * @param  string $entity
  * @param  string $dndSortableField
  * @param  array $ids
  * @return string json
  */
 public function dndSortEntity($entity, $dndSortableField, $ids, $page = 1)
 {
     $setter = 'set' . $dndSortableField;
     if (!method_exists($entity, $setter) || empty($ids)) {
         return json_encode($entity . '::' . $setter . ' does not exists.');
     }
     $col = Object::loadCollection($entity, array('Id' => $ids));
     $index = ($page - 1) * count($ids) + 1;
     foreach ($ids as $id) {
         $item = $col->getItemById($id);
         if (!$item instanceof $entity) {
             continue;
         }
         $item->{$setter}($index);
         $item->save();
         $index++;
     }
     return json_encode(true);
 }