/** * Устанавливает ноду с данными о том где лежат постеры и превьющки */ public function getHttpPath() { $rootNode = \Difra\Action::getInstance()->controller->root; $videoManagerNode = $rootNode->appendChild($rootNode->ownerDocument->createElement('video-preview')); $videoManagerNode->setAttribute('thumbs', '/' . $this->httpThumbs); $videoManagerNode->setAttribute('posters', '/' . $this->httpPosters); }
/** * Определяет соответствует ли текущая страница странице с формой * @static */ public static function find() { $uri = '/' . \Difra\Action::getInstance()->getUri(); $Cache = \Difra\Cache::getInstance(); $data = $Cache->get('fp_forms'); if (!$data) { // нет данных в кэше? установить! $db = \Difra\MySQL::getInstance(); $query = "SELECT * FROM `fp_forms`"; $res = $db->fetch($query); if (!empty($res)) { foreach ($res as $k => $fData) { $data[$fData['id']] = $fData; } $Cache->put('fp_forms', $data, 10800); } } // ищем нужную страницу if (!empty($data)) { foreach ($data as $k => $form) { if (isset($form['uri']) && $form['uri'] == $uri && $form['hidden'] == 0) { return $form['id']; } } } return false; }
/** * Выбирает рабочий cdn хост */ public function selectHost() { $this->_getSettings(); $db = \Difra\MySQL::getInstance(); $res = null; $stage = null; // stage 1 — select from 'ok' hosts with softer load of new cdn hosts try { $queryWrk = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE (`status`='ok'\n\t\t\t\tOR `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE))\n\t\t\t\tAND `created`<DATE_SUB(NOW(),INTERVAL " . intval(rand(0, 24)) . " HOUR)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($queryWrk); if (!$res) { $db->query('REPLACE INTO `cdn_hosts_work` SELECT * FROM `cdn_hosts`'); $res = $db->fetchRow($queryWrk); } $stage = 1; } catch (\Difra\Exception $ex) { } // stage 2 — select from 'ok' hosts without softer load of new cdn hosts if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE `status`='ok'\n\t\t\t\tAND `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 2; } catch (\Difra\Exception $ex) { } } // stage 3 — select from busy hosts if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts_work`\n\t\t\t\tWHERE `status`='busy'\n\t\t\t\tORDER BY `selected` DESC\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 3; } catch (\Difra\Exception $ex) { } } // stage 4 - select from hosts that haven't been checked for a long time if (!$res) { try { $query = "SELECT `id`, `host`, `port` FROM `cdn_hosts`\n\t\t\t\tWHERE `failed`<DATE_SUB(NOW(),INTERVAL " . intval($this->settings['failtime']) . " MINUTE)\n\t\t\t\tORDER BY `selected`\n\t\t\t\tLIMIT 1"; $res = $db->fetchRow($query); $stage = 4; } catch (\Difra\Exception $ex) { } } if (!empty($res)) { $rootNode = \Difra\Action::getInstance()->controller->root; $rootNode->setAttribute('cdn_host', $res['host'] . ':' . $res['port']); $rootNode->setAttribute('cdn_host_id', $res['id']); $this->_updateSelected($res['id'], $res['host'] . ':' . $res['port']); if (\Difra\Debugger::getInstance()->isEnabled()) { $rootNode->setAttribute('cdn_stage', $stage); } return; } }
/** * Определяет зашел ли пользователь на страницу формы и запускает все нужные процесса для её отображения */ public function run() { if ($formId = \Difra\Plugins\FormProcessor\Form::find()) { $action = \Difra\Action::getInstance(); $action->className = '\\Difra\\Plugins\\FormProcessor\\Controller'; $action->method = 'formAction'; $action->parameters = [$formId]; } }