Пример #1
0
 /**
  * Finds updates by their tags that match the given search query.
  * @param string $term the search term.
  * @param integer $page the current page.
  * @return array found tags.
  */
 public static function searchFor($term, $page = 0)
 {
     if (empty($term)) {
         return [];
     }
     $tagIds = static::getTagIds($term);
     if (0 === count($tagIds)) {
         return [];
     }
     $query = "SELECT u.*," . (CW::$app->user->isLogged() ? "0 < (SELECT count(*) FROM `update_upvoters` WHERE `update_id` = `u`.`id` AND `user_id` = " . CW::$app->user->identity->id . ") " : ' false ') . " `voted` FROM updates u JOIN (SELECT distinct update_id FROM update_tags WHERE tag_id IN (" . ArrayHelper::getArrayToString($tagIds, ',') . ") LIMIT " . static::LOAD_FACTOR . " OFFSET " . static::LOAD_FACTOR * $page . ") ut ON ut.update_id = u.id ORDER BY u.rate DESC, u.created_at DESC";
     $stmt = CW::$app->db->executeQuery($query);
     $updates = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     foreach ($updates as &$update) {
         $update['imgUrl'] = '/images/updates/' . $update['id'] . '/' . Update::IMAGE_MEDIUM_WIDTH . 'xX.jpeg';
         $update['updateUrl'] = Update::getUpdateUrl($update['id']);
         $update['postedAgo'] = BaseModel::getPostedAgoTime($update['created_at']);
         $update['created_at'] = strtotime($update['created_at']);
         $update['voted'] = (bool) $update['voted'];
     }
     if (0 < count($updates)) {
         Update::setUpdateTags($updates);
         Update::setUpdatePostedFrom($updates);
         Image::setUpdateImages($updates);
     }
     return $updates;
 }
Пример #2
0
 public function doCreate()
 {
     $content = CW::$app->request->post('content');
     $updateId = CW::$app->request->post('updateId');
     if (empty($content) || empty($updateId)) {
         return false;
     }
     $replyTo = CW::$app->request->post('replyTo');
     $result = \models\Comment::create($content, $updateId, CW::$app->user->identity->id, 0 === $replyTo ? null : $replyTo);
     if ($result) {
         $result->owner = ['id' => CW::$app->user->identity->id, 'username' => htmlspecialchars(CW::$app->user->identity->username), 'profileUrl' => \models\User::getProfileUrl(CW::$app->user->identity->id), 'pictureUrl' => CW::$app->user->identity->getProfilePicUrl()];
         $result->postedAgo = \models\BaseModel::getPostedAgoTime(date("Y-m-d H:i:s", time()));
         $result->upvotes = 0;
         $result->replies = $replyTo ? false : [];
         $result->voted = false;
         $result->content = htmlspecialchars($result->content);
     }
     return json_encode($result);
 }
Пример #3
0
 public static function getOne($id)
 {
     if (!is_numeric($id)) {
         return null;
     }
     $stmt = CW::$app->db->executeQuery("SELECT *, " . (CW::$app->user->isLogged() ? "0 < (SELECT count(*) FROM `update_upvoters` WHERE `update_id` = `updates`.`id` AND `user_id` = " . CW::$app->user->identity->id . ") " : ' false ') . " `voted` FROM `updates` WHERE `id` = {$id}");
     $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
     if (1 === count($result)) {
         $update = $result[0];
         $update['description'] = htmlspecialchars($update['description']);
         $update['postedAgo'] = BaseModel::getPostedAgoTime($update['created_at']);
         $update['voted'] = (bool) $update['voted'];
         $update['tags'] = UpdateTag::getUpdateTags($update['id']);
         return $update;
     }
     return null;
 }
Пример #4
0
 public static function getReplies($replyTo, $last = null)
 {
     if (!is_numeric($replyTo) || !is_numeric($replyTo)) {
         return [];
     }
     $result = [];
     $result['hasMore'] = false;
     $last = is_numeric($last) ? " AND c.`posted_on` > {$last}" : '';
     $query = "SELECT c.*, u.id ownerId, u.username ownerUsername, u.profile_img_id FROM `comments` c JOIN `users` u ON c.`user_id` = u.`id` WHERE c.`reply_to` = {$replyTo} {$last} ORDER BY c.`posted_on` ASC LIMIT 7";
     $stmt = \CW::$app->db->executeQuery($query);
     $replies = $stmt->fetchAll(\PDO::FETCH_OBJ);
     $repliesCount = count($replies);
     $last = null;
     for ($i = 0; $i < $repliesCount; $i++) {
         $last = $replies[$i]->posted_on;
         $replies[$i]->postedAgo = BaseModel::getPostedAgoTime($replies[$i]->posted_on);
         $replies[$i]->content = htmlspecialchars($replies[$i]->content);
         $replies[$i]->owner = ['id' => $replies[$i]->ownerId, 'username' => htmlspecialchars($replies[$i]->ownerUsername), 'profileUrl' => \models\User::getProfileUrl($replies[$i]->ownerId), 'pictureUrl' => User::getProfilePictureUrl($replies[$i]->profile_img_id, $replies[$i]->ownerId)];
     }
     if (0 < $repliesCount) {
         $stmt = CW::$app->db->executeQuery("SELECT `reply_to` FROM `comments` WHERE `reply_to` = {$replyTo} AND `posted_on` > '" . $last . "' LIMIT 1");
         $_result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
         if (0 < count($_result)) {
             $result['hasMore'] = true;
         }
     }
     $result['items'] = $replies;
     return $result;
 }