예제 #1
0
파일: Tag.php 프로젝트: skybird/phalcon
    public function getRelatedPosts($postId, $limit = 10)
    {
        $phql = <<<QUERY
SELECT B.postId, B.tagId, SUM( LOG( 100 / C.count ) ) AS weight
FROM Eva\\EvaBlog\\Entities\\TagsPosts AS A
LEFT JOIN Eva\\EvaBlog\\Entities\\TagsPosts AS B ON A.tagId = B.tagId
LEFT JOIN Eva\\EvaBlog\\Entities\\Tags AS C ON B.tagId = C.id
WHERE A.postId = {$postId}
AND B.postId != {$postId}
GROUP BY B.postId
ORDER BY weight DESC
LIMIT {$limit}
QUERY;
        $manager = $this->getModelsManager();
        $query = $manager->createQuery($phql);
        $results = $query->execute();
        $posts = null;
        $idArray = array();
        if ($results->count() > 0) {
            foreach ($results as $result) {
                $idArray[] = $result->postId;
            }
            $postModel = new Post();
            $postsQueryBuilder = $postModel->findPosts(array('id' => implode(',', $idArray)));
            $posts = $postsQueryBuilder->getQuery()->execute();
        }
        return $posts;
    }
예제 #2
0
 public function indexAction()
 {
     $limit = $this->request->getQuery('limit', 'int', 25);
     $limit = $limit > 100 ?: $limit;
     $limit = $limit < 10 ?: $limit;
     $order = $this->request->getQuery('order', 'string', '-created_at');
     $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => 'published', 'tid' => $this->request->getQuery('tid', 'int'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1));
     if ($query['cid']) {
         $this->view->setVar('category', Category::findFirst($query['cid']));
     }
     if ($query['uid']) {
         $this->view->setVar('author', UserManager::findFirst($query['uid']));
     }
     if ($query['tid']) {
         $this->view->setVar('tag', Tag::findFirst($query['tid']));
     }
     $post = new Post();
     $posts = $post->findPosts($query);
     $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page']));
     $paginator->setQuery($query);
     $pager = $paginator->getPaginate();
     $this->view->setVar('pager', $pager);
     $this->view->setVar('query', $query);
     $tag = new Tag();
     $tags = $tag->getPopularTags(6);
     $this->view->setVar('tags', $tags);
 }
예제 #3
0
 public function listAction()
 {
     $limit = $this->dispatcher->getParam('limit');
     $limit = $limit ? $limit : 25;
     /** @noinspection PhpDuplicateArrayKeysInspection */
     $query = array('q' => $this->dispatcher->getParam('q'), 'status' => $this->dispatcher->getParam('status'), 'uid' => $this->dispatcher->getParam('uid'), 'cid' => $this->dispatcher->getParam('cid'), 'tid' => $this->dispatcher->getParam('tid'), 'has_image' => $this->dispatcher->getParam('has_image', 'int'), 'min_created_at' => $this->dispatcher->getParam('min_created_at', 'int'), 'username' => $this->dispatcher->getParam('username'), 'order' => $this->dispatcher->getParam('order'), 'limit' => $limit, 'page' => $this->dispatcher->getParam('page'));
     $post = new Models\Post();
     $posts = $post->findPosts($query);
     $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $query['limit'], "page" => $query['page']));
     $paginator->setQuery($query);
     $pager = $paginator->getPaginate();
     return $pager;
 }
예제 #4
0
 /**
  * @operationName("Post List")
  * @operationDescription("Post List")
  */
 public function indexAction()
 {
     $limit = $this->request->getQuery('per_page', 'int', 25);
     $limit = $limit > 100 ? 100 : $limit;
     $limit = $limit < 10 ? 10 : $limit;
     $order = $this->request->getQuery('order', 'string', '-created_at');
     $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'tid' => $this->request->getQuery('tid', 'int'), 'tag' => $this->request->getQuery('tag', 'string'), 'username' => $this->request->getQuery('username', 'string'), 'sourceName' => $this->request->getQuery('source_name', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1));
     $form = new Forms\FilterForm();
     $form->setValues($this->request->getQuery());
     $this->view->setVar('form', $form);
     $post = new Models\Post();
     $posts = $post->findPosts($query);
     $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page']));
     $paginator->setQuery($query);
     $pager = $paginator->getPaginate();
     $this->view->setVar('pager', $pager);
 }
예제 #5
0
 public function listAction()
 {
     $limit = $this->request->getQuery('limit', 'int', 25);
     $limit = $limit > 100 ? 100 : $limit;
     $limit = $limit < 10 ? 10 : $limit;
     $order = $this->request->getQuery('order', 'string', '-created_at');
     $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string', 'published'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1));
     if ($query['cid']) {
         $this->view->setVar('category', Category::findFirst($query['cid']));
     }
     $post = new Post();
     $posts = $post->findPosts($query);
     $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page']));
     $paginator->setQuery($query);
     $pager = $paginator->getPaginate();
     $this->view->setVar('pager', $pager);
     return $paginator;
 }
예제 #6
0
 /**
  *
  * @SWG\Api(
  *   path="/admin/posts",
  *   description="Posts manage API",
  *   produces="['application/json']",
  *   @SWG\Operations(
  *     @SWG\Operation(
  *       method="GET",
  *       summary="Get post list",
  *       notes="Returns post list",
  *       @SWG\Parameters(
  *         @SWG\Parameter(
  *           name="q",
  *           description="Keyword",
  *           paramType="query",
  *           required=false,
  *           type="string"
  *         ),
  *         @SWG\Parameter(
  *           name="status",
  *           description="Status, allow value : pending | published | deleted | draft",
  *           paramType="query",
  *           required=false,
  *           type="string"
  *         ),
  *         @SWG\Parameter(
  *           name="uid",
  *           description="User ID",
  *           paramType="query",
  *           required=false,
  *           type="integer"
  *         ),
  *         @SWG\Parameter(
  *           name="cid",
  *           description="Category ID",
  *           paramType="query",
  *           required=false,
  *           type="integer"
  *         ),
  *         @SWG\Parameter(
  *           name="tid",
  *           description="Tag ID",
  *           paramType="query",
  *           required=false,
  *           type="integer"
  *         ),
  *         @SWG\Parameter(
  *           name="order",
  *           description="Order, allow value : +-id, +-created_at, +-sortOrder default is -created_at",
  *           paramType="query",
  *           required=false,
  *           type="string"
  *         ),
  *         @SWG\Parameter(
  *           name="limit",
  *           description="Limit max:100 | min:3; default is 25",
  *           paramType="query",
  *           required=false,
  *           type="integer"
  *         )
  *       )
  *     )
  *   )
  * )
  * @operationName("文章列表")
  * @operationDescription("文章列表")
  */
 public function indexAction()
 {
     $limit = $this->request->getQuery('limit', 'int', 25);
     $limit = $limit > 100 ? 100 : $limit;
     $limit = $limit < 3 ? 3 : $limit;
     $order = $this->request->getQuery('order', 'string', '-created_at');
     $query = array('q' => $this->request->getQuery('q', 'string'), 'status' => $this->request->getQuery('status', 'string'), 'uid' => $this->request->getQuery('uid', 'int'), 'cid' => $this->request->getQuery('cid', 'int'), 'tid' => $this->request->getQuery('tid', 'int'), 'username' => $this->request->getQuery('username', 'string'), 'order' => $order, 'limit' => $limit, 'page' => $this->request->getQuery('page', 'int', 1));
     $form = new Forms\FilterForm();
     $form->setValues($this->request->getQuery());
     $post = new Models\Post();
     $posts = $post->findPosts($query);
     $paginator = new \Eva\EvaEngine\Paginator(array("builder" => $posts, "limit" => $limit, "page" => $query['page']));
     $paginator->setQuery($query);
     $pager = $paginator->getPaginate();
     $postArray = array();
     if ($pager->items) {
         foreach ($pager->items as $key => $post) {
             $postArray[] = $post->dump(Models\Post::$simpleDump);
         }
     }
     $data = array('paginator' => $this->getApiPaginator($paginator), 'results' => $postArray);
     return $this->response->setJsonContent($data);
 }