Exemplo n.º 1
0
 /**
  * getLinkByPostId
  *
  * Return redirection link value
  *
  * @param  int    $postID Identification number of post
  * @return string         Redirection link
  */
 public static function getLinkByPostId($postID)
 {
     $conn = \DBI::getConnection('slave');
     // try get post data
     $postData = $conn->sendQuery('SELECT
                 fp.id post_id,
                 ft.id topic_id
             FROM forum_posts fp
             INNER JOIN forum_topics ft
                 ON ft.id = fp.topic_id
             WHERE fp.id = :post_id', array(':post_id' => $postID))->fetch(\PDO::FETCH_OBJ);
     if (!$postData) {
         throw new \SystemErrorException(array('title' => \View::$language->forum_to_post_error, 'description' => \View::$language->forum_to_post_post_not_found));
     }
     // try get post offset
     $postsOffset = $conn->sendQuery('SELECT
                 COUNT(1) cnt
             FROM forum_posts
             WHERE topic_id = :topic_id
                 AND id <= :post_id', array('topic_id' => $postData->topic_id, 'post_id' => $postData->post_id))->fetch(\PDO::FETCH_COLUMN);
     // calculate page number
     $pageNumber = $postsOffset / \App::getConfig('forum')->posts_per_page;
     // TODO posts per page from member custom settings
     $pageNumber = ceil($pageNumber);
     // build link
     $link = '/forum/topic?id=' . $postData->topic_id;
     if ($pageNumber > 1) {
         $link .= '&page=' . $pageNumber;
     }
     $link .= '#topic-post-' . $postData->post_id;
     return $link;
 }
Exemplo n.º 2
0
    /**
     * getTopicById
     *
     * Will return topic data
     *
     * @param  int      $topicID Identification number of topic
     * @return StdClass          Topic data
     */
    public static function getTopicById($topicID)
    {
        return \DBI::getConnection('slave')->sendQuery('SELECT

                    ft.id,
                    ft.is_closed,
                    ft.subforum_id,
                    ft.title       topic_title,
                    ft.description topic_description,

                    fts.posts_count,
                    fts.views_count,

                    sf.title subforum_title,
                    sf.forum_id,

                    ff.title forum_title

                FROM forum_topics ft
                INNER JOIN forum_topics_stat fts
                    ON fts.topic_id = ft.id
                INNER JOIN forum_subforums sf
                    ON sf.id = ft.subforum_id
                INNER JOIN forum_forums ff
                    ON ff.id = sf.forum_id
                WHERE ft.id = :topic_id
            ', array(':topic_id' => $topicID))->fetch(\PDO::FETCH_OBJ);
    }
Exemplo n.º 3
0
 /**
  * getSubForums
  *
  * Will return array of subforums
  *
  * @param  int   $forumID Identification number of forum
  * @return array          Subforums data
  */
 public static function getSubForums($forumID = null)
 {
     $params = array();
     $filter = '';
     if ($forumID) {
         $params[':forum_id'] = $forumID;
         $filter = 'WHERE sf.forum_id = :forum_id';
     }
     return \DBI::getConnection('slave')->sendQuery("SELECT\n\n                    sf.id,\n                    sf.forum_id,\n                    sf.title,\n                    sf.description,\n\n                    sfs.topics_count,\n                    (sfs.posts_count - sfs.topics_count) posts_count,\n\n                    fp.id            last_post_id,\n                    fp.last_modified last_post_modified,\n\n                    ft.title         last_topic_title,\n\n                    a.id    last_post_author_id,\n                    a.login last_post_author_login\n\n                FROM forum_subforums sf\n                INNER JOIN forum_subforums_stat sfs\n                    ON sfs.subforum_id = sf.id\n                INNER JOIN forum_forums ff\n                    ON ff.id = sf.forum_id\n                LEFT JOIN forum_posts fp\n                    ON fp.id = sfs.last_post_id\n                LEFT JOIN forum_topics ft\n                    ON ft.id = fp.topic_id\n                LEFT JOIN members a\n                    ON a.id = fp.authored_by\n                {$filter}\n                ORDER BY ff.sort ASC, sf.sort ASC\n            ", $params)->fetchAll(\PDO::FETCH_OBJ);
 }
Exemplo n.º 4
0
 /**
  * getPostsByTopicId
  *
  * Will return array of posts by identification number of topic
  *
  * @param  int   $topicID Identification number of topic
  * @param  int   $offset  Offset number of first post
  * @param  int   $limit   Number of posts per page
  * @return array          Posts data
  */
 public static function getPostsByTopicId($topicID, $offset, $limit)
 {
     $topicPosts = \DBI::getConnection('slave')->sendQuery("SELECT\n\n                    fp.id,\n                    fp.topic_start,\n                    fp.edited_by,\n                    fp.moderated_by,\n                    fp.creation_date,\n                    fp.last_modified,\n                    IF(fp.creation_date = fp.last_modified, 0, 1) is_modified,\n                    fp.post_html,\n\n                    fm.posts_count author_posts_count,\n\n                    a.id     author_id,\n                    a.login  author_login,\n                    a.avatar author_avatar,\n                    ag.name  author_group_name\n\n                FROM forum_posts fp\n                INNER JOIN forum_members fm\n                    ON fm.author_id = fp.authored_by\n                LEFT JOIN members a\n                    ON a.id = fm.author_id\n                LEFT JOIN groups ag\n                    ON ag.id = a.group_id\n                WHERE fp.topic_id = :topic_id\n                ORDER BY fp.topic_start DESC, fp.creation_date ASC\n                LIMIT {$offset}, {$limit}\n            ", array(':topic_id' => $topicID))->fetchAll(\PDO::FETCH_OBJ);
     $hCnf = \App::getConfig('hosts');
     $mCnf = \App::getConfig('member-defaults');
     foreach ($topicPosts as $item) {
         if (!$item->author_avatar) {
             $item->author_avatar = '//' . $hCnf->st . $mCnf->avatar;
         }
     }
     return $topicPosts;
 }
Exemplo n.º 5
0
    /**
     * getSubForumById
     *
     * Will return subforum data
     *
     * @param  int   $subForumID Identification number of subforum
     * @return array             Subforum data
     */
    public static function getSubForumById($subForumID)
    {
        return \DBI::getConnection('slave')->sendQuery('SELECT

                    sf.id,
                    sf.forum_id,
                    sf.title,
                    sf.description,

                    fss.topics_count,

                    ff.title forum_title

                FROM forum_subforums sf
                INNER JOIN forum_subforums_stat fss
                    ON fss.subforum_id = sf.id
                INNER JOIN forum_forums ff
                    ON ff.id = sf.forum_id
                WHERE sf.id = :subforum_id', array(':subforum_id' => $subForumID))->fetch(\PDO::FETCH_OBJ);
    }
Exemplo n.º 6
0
 /**
  * trySignIn
  *
  * Try sign in process
  *
  * @param  StdClass $signInData Member sign in data
  * @return null
  */
 public static function trySignIn(\StdClass $signInData)
 {
     \View::addLanguageItem('SignInHelper');
     $memberData = \DBI::getConnection('master')->sendQuery('SELECT cookie, password, status
             FROM members
             WHERE email = :email OR login = :login', array(':email' => $signInData->login, ':login' => $signInData->login))->fetch(\PDO::FETCH_OBJ);
     // member data not found
     if (!$memberData) {
         throw new \MemberErrorException(array('title' => \View::$language->sign_in_helper_error, 'description' => \View::$language->sign_in_helper_login_or_password_invalid));
     }
     // compare password
     $hasSamePassword = \common\CryptHelper::verifyHash($signInData->password, $memberData->password);
     if (!$hasSamePassword) {
         throw new \MemberErrorException(array('title' => \View::$language->sign_in_helper_error, 'description' => \View::$language->sign_in_helper_login_or_password_invalid));
     }
     // sign in success
     $cnf = \App::getConfig('main')->system;
     $exp = time() + $cnf->cookie_expires_time;
     setcookie($cnf->cookie_name, $memberData->cookie, $exp, '/');
     throw new \MemberSuccessException(array('title' => \View::$language->sign_in_helper_success, 'description' => \View::$language->sign_in_helper_success_description, 'redirection' => '/'));
 }
Exemplo n.º 7
0
 /**
  * getTree
  *
  * Will return forums tree data
  *
  * @param  int   $forumID Identification number of forum
  * @return array          Forums tree data
  */
 public static function getTree($forumID = null)
 {
     $params = array();
     $filter = '';
     if ($forumID) {
         $params[':forum_id'] = $forumID;
         $filter = 'WHERE ff.id = :forum_id';
     }
     // get forums
     $forums = \DBI::getConnection('slave')->sendQuery("SELECT\n                    ff.id,\n                    ff.title,\n                    ff.description,\n                    (NULL) subforums\n                FROM forum_forums ff\n                INNER JOIN forum_forums_stat ffs\n                    ON ffs.forum_id = ff.id\n                        AND ffs.subforums_count > 0\n                {$filter}\n                ORDER BY ff.sort ASC", $params)->fetchAll(\PDO::FETCH_OBJ);
     // get subforums
     if ($forums) {
         $subForums = SubForumsHelper::getSubForums($forumID);
         foreach ($forums as $forum) {
             $forum->subforums = array();
             foreach ($subForums as $subForum) {
                 if ($subForum->forum_id == $forum->id) {
                     $forum->subforums[] = $subForum;
                 }
             }
         }
     }
     return $forums;
 }
Exemplo n.º 8
0
 /**
  * getTopics
  *
  * Will return topics data
  *
  * @param  int      $subForumID Identification number of subforum
  * @param  int      $offset     Offset number of first topic
  * @param  int      $limit      Number of topics per page
  * @return array                Topics data
  */
 public static function getTopics($subForumID, $offset, $limit)
 {
     return \DBI::getConnection('slave')->sendQuery("SELECT\n\n                    ft.id,\n                    ft.creation_date,\n                    ft.last_modified,\n                    ft.is_locked,\n                    ft.is_important,\n                    ft.is_closed,\n                    ft.title,\n                    ft.description,\n\n                    IF(fts.posts_count > 1, fts.posts_count - 1, 0) posts_count,\n                    fts.views_count,\n                    fts.last_post_id,\n\n                    fp.last_modified last_post_modified\n,\n                    ta.id    author_id,\n                    ta.login author_login,\n\n                    pa.id    last_post_author_id,\n                    pa.login last_post_author_login\n\n                FROM forum_topics ft\n                INNER JOIN forum_topics_stat fts\n                    ON fts.topic_id = ft.id\n                LEFT JOIN forum_posts fp\n                    ON fp.id = fts.last_post_id\n                LEFT JOIN members ta\n                    ON ta.id = ft.authored_by\n                LEFT JOIN members pa\n                    ON pa.id = fp.authored_by\n                WHERE ft.subforum_id = :subforum_id\n                ORDER BY ft.is_locked DESC, ft.creation_date DESC\n                LIMIT {$offset}, {$limit}\n            ", array(':subforum_id' => $subForumID))->fetchAll(\PDO::FETCH_OBJ);
 }
Exemplo n.º 9
0
 /**
  * createUser
  *
  * Create a new user
  *
  * @param  StdClass $userData User data
  * @return int                User identification number
  */
 public function createUser(\StdClass $userData)
 {
     $conn = \DBI::getConnection('master');
     $conn->sendQuery("INSERT INTO members (\n                    group_id,\n                    cookie,\n                    email,\n                    login,\n                    password,\n                    time_zone,\n                    creation_date,\n                    last_ip,\n                    last_visit,\n                    status,\n                    activation_hash,\n                    avatar\n                ) VALUES (\n                    :group_id,\n                    '',\n                    :email,\n                    :login,\n                    :password,\n                    :time_zone,\n                    NOW(),\n                    '',\n                    NOW(),\n                    :status,\n                    :activation_hash,\n                    :avatar\n                )", array(':group_id' => $userData->group_id, ':email' => $userData->email, ':login' => $userData->login, ':password' => $userData->password, ':time_zone' => $userData->time_zone, ':status' => $userData->status, ':activation_hash' => $userData->activation_hash, ':avatar' => $userData->avatar));
     return $conn->lastInsertId();
 }
Exemplo n.º 10
0
 /**
  * close
  *
  * Close storage resource.
  * Nothing here, compatible only
  *
  * @return bool Status
  */
 public function close()
 {
     DBI::getConnection('master')->commit();
     return true;
 }
Exemplo n.º 11
0
 /**
  * getAllTopicsCount
  *
  * Will return number of all available topics
  *
  * @return int Number of all available topics
  */
 public static function getAllTopicsCount()
 {
     return (int) \DBI::getConnection('slave')->sendQuery('SELECT SUM(topics_count) cnt FROM forum_subforums_stat')->fetch(\PDO::FETCH_COLUMN);
 }
Exemplo n.º 12
0
 /**
  * _initPermissions
  *
  * Set member role permissions with group_id
  *
  * @return null
  */
 private static function _initPermissions()
 {
     $conn = DBI::getConnection('slave');
     $permissions = $conn->sendQuery('SELECT
                 p.name
             FROM groups_permissions gp
             INNER JOIN permissions p
                 ON p.id = gp.permission_id
             WHERE gp.group_id = :group_id', array(':group_id' => self::$_profile->group_id))->fetch(PDO::FETCH_OBJ);
     if ($permissions) {
         self::$_permissions = $permissions;
     }
 }