public function executeAndReply($_parameters) { $interactDef = interactDef::byId($this->getInteractDef_id()); if (!is_object($interactDef)) { return __('Inconsistance de la base de données', __FILE__); } if (isset($_parameters['profile']) && trim($interactDef->getPerson()) != '') { $person = strtolower($interactDef->getPerson()); $person = explode('|', $person); if (!in_array($_parameters['profile'], $person)) { return __('Vous n\'êtes pas autorisé à exécuter cette action', __FILE__); } } $reply = $interactDef->selectReply(); $replace = array(); $tags = interactDef::getTagFromQuery($this->getQuery(), $_parameters['dictation']); $tags_replace = array(); foreach ($tags as $key => $value) { $tags_replace['#' . $key . '#'] = $value; $replace['#' . $key . '#'] = $value; } $executeDate = null; $dateConvert = array('heure' => 'hour', 'mois' => 'month', 'semaine' => 'week', 'année' => 'year'); if (isset($tags_replace['#duration#'])) { $tags_replace['#duration#'] = str_replace(array_keys($dateConvert), $dateConvert, $tags_replace['#duration#']); $executeDate = strtotime('+' . $tags_replace['#duration#']); } if (isset($tags_replace['#time#'])) { $time = str_replace(array('h'), array(':'), $tags_replace['#time#']); if (strlen($time) == 2) { $time .= ':00'; } else { if (strlen($time) == 3) { $time .= '00'; } } $executeDate = strtotime($time); if ($executeDate < strtotime('now')) { $executeDate += 3600; } } if ($executeDate !== null && !isset($_parameters['execNow'])) { if (date('Y', $executeDate) < 2000) { return __('Erreur impossible de calculer la date de programmation', __FILE__); } if ($executeDate < strtotime('now') + 60) { $executeDate = strtotime('now') + 60; } $crons = cron::searchClassAndFunction('interactQuery', 'doIn', '"interactQuery_id":' . $this->getId()); if (is_array($crons)) { foreach ($crons as $cron) { if ($cron->getState() != 'run') { $cron->remove(); } } } $cron = new cron(); $cron->setClass('interactQuery'); $cron->setFunction('doIn'); $cron->setOption(array_merge(array('interactQuery_id' => intval($this->getId())), $_parameters)); $cron->setLastRun(date('Y-m-d H:i:s')); $cron->setOnce(1); $cron->setSchedule(date('i', $executeDate) . ' ' . date('H', $executeDate) . ' ' . date('d', $executeDate) . ' ' . date('m', $executeDate) . ' * ' . date('Y', $executeDate)); $cron->save(); $replace['#value#'] = date('Y-m-d H:i:s', $executeDate); $result = scenarioExpression::setTags(str_replace(array_keys($replace), $replace, $reply)); return $result; } $colors = config::byKey('convertColor'); foreach ($this->getActions('cmd') as $action) { try { $options = array(); if (isset($action['options'])) { $options = $action['options']; } if ($tags != null) { foreach ($options as &$option) { $option = str_replace(array_keys($tags_replace), $tags_replace, $option); } if (isset($options['color']) && isset($colors[strtolower($options['color'])])) { $options['color'] = $colors[strtolower($options['color'])]; } } $cmd = cmd::byId(str_replace('#', '', $action['cmd'])); if (is_object($cmd) && $cmd->getType() == 'info') { $replace['#unite#'] = $cmd->getUnite(); $replace['#commande#'] = $cmd->getName(); $replace['#objet#'] = ''; $replace['#equipement#'] = ''; $eqLogic = $cmd->getEqLogic(); if (is_object($eqLogic)) { $replace['#equipement#'] = $eqLogic->getName(); $object = $eqLogic->getObject(); if (is_object($object)) { $replace['#objet#'] = $object->getName(); } } } $options['tags'] = $tags_replace; $return = scenarioExpression::createAndExec('action', $action['cmd'], $options); if (trim($return) != '') { $replace['#valeur#'] = $return; } } catch (Exception $e) { log::add('interact', 'error', __('Erreur lors de l\'éxecution de ', __FILE__) . $action['cmd'] . __('. Détails : ', __FILE__) . $e->getMessage()); } } $replace['#profile#'] = isset($_parameters['profile']) ? $_parameters['profile'] : ''; if ($interactDef->getOptions('convertBinary') != '') { $convertBinary = $interactDef->getOptions('convertBinary'); $convertBinary = explode('|', $convertBinary); $replace['1'] = $convertBinary[1]; $replace['0'] = $convertBinary[0]; } $result = scenarioExpression::setTags(str_replace(array_keys($replace), $replace, $reply)); return $result; }
public function doAction($_mode, $_type) { if (!is_array($this->getConfiguration('modes'))) { return; } $actions = array(); foreach ($this->getConfiguration('modes') as $key => $value) { if ($value['name'] == $_mode) { foreach ($value[$_type] as $action) { try { $options = array(); if (isset($action['options'])) { $options = $action['options']; } scenarioExpression::createAndExec('action', $action['cmd'], $options); } catch (Exception $e) { log::add('alarm', 'error', __('Erreur lors de l\'éxecution de ', __FILE__) . $action['cmd'] . __('. Détails : ', __FILE__) . $e->getMessage()); } } return; } } }