Example #1
0
 protected function doSearch(PostArrayAdapter $params)
 {
     /*
      * Параметры
      */
     $process = $params->int('process');
     $action = $params->int('action');
     $actionParent = $params->int('parent_action');
     $dateFrom = $params->int('date_from');
     $dateTo = $params->int('date_to');
     /*
      * Запрос
      */
     $what[] = 'id_rec';
     $what[] = 'concat(ifnull(id_user, ""), concat("/", id_user_authed)) as user_authed';
     $what[] = 'dt_event';
     $what[] = 'n_action';
     $what[] = 'v_data';
     $what[] = 'b_encoded';
     $where['id_process'] = $process;
     if ($actionParent) {
         $where['id_rec_parent'] = $actionParent;
     }
     if ($action) {
         $where['n_action'] = $action;
     }
     if ($dateFrom) {
         $where[] = Query::assocParam('dt_event', $dateFrom, true, '>=');
     }
     if ($dateTo) {
         $where[] = Query::assocParam('dt_event', $dateTo, true, '<=');
     }
     $order = 'dt_event asc, id_rec asc';
     $limit = 500;
     /*
      * Работа с данными
      */
     $query = Query::select($what, 'ps_audit', $where, null, $order, $limit);
     $result = PSDB::getArray($query);
     foreach ($result as &$row) {
         //Декодируем действие
         $row['n_action'] = BaseAudit::getByCode($process)->decodeAction($row['n_action'], false);
         //Декодируем данные
         $encoded = 1 * $row['b_encoded'];
         if ($encoded) {
             $row['v_data'] = print_r(BaseAudit::decodeData($row['v_data']), true);
         }
         unset($row['b_encoded']);
     }
     $results = new SearchResults($result, $query);
     $results->addSetting('v_data', SearchResults::COL_PRE);
     $results->addSetting('n_action', SearchResults::COL_NOWRAP);
     return $results;
 }
Example #2
0
 /**
  * Метод загражает карту 'код процесса' => 'код действия' => 'кол-во записей'
  * 
  * @return array
  */
 public function getProcessStatistic($dateTo)
 {
     $where = array();
     if ($dateTo) {
         $where[] = Query::assocParam('dt_event', $dateTo, true, '<=');
     }
     $result = array();
     foreach ($this->getArray(Query::select('id_process, n_action, count(1) as cnt', 'ps_audit', $where, 'id_process, n_action')) as $rec) {
         $result[$rec['id_process']][$rec['n_action']] = $rec['cnt'];
     }
     return $result;
 }
Example #3
0
 /**
  * Создание пользователя
  * @return int userId - код нового пользователя
  */
 public final function createUser(RegFormData $data)
 {
     $email = PsCheck::email($data->getUserMail());
     //Проверим, что пользователь с таким email ещё не заведён
     check_condition(!$this->hasMail($email), "Пользователь с почтой [{$email}] уже зарегистрирован");
     //Подготовим поля для вставки
     $params[self::FIELD_NAME] = $data->getUserName();
     $params[self::FIELD_SEX] = $data->getSex();
     $params[self::FIELD_EMAIL] = $email;
     $params[self::FIELD_PASSWD] = self::hashPassword($data->getPassword());
     $params[self::FIELD_B_ADMIN] = 0;
     $params[self::FIELD_B_CAN_LOGIN] = 1;
     $params[] = Query::assocParam(self::FIELD_DT_REG, 'UNIX_TIMESTAMP()', false);
     //Выполняем вставку
     $userId = $this->register($this->insert(Query::insert('users', $params)));
     //Сохраним данные пользователя в аудит
     UserAudit::inst()->afterRegistered($userId, array_filter_keys($this->getUserDataById($userId), self::$SKIP_AUDIT_ON_CREATE_FIELDS));
     //Возвращаем код пользователя
     return $userId;
 }
Example #4
0
 protected function executeImpl(ArrayAdapter $params)
 {
     $action = $params->str('action');
     $date = $params->int('date');
     $res = array();
     switch ($action) {
         case 'search':
             $res = AdminAuditTools::getAuditStatistic($date);
             break;
         case 'dump':
             $where[] = Query::assocParam('dt_event', $date, true, '<=');
             $order[] = 'dt_event asc';
             $zipDi = AdminTableDump::dumpTable('id_rec', 'ps_audit', $where, $order);
             check_condition($zipDi instanceof DirItem, 'Ошибка снятия дампа. Смотрите лог для деталей.');
             $res['path'] = $zipDi->getAbsPath();
             break;
         case 'load-dumps':
             $res['dumps'] = AP_APAudit::getInstance()->getAuditDumpsInfo();
             break;
         default:
             raise_error("Unknown action: {$action}");
     }
     return new AjaxSuccess($res);
 }
Example #5
0
 public function getPostsBeforPost($postId, $limit)
 {
     return $this->loadPosts('id_post, dt_publication', is_inumeric($postId) ? Query::assocParam('dt_publication', "(select i.dt_publication from {$this->postsView} i where i.id_post=?)", false, '<', array($postId)) : null, array('dt_publication desc', 'id_post desc'), $limit);
 }
Example #6
0
 /**
  * Метод загружает порцию сообщений - используется как для построения дерева, так и для дозагрузки сообщений в ветку.
  */
 public function loadMsgsPortion($threadId = null, $maxCount = -1, $upDown = true, $rootId = null, &$bHasMore = false)
 {
     $where = array();
     if (is_inumeric($rootId)) {
         $where[] = Query::assocParam('id_root', $rootId, true, $upDown ? '>' : '<');
     }
     if ($this->threadIdColumn) {
         $where[] = "{$this->threadIdColumn} is not null";
         $where[$this->threadIdColumn] = $threadId;
     }
     $orderRoot = 'id_root ' . ($upDown ? 'asc' : 'desc');
     $orderMsgs = array('dt_event asc', $this->idColumn . ' asc');
     $order = array($orderRoot, $orderMsgs);
     $limit = null;
     if ($maxCount > 0) {
         $groups = $this->getArray(Query::select('count(1) as cnt, id_root', $this->table, $where, 'id_root', $orderRoot, $maxCount + 1));
         $groupNum = 0;
         $groupsCnt = count($groups);
         foreach ($groups as $group) {
             ++$groupNum;
             //$rootId = $group['id_root'];
             $limit = ($limit ? $limit : 0) + (int) $group['cnt'];
             if ($limit >= $maxCount) {
                 $bHasMore = $groupsCnt > $groupNum;
                 break;
             }
         }
     }
     //Мы вычислили лимит, теперь можно и загрузить сообщения
     return $this->loadMessages(Query::select('*', $this->table, $where, null, $order, $limit));
 }