Пример #1
0
 public function search($params, $personal = false)
 {
     /* User identifier */
     $userIdentifier = \Yii::$app->user->getId() ? \Yii::$app->user->getId() : 0;
     /* Base query */
     $query = new \yii\db\Query();
     /* Selector */
     $query->select(['"projects".*', 'COUNT("boxes"."id") as boxCount']);
     /* Table */
     $query->from('projects');
     /* Joins */
     $query->join('LEFT JOIN', 'boxes', '"projects"."id" = "boxes"."project_id" AND "boxes"."deleted" = FALSE');
     $query->join('LEFT JOIN', 'project_counters', '"projects"."id" = "project_counters"."project_id" AND "project_counters"."user_id" = :user_id', ['user_id' => $userIdentifier]);
     /* Conditions */
     $query->where(['"projects"."deleted"' => false]);
     if (!$personal) {
         if (!is_object(Yii::$app->user->getIdentity()) || is_object(Yii::$app->user->getIdentity()) && !Yii::$app->user->getIdentity()->hasRole(['validator', 'administrator'])) {
             $query->andWhere(['or', ['"projects"."owner_id"' => $userIdentifier], ['"projects"."main_observer_id"' => $userIdentifier], ['or', ['is', '"projects"."embargo"', NULL], ['<=', '"projects"."embargo"', 'NOW()']], ['is not', '"project_counters"."user_id"', NULL]]);
         }
     } else {
         $query->andWhere(['or', ['"projects"."owner_id"' => $userIdentifier], ['"projects"."main_observer_id"' => $userIdentifier], ['is not', '"project_counters"."user_id"', NULL]]);
     }
     /* Group */
     $query->groupBy('"projects"."id"');
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     return $dataProvider;
 }
 public function up()
 {
     $query = new \yii\db\Query();
     $query->select('notification.id')->from('notification');
     $query->andWhere(['or', ['class' => 'humhub\\modules\\space\\notifications\\Invite'], ['class' => 'humhub\\modules\\space\\notifications\\InviteAccepted'], ['class' => 'humhub\\modules\\space\\notifications\\InviteDeclined'], ['class' => 'humhub\\modules\\space\\notifications\\ApprovalRequest'], ['class' => 'humhub\\modules\\space\\notifications\\ApprovalRequestAccepted'], ['class' => 'humhub\\modules\\space\\notifications\\ApprovalRequestDeclined']]);
     $query->leftJoin('user', 'notification.originator_user_id=user.id');
     $query->andWhere('user.id IS NULL');
     foreach ($query->all() as $notification) {
         $this->delete('notification', ['id' => $notification['id']]);
     }
 }
Пример #3
0
 public function sum($type, $date_from, $date_to)
 {
     //$date_from = "01-01-$yaer 00:00:00";
     //$date_to = "31-12-$yaer 23:59:59";
     $query = new \yii\db\Query();
     $query->select("sum(`leadsum`) AS lead,{{%transactions}}.type,{{%transactions}}.valuedate")->from('{{%transactions}}');
     $query->join = [['LEFT JOIN', '{{%accounts}}', '{{%accounts}}.id=account_id']];
     $query->groupBy = "{{%accounts}}.type";
     $query->where("{{%accounts}}.type = :type");
     $query->andWhere("valuedate>=:date_from");
     $query->andWhere("valuedate<=:date_to");
     $query->params([':date_from' => $date_from, ':date_to' => $date_to, ':type' => $type]);
     $command = $query->createCommand();
     return $command->queryScalar();
 }
Пример #4
0
 public function getAllBestSellerProducts($limit)
 {
     $time = new \DateTime('now');
     $today = $time->format('Y-m-d');
     $query = new \yii\db\Query();
     $query->select('order_product.product_id , SUM(order_product.quantity) AS total')->from('order_product');
     $query->join('LEFT JOIN', 'order', 'order_product.order_id = order.order_id');
     $query->join('LEFT JOIN', 'product', 'order_product.product_id = product.product_id');
     $query->join('LEFT JOIN', 'product_to_store', 'product.product_id = product_to_store.product_id');
     $query->where(['>', 'order.order_status_id', 0]);
     $query->andWhere(['=', 'product.status', 1]);
     $query->andWhere(['<=', 'product.date_available', $today]);
     $query->andWhere(['=', 'product_to_store.store_id', (int) \Yii::$app->params['store_id']]);
     $query->groupBy('order_product.product_id');
     $query->orderBy(['total' => SORT_DESC]);
     $query->limit($limit);
     $query->offset(0);
     return $query->all();
 }
Пример #5
0
 /**
  * Method to getMessages.
  *
  * @param $whom_id
  * @param $from_id
  * @param $type
  *
  * @throws EceptionMessages
  * @return array
  */
 protected function getMessages($whom_id, $from_id = null, $type = null, $last_id = null)
 {
     $table_name = Messages::tableName();
     $my_id = $this->getIdCurrentUser();
     $query = new \yii\db\Query();
     $query->select(['FROM_UNIXTIME(msg.created_at, "%d-%m-%Y %H:%i:%S") as created_at', 'msg.id', 'msg.status', 'msg.message', "usr1.id as from_id", "usr1.{$this->attributeNameUser} as from_name", "usr2.id as whom_id", "usr2.{$this->attributeNameUser} as whom_name"])->from("{$table_name} as msg")->leftJoin("{$this->userTableName} as usr1", 'usr1.id = msg.from_id')->leftJoin("{$this->userTableName} as usr2", 'usr2.id = msg.whom_id');
     if ($from_id) {
         $query->where(['msg.whom_id' => $whom_id, 'msg.from_id' => $from_id])->orWhere(['msg.from_id' => $whom_id, 'msg.whom_id' => $from_id]);
     } else {
         $query->where(['msg.whom_id' => $whom_id]);
     }
     //if not set type
     //send all message where no delete
     if ($type) {
         $query->andWhere(['=', 'msg.status', $type]);
     } else {
         /*
         $query->andWhere('((msg.is_delete_from != 1 AND from_id = :my_id) OR (msg.is_delete_whom != 1 AND whom_id = :my_id) ) ', [
             ':my_id' => $my_id,
         ]);
         */
     }
     $query->andWhere('((msg.is_delete_from != 1 AND from_id = :my_id) OR (msg.is_delete_whom != 1 AND whom_id = :my_id) ) ', [':my_id' => $my_id]);
     if ($last_id) {
         $query->andWhere(['>', 'msg.id', $last_id]);
     }
     $return = $query->orderBy('msg.id')->all();
     $ids = [];
     foreach ($return as $m) {
         if ($m['whom_id'] == $my_id) {
             $ids[] = $m['id'];
         }
     }
     //change status to is_read
     if (count($ids) > 0) {
         Messages::updateAll(['status' => Messages::STATUS_READ], ['in', 'id', $ids]);
     }
     $user_id = $this->getIdCurrentUser();
     return array_map(function ($r) use($user_id) {
         $r['i_am_sender'] = $r['from_id'] == $user_id;
         return $r;
     }, $return);
 }
Пример #6
0
 public function actionUser()
 {
     echo 'Start export.' . PHP_EOL;
     // Наше PDO подключение к БД
     $db = Yii::$app->db;
     // Размер одной части обрабатываемых данных
     $part_size = 1000;
     $fields = ['user.id' => 'ID', 'profile.name' => 'Name', 'profile.last_name' => 'Last Name', 'user.social_id' => 'Social ID', 'created_at' => 'Created at'];
     // Файл, в который будем записывать результат (в корне сайта)
     $fname = Yii::$app->basePath . '/export/user.csv';
     $f = @fopen($fname, 'w');
     // Записываем в начало файла заголовок для sitemap-файла
     $csvHeader = '"' . implode('";"', $fields) . '"';
     fwrite($f, $csvHeader . PHP_EOL);
     $query = new \yii\db\Query();
     // Команда, которая будет делать порционную выборку новостей
     $query->select(implode(',', array_keys($fields)));
     $query->from('user, profile');
     $query->andWhere('user.id = profile.user_id');
     //$query->join('LEFT JOIN', 'profile', 'user.id = profile.user_id');
     // Определяем количество данных, которое нам нужно обработать
     $all_count = (int) $db->createCommand("SELECT COUNT(id) FROM user")->queryScalar();
     // Устанавливаем лимит, сколько новостей надо выбрать из таблицы
     $query->limit($part_size);
     // Перебираем все части данных
     for ($i = 0; $i < ceil($all_count / $part_size); $i++) {
         // Сюда будем складывать порции данных, для записи в файл, каждый
         // элемент массива - это одна строка
         $part = array();
         // Вычисляем отступ от уже обработанных данных
         $offset = $i * $part_size;
         // Устанавливам отступ
         $query->offset($offset);
         // Находим очередную часть данных
         $rows = $query->all();
         // Перебираем найденные данные
         foreach ($rows as $row) {
             $row['created_at'] = date('m-d-Y', $row['created_at']);
             // Открываем тег <url> - начало описания элемента в sitemap-файле
             $part[] = '"' . implode('";"', $row) . '"';
         }
         // Убираем из памяти найденную часть данных
         unset($rows);
         // Добавляем в наш файл обработанную часть данных
         if (count($part)) {
             // Здесь мы объединяем все элементы массива $xml в строки
             fwrite($f, implode(PHP_EOL, $part) . PHP_EOL);
         }
         unset($part);
     }
     // Заканчиваем работу с файлом
     fclose($f);
     echo 'Done.' . PHP_EOL;
 }