예제 #1
0
파일: BaseStock.php 프로젝트: ilivanoff/www
 /**
  * Идентификатор акции - хэш от типа акции и её параметров.
  * Две акции с одним типом но разными кодами считаются разными.
  * 
  * @param array $params - параметры акции
  */
 private function sign(array $params)
 {
     $type = self::getType();
     $sign['_STOCK_CLASS_TYPE_'] = $type;
     foreach (PsUtil::getClassConsts($this, 'DATA_') as $param) {
         $sign[$param] = check_condition(array_get_value($param, $params), "Для акции {$type} не указан обязательный параметр [{$param}].");
     }
     return simple_hash($sign);
 }
예제 #2
0
 /**
  * Класс для создания экземпляра источника данных.
  * 
  * @param string $mident - идентификатор маппинга. Должен совпадать для источника и цели.
  * @param array $params - параметры. Используются для уточнения, что необходимо загрузить (например идентификатор фолдинга).
  * @return MappingSource
  */
 public static final function inst($mident, array $params = array())
 {
     //Получим название класса-имплементации
     $class = get_called_class();
     //Отсортируем параметры
     ksort_deep($params);
     //Получим hash загрузчика данных
     $hash = simple_hash(array('class' => $class, 'params' => $params, 'mident' => $mident));
     if (!array_key_exists($hash, self::$items)) {
         self::$items[$hash] = new $class($class, $params, $mident, $hash);
     }
     return self::$items[$hash];
 }
예제 #3
0
 private final function fetchPost($fetchType, $cached)
 {
     $entity = $this->pp()->getFolding()->getFoldedEntity($this->postContent->getIdent());
     switch ($fetchType) {
         case self::FETCH_TYPE_PARAMS:
             $smartyParams['showcase_mode'] = false;
             $cacheId = $cached ? simple_hash($smartyParams) : null;
             return $entity->fetchTpl($smartyParams, FoldedResources::FETCH_RETURN_PARAMS_OB, false, $cacheId);
         case self::FETCH_TYPE_CONTENT:
             $smartyParams['showcase_mode'] = false;
             $cacheId = $cached ? simple_hash($smartyParams) : null;
             return $entity->fetchTpl($smartyParams, FoldedResources::FETCH_RETURN_FULL_OB, true, $cacheId);
         case self::FETCH_TYPE_CONTENT_SHOWCASE:
             $smartyParams['showcase_mode'] = true;
             $cacheId = $cached ? simple_hash($smartyParams) : null;
             return $entity->fetchTpl($smartyParams, FoldedResources::FETCH_RETURN_FULL_OB, $cacheId);
     }
     raise_error("Неизвестный тип фетчинга поста: [{$fetchType}]");
 }
예제 #4
0
 /**
  * Метод возвращает список действий, которые должны быть выполнены в рамках триггера.
  * Под действием понимается вызов процедуры.
  * 
  * @return null|string
  */
 public static function getTriggerActions($table, $scope, $action)
 {
     $result = array();
     $TABLE_WITH_CACHE = self::getTablesWithCache($scope == ENTITY_SCOPE_PROJ ? ENTITY_SCOPE_ALL : $scope);
     $TABLE2FOLDINGS = self::getTables2Foldings($scope == ENTITY_SCOPE_PROJ ? ENTITY_SCOPE_ALL : $scope);
     if (in_array($table, $TABLE_WITH_CACHE) || array_key_exists($table, $TABLE2FOLDINGS)) {
         $result[] = "CALL onDbChange('{$table}', '" . DbBean::CHANGE_TABLE . "')";
     }
     if ($action == self::ACTION_UPDATE && array_key_exists($table, $TABLE2FOLDINGS)) {
         /* @var $folding FoldedResources */
         foreach ($TABLE2FOLDINGS[$table] as $folding) {
             $columnIdent = $folding->getTableColumnIdent();
             $columnStype = $folding->getTableColumnStype();
             if ($columnStype) {
                 //Если в таблице есть столбец с подтипом фолдинга, то достаточно добавить один триггер
                 $ftype = $folding->getFoldingType();
                 $result[] = "CALL onDbChange(CONCAT('{$ftype}-', NEW.{$columnStype}, '-', NEW.{$columnIdent}), '" . DbBean::CHANGE_FOLD_ENT . "')";
             } else {
                 $unique = $folding->getUnique();
                 $result[] = "CALL onDbChange(CONCAT('{$unique}-', NEW.{$columnIdent}), '" . DbBean::CHANGE_FOLD_ENT . "')";
             }
         }
     }
     /**
      * Небольшая обработка
      */
     $fetched = array();
     foreach ($result as $line) {
         $fetched[] = "\t" . ensure_ends_with(trim($line), ';');
     }
     /*
      * Если мы собираем действия для проекта и они совпадают с действиями для SDK - триггер не выкладываем
      */
     if ($scope == ENTITY_SCOPE_PROJ) {
         $sdkActions = self::getTriggerActions($table, ENTITY_SCOPE_SDK, $action);
         if (simple_hash($fetched) == simple_hash($sdkActions)) {
             return null;
             //---
         }
     }
     return $fetched;
 }
예제 #5
0
 /**
  * Метод возвращает информацию из информационного шаблона, производя его фетчинг
  * с переданными параметрами Smarty.
  */
 public function getInfo($ident, $tpl, array $smartyParams = array())
 {
     //Информационный шаблон
     $tpl = $tpl instanceof DirItem ? $tpl : $this->getInfoDi($ident, $tpl);
     //Если шаблон не сущетвует - просто пропускаем его, и не будем ругаться
     if (!$tpl->isFile()) {
         return null;
         //---
     }
     //Ключом являются параметры Смарти, с которыми мы фетчим информационный шаблон
     $cacheKey = simple_hash($smartyParams);
     //Идентификатором кеша является путь к файлу шаблона
     $cacheId = self::CACHE_INFO_TPL . md5($tpl->getRelPath());
     //Пробуем загрузить закешированный
     $cached = to_array($this->getFromFoldedCache($ident, $cacheId, array()));
     if (!array_key_exists($cacheKey, $cached)) {
         $cached[$cacheKey] = $this->getInfoTplCtt($ident, $tpl, $smartyParams);
         $this->saveToFoldedCache($cached, $ident, $cacheId);
     }
     return $cached[$cacheKey];
 }
예제 #6
0
 /** @return CssSpritesCreator */
 public static function inst(array $params = array())
 {
     $hash = simple_hash($params);
     return self::$INSTS[$hash] = array_key_exists($hash, self::$INSTS) ? self::$INSTS[$hash] : new CssSpritesCreator($params);
 }