public function detailAction($user) { if (!($user = Users::findFirstByUsername($user))) { $this->flashSession->error(t('The User dosen\'t exits')); return $this->indexRedirect(); } $tab = $this->request->getQuery('tab'); $page = isset($_GET['page']) ? (int) $_GET['page'] : $this->numberPage; $perPage = isset($_GET['perPage']) ? (int) $_GET['perPage'] : $this->perPage; $where = ''; if ($tab == "answers") { $join = ['type' => 'join', 'model' => 'PostsReply', 'on' => 'r.postsId = p.id', 'alias' => 'r']; list($itemBuilder, $totalBuilder) = ModelBase::prepareQueriesPosts($join, $where, $this->perPage); $itemBuilder->groupBy(array('p.id')); } else { list($itemBuilder, $totalBuilder) = ModelBase::prepareQueriesPosts('', $where, $this->perPage); } $params = []; switch ($tab) { case 'questions': $this->tag->setTitle('Questions'); $questionConditions = 'p.type = "questions"'; $itemBuilder->where($questionConditions); break; case 'answers': $this->tag->setTitle('My Answers'); $answersConditions = 'r.usersId = ?0'; $itemBuilder->where($answersConditions); //$totalBuilder->where($answersConditions); break; default: $this->tag->setTitle('All Questions'); break; } $conditions = 'p.deleted = 0 and p.usersId = ?0'; if ($tab == 'answers') { $conditions = 'p.deleted = 0'; } $itemBuilder->andWhere($conditions); $totalBuilder->andWhere($conditions); $params = array($user->getId()); //get all reply $parametersNumberReply = ['group' => 'postsId', 'usersId = ?0', 'bind' => [$user->getId()]]; $paramQuestions = ['usersId = ?0 and type = "questions" and deleted = 0', 'bind' => [$user->getId()]]; $totalPosts = $totalBuilder->getQuery()->setUniqueRow(true)->execute($params); $totalPages = ceil($totalPosts->count / $perPage); $offset = ($page - 1) * $perPage + 1; if ($page > 1) { $itemBuilder->offset($offset); } $this->view->setVars(['user' => $user, 'posts' => $itemBuilder->getQuery()->execute($params), 'totalQuestions' => Posts::count($paramQuestions), 'totalReply' => PostsReply::find($parametersNumberReply)->count(), 'tab' => $tab, 'totalPages' => $totalPages, 'currentPage' => $page]); }
/** * Retrieve a list of Posts for a specific tags id. * * @param int $id The Tags ID * @param string $slugTags * * @return array list of posts */ public function postByTagAction($id, $slugName) { $join = ['type' => 'join', 'model' => 'PostsTags', 'on' => 'pt.postsId = p.id', 'alias' => 'pt']; /**@Todo later for security*/ $where = 'p.deleted = 0 AND pt.tagsId = ' . $id; list($itemBuilder, $totalBuilder) = ModelBase::prepareQueriesPosts($join, $where, $this->perPage); //$itemBuilder->andWhere($conditions); $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; $totalPosts = $totalBuilder->getQuery()->setUniqueRow(true)->execute(); $totalPages = ceil($totalPosts->count / $this->perPage); $offset = ($page - 1) * $this->perPage + 1; if ($page > 1) { $itemBuilder->offset((int) $offset); } //@todo refacttor $this->view->setVars(['tab' => 'tags', 'type' => Posts::POST_ALL, 'posts' => $itemBuilder->getQuery()->execute(), 'totalPages' => $totalPages, 'currentPage' => $page, 'slugName' => $slugName, 'tags' => Tags::find()]); $this->tag->setTitle(t('These posts fillter by tags')); return $this->view->pick('post'); }
/** * @return Notificationsbounces */ public static function findFirst($parameters = array()) { return parent::findFirst($parameters); }
/** * Default it will get all posts * */ public function indexAction() { /* @var \Phalcon\Mvc\Model\Query\BuilderInterface $itemBuilder */ /* @var \Phalcon\Mvc\Model\Query\BuilderInterface $totalBuilder */ $tab = $this->request->getQuery('tab'); $page = isset($_GET['page']) ? (int) $_GET['page'] : $this->numberPage; $perPage = isset($_GET['perPage']) ? (int) $_GET['perPage'] : $this->perPage; if ($tab == "answers") { $join = ['type' => 'join', 'model' => 'Phanbook\\Models\\PostsReply', 'on' => 'r.postsId = p.id', 'alias' => 'r']; list($itemBuilder, $totalBuilder) = ModelBase::prepareQueriesPosts($join, false, $perPage); $itemBuilder->groupBy(array('p.id')); } else { list($itemBuilder, $totalBuilder) = ModelBase::prepareQueriesPosts('', false, $perPage); } $userId = $this->auth->getAuth(); /* * Create the conditions according to the parameter order */ $params = null; switch ($tab) { case 'hot': $this->tag->setTitle('Hot Questions'); $itemBuilder->orderBy('p.modifiedAt DESC'); break; case 'unanswered': $this->tag->setTitle('Unanswered Questions'); $unansweredConditions = 'p.numberReply = 0 AND p.acceptedAnswer <> "Y"'; $itemBuilder->where($unansweredConditions); $totalBuilder->where($unansweredConditions); break; case 'week': $this->tag->setTitle('Hot Questions This Week'); $lastWeek = new \DateTime(); $lastWeek->modify('-1 week'); $params = array($lastWeek->getTimestamp()); $weekConditions = 'p.createdAt >= ?0'; $itemBuilder->where($weekConditions); $totalBuilder->where($weekConditions); break; case 'month': $this->tag->setTitle('Hot Questions This Month'); $lastMonths = new \DateTime(); $lastMonths->modify('-6 month'); $params = array($lastMonths->getTimestamp()); $monthConditions = 'p.createdAt >= ?0'; $itemBuilder->where($monthConditions); $totalBuilder->where($monthConditions); break; case 'questions': $this->tag->setTitle('Questions'); $questionConditions = 'p.type = "questions"'; $itemBuilder->where($questionConditions); $totalBuilder->where($questionConditions); break; case 'blog': $this->tag->setTitle('Blogs'); $blogConditions = 'p.type = "blog"'; $itemBuilder->where($blogConditions); $totalBuilder->where($blogConditions); break; case 'hackernews': $this->tag->setTitle('Hacker News'); $tipConditions = 'p.type = "hackernews"'; $itemBuilder->where($tipConditions); $totalBuilder->where($tipConditions); break; default: $this->tag->setTitle($this->config->application->tagline); } $type = Posts::POST_PAGE; $conditions = "p.deleted = 0 AND p.type != '{$type}'"; $itemBuilder->andWhere($conditions); $totalBuilder->andWhere($conditions); //order like tabs sort if (!$tab) { $tab = 'hot'; } $totalPosts = $totalBuilder->getQuery()->setUniqueRow(true)->execute($params); $totalPages = ceil($totalPosts->count / $perPage); $offset = ($page - 1) * $perPage + 1; if ($page > 1) { $itemBuilder->offset($offset); } $this->view->setVars(['tab' => $tab, 'type' => Posts::POST_ALL, 'posts' => $itemBuilder->getQuery()->execute($params), 'totalPages' => $totalPages, 'currentPage' => $page, 'tags' => Tags::find()]); return $this->view->pick('post'); }
public function initialize() { parent::initialize(); $this->hasMany('id', __NAMESPACE__ . '\\UsersBadges', 'usersId', ['alias' => 'badges', 'reusable' => true]); $this->hasMany('id', __NAMESPACE__ . '\\Posts', 'usersId', ['alias' => 'posts', 'reusable' => true]); $this->hasMany('id', __NAMESPACE__ . '\\PostsReply', 'usersId', ['alias' => 'replies', 'reusable' => true]); $this->hasMany('id', __NAMESPACE__ . '\\Vote', 'usersId', ['alias' => 'vote', 'reusable' => true]); }
/** * Create a paginator default use adapter PaginatorQueryBuilder, * show 30 rows by page starting from $page * * @return array the conatainer object... */ public function paginator($query, $adapter = null) { $page = isset($_GET['page']) ? (int) $_GET['page'] : $this->numberPage; $perPage = isset($_GET['perPage']) ? (int) $_GET['perPage'] : $this->perPage; $builder = ModelBase::modelQuery($query); if (is_null($adapter)) { $paginator = new PaginatorQueryBuilder(['builder' => $builder, 'limit' => $perPage, 'page' => $page]); } else { $paginator = new PaginatorNativeArray(['data' => $builder->getQuery()->execute()->toArray(), 'limit' => $perPage, 'page' => $page]); } return $paginator; }
/** * Allows to query the first record that match the specified conditions * * @param mixed $parameters * @return Usersbadges */ public static function findFirst($parameters = null) { return parent::findFirst($parameters); }
/** * This method aids in setting up the model with a custom behavior i.e. a different table. * Is only called once during the request. */ public function initialize() { parent::initialize(); $this->useDynamicUpdate(true); $this->belongsTo('id', __NAMESPACE__ . '\\PostsHistory', 'postsId', ['alias' => 'postHistory']); $this->belongsTo('usersId', __NAMESPACE__ . '\\Users', 'id', ['alias' => 'user', 'reusable' => true]); $this->hasMany('id', __NAMESPACE__ . '\\Comment', 'objectId', ['alias' => 'comment']); $this->hasMany('id', __NAMESPACE__ . '\\PostsViews', 'postsId', ['alias' => 'postview']); $this->hasMany('id', __NAMESPACE__ . '\\PostsReply', 'postsId', ['alias' => 'replies']); $this->hasMany('id', __NAMESPACE__ . '\\PostsSubscribers', 'postsId', ['alias' => 'postSubscriber']); $this->hasManyToMany('id', __NAMESPACE__ . '\\PostsTags', 'postsId', 'tagsId', __NAMESPACE__ . '\\Tags', 'id', ['alias' => 'tag']); //SoftDelete api Phalcon $this->addBehavior(new SoftDelete(array('field' => 'deleted', 'value' => time()))); }
/** * Overwrite messages */ public function getMessages() { $messages = array(); foreach (parent::getMessages() as $message) { switch ($message->getType()) { case 'InvalidCreateAttempt': $messages[] = 'The email already exists'; break; case 'InvalidUpdateAttempt': $messages[] = 'The email already exists'; break; case 'PresenceOf': $messages[] = 'The field ' . $message->getField() . ' is mandatory'; break; case 'Unique': $messages[] = 'The email already exists'; break; case 'Email': $messages[] = 'The email must have a valid e-mail format'; } } return $messages; }
/** * Audits an UPDATE operation * * @param \Phalcon\Mvc\ModelInterface $model * @return boolean */ public function auditAfterUpdate(ModelInterface $model) { $changedFields = $model->getChangedFields(); if (count($changedFields) == 0) { return null; } //Create a new audit $audit = $this->createAudit('U', $model); if (is_object($audit)) { //Date the model had before modifications $originalData = $model->getSnapshotData(); $details = []; $random = new Random(); foreach ($changedFields as $field) { $auditDetail = new AuditDetail(); $auditDetail->setId($random->uuid()); $auditDetail->setFieldName($field); $auditDetail->setOldValue($originalData[$field]); $newValue = $model->readAttribute($field) ?: 'empty'; $auditDetail->setNewValue($newValue); $details[] = $auditDetail; } $audit->details = $details; if (!$audit->save()) { ModelBase::saveLoger($audit->getMessages()); } } }
public function delete($data = null, $whiteList = null) { if (!$this->manageFile(true)) { return false; } return parent::delete($data, $whiteList); }