objAuth = new AuthController(); $this->objUser = new UserController(); $this->objPermission = new PermissionController(); } public function getCategories() { // /api/rpc/board/category/getcategories return DB::table('for_category') ->select('*') ->orderBy('order', 'asc') ->get(); } public function getCategory($id) { // /api/rpc/board/category/getcategory/id return DB::table('for_category') ->select('*') ->where('id', $id) ->get(); } public function getCategoryName($id) { // /api/rpc/board/category/getcategoryname/id return DB::table('for_category') ->select('title') ->where('id', $id) ->get(); } public function getForums($id) { // /api/rpc/board/forum/getforums/id $get = DB::table('for_forums') ->select('id', 'last_uid', 'cat_id', 'title', 'description', 'threads', 'posts', 'last_date') ->where('cat_id', $id) ->orderBy('order', 'asc') ->get(); $res = array(); $key = 0; setlocale(LC_ALL, 'ja_JP.utf8'); foreach ($get as $i) { array_push($res, [ 'key' => $key, 'id' => $i->id, 'last_uid' => $i->last_uid, 'cat_id' => $i->cat_id, 'title' => $i->title, 'description' => $i->description, 'threads' => $i->threads, 'posts' => $i->posts, 'last_date' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', $i->last_date) ]); $key++; } return $res; } public function getForum($id) { // /api/rpc/board/forum/getforum/id return DB::table('for_forums') ->select('*') ->where('id', $id) ->orderBy('order', 'asc') ->get(); } public function addForum(Request $request) { // /api/rpc/board/forum/add $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_formod'] == 1) { $add = DB::table('for_forums') ->insertGetId([ 'last_uid' => 0, 'cat_id' => $request->cat_id, 'title' => $request->title, 'description' => $request->description, 'threads' => 0, 'posts' => 0, 'last_date' => 0, 'min_power' => 0, 'permission' => 0, 'readonly' => $request->ro, 'post_count_freeze' => $request->pcf, 'order' => $request->order, 'parent' => 0 ]); return $add; } else { return 'Permission denied.'; } } } public function editForum(Request $request) { // /api/rpc/board/forum/edit $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_formod'] == 1) { return DB::table('for_forums') ->where('id', $request->id) ->update([ 'cat_id' => $request->cat_id, 'title' => $request->title, 'description' => $request->description, 'readonly' => $request->ro, 'post_count_freeze' => $request->pcf ]); } } } public function deleteForum(Request $request) { // /api/rpc/board/forum/delete $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_formod'] == 1) { return DB::table('for_forums')->where('id', $request->id)->delete(); } } } public function getForumIdFromTopic($id) { // /api/rpc/board/topic/getforumidfromtopic/id return DB::table('for_threads') ->select('for_id') ->where('id', $id) ->first()->for_id; } public function getTopicIdFromPost($id) { // /api/rpc/board/post/gettopicidfrompost/id return DB::table('for_posts') ->select('top_id') ->where('id', $id) ->first()->top_id; } public function getForumIdFromPost($id) { // /api/rpc/board/post/getforumidfrompost/id $top_id = $this->getTopicIdFromPost($id); return $this->getForumIdFromTopic($top_id); } public function getForumName($id) { // /api/rpc/board/forum/getforumname/id return DB::table('for_forums') ->select('cat_id', 'title') ->where('id', $id) ->orderBy('order', 'asc') ->get(); } public function getPostCountFreeze($id) { // /api/rpc/board/forum/getpostcountfreeze/id return DB::table('for_forums') ->select('post_count_freeze') ->where('id', $id) ->first()->post_count_freeze; } public function getReadOnly($id) { // /api/rpc/board/forum/getreadonly/id return DB::table('for_forums') ->select('readonly') ->where('id', $id) ->first()->readonly; } public function getForumsInCategory($cat_id) { // /api/rpc/board/forum/getforumsincategory/cat_id $get = DB::table('for_forums') ->select('id', 'last_uid', 'cat_id', 'title', 'description', 'threads', 'posts', 'last_date') ->where('cat_id', $cat_id) ->orderBy('order', 'asc') ->get(); $res = array(); $key = 0; setlocale(LC_ALL, 'ja_JP.utf8'); foreach ($get as $i) { array_push($res, [ 'key' => $key, 'id' => $i->id, 'last_uid' => $i->last_uid, 'cat_id' => $i->cat_id, 'title' => $i->title, 'description' => $i->description, 'threads' => $i->threads, 'posts' => $i->posts, 'last_date' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', $i->last_date) ]); $key++; } return $res; } public function getTopics($for, $from, $to) { // /api/rpc/board/topic/gettopics/for/from/to return DB::table('for_threads') ->select('*') ->where('for_id', $for) ->offset($from) ->limit($to) ->orderBy('last_date', 'desc') ->get(); } public function getTopicsUnpinned($for, $from, $to) { // /api/rpc/board/topic/gettopicsunpinned/for/from/to return DB::table('for_threads') ->select('*') ->where('for_id', $for) ->where('sticky', 0) ->offset($from) ->limit($to) ->orderBy('last_date', 'desc') ->get(); } public function getTopicsPinned($for, $from, $to) { // /api/rpc/board/topic/gettopicspinned/for/from/to return DB::table('for_threads') ->select('*') ->where('for_id', $for) ->where('sticky', 1) ->orderBy('last_date', 'desc') ->get(); } public function getTopicsUser($user, $from, $to) { // /api/rpc/board/topic/gettopicsuser/user/from/to return DB::table('for_threads') ->select('*') ->where('started_by', $user) ->orderBy('last_date', 'desc') ->get(); } public function getTopicStart($top_id) { // /api/rpc/board/post/gettopicstart/top_id $uid = DB::table('for_posts') ->where('top_id', $top_id) ->orderBy('post_date', 'asc') ->value('user_id'); $pdt = DB::table('for_posts') ->where('top_id', $top_id) ->orderBy('post_date', 'asc') ->value('post_date'); return array( 'uid' => $uid, 'date' => $pdt ); } public function getLastPost($top_id) { // /api/rpc/board/post/getlastpost/top_id $uid = DB::table('for_posts') ->where('top_id', $top_id) ->orderBy('post_date', 'desc') ->value('user_id'); $pdt = DB::table('for_posts') ->where('top_id', $top_id) ->orderBy('post_date', 'desc') ->value('post_date'); return array( 'uid' => $uid, 'date' => $pdt ); } public function getFirstAndLastPosts($top_id) { // /api/rpc/board/post/getfirstandlastposts/top_id $first = $this->getTopicStart($top_id); $last = $this->getLastPost($top_id); return array( 'first' => $first, 'last' => $last ); } public function countUnpinnedTopicsInForum($for_id) { // /api/rpc/board/topic/countunpinnedtopicsinforum/for_id return DB::table('for_threads') ->where('for_id', $for_id) ->where('sticky', 0) ->count(); } public function getTopic($id, $from, $to) { // /api/rpc/board/topic/gettopic/id/from/to return DB::table('for_threads') ->select('*') ->where('id', $id) ->offset($from) ->limit($to) ->orderBy('last_date', 'desc') ->get(); } public function getTopicLock($id) { // /api/rpc/board/topic/gettopiclock/id return DB::table('for_threads') ->select('lock') ->where('id', $id) ->get(); } public function getTopicPin($id) { // /api/rpc/board/topic/gettopicpin/id return DB::table('for_threads') ->select('sticky') ->where('id', $id) ->get(); } public function getTopicName($id) { // /api/rpc/board/topic/gettopicname/id return DB::table('for_threads') ->select('for_id', 'title') ->where('id', $id) ->get(); } public function getPostsInTopic($top_id, $from, $to) { // /api/rpc/board/post/getpostsintopic/top_id/from/to return DB::table('for_posts') ->select('*') ->where('top_id', $top_id) ->offset($from) ->limit($to) ->orderBy('post_date', 'asc') ->get(); } public function countPostsInTopic($top_id) { // /api/rpc/board/post/countpostsintopic/top_id return DB::table('for_posts') ->where('top_id', $top_id) ->count(); } public function getPost($id) { // /api/rpc/board/post/getpost/id return DB::table('for_posts') ->select('*') ->where('id', $id) ->get(); } public function getCurrentPostCount($user_id) { // /api/rpc/board/post/getcurrentpostcount/user_id return DB::table('for_posts')->where('user_id', $user_id)->max('postcount'); } public function getNextPostCount($user_id) { // /api/rpc/board/post/getnextpostcount/user_id $get = DB::table('for_posts')->where('user_id', $user_id)->max('postcount'); $get++; return $get; } public function getPostsofUser($user_id, $from, $to, Request $request) { $getting = array( 'for_posts.id', 'top_id', 'for_posts.user_id', 'post_date', 'message', 'delete', 'lastedit', 'ipaddress', 'delreason', 'nolayout', 'postcount', 'username', 'perm_id', 'total_posts', 'header', 'footer', 'member_title', 'gender', 'avatar', 'name_style', 'display_name', 'country' ); // $valid = $this->objAuth->getPermissions($request->username, $request->password); return DB::table('for_posts') ->join('users', 'for_posts.user_id', '=', 'users.id') ->join('usr_details', 'usr_details.user_id', '=', 'for_posts.user_id') ->join('usr_profile', 'usr_profile.user_id', '=', 'for_posts.user_id') ->join('usr_perm_id', 'usr_perm_id.user_id', '=', 'for_posts.user_id') ->where('users.id', $user_id) ->offset($from) ->limit($to) ->orderBy('for_posts.post_date', 'asc') ->get($getting); } public function getUserPosts($top_id, $from, $to, Request $request) { // /api/rpc/board/post/getuserposts/top/from/to $getting = array( 'for_posts.id', 'top_id', 'for_posts.user_id', 'post_date', 'message', 'delete', 'lastedit', 'ipaddress', 'delreason', 'nolayout', 'postcount', 'username', 'perm_id', 'total_posts', 'header', 'footer', 'member_title', 'gender', 'avatar', 'name_style', 'display_name', 'country' ); $valid = $this->objAuth->getPermissions($request->username, $request->password); return DB::table('for_posts') ->join('users', 'for_posts.user_id', '=', 'users.id') ->join('usr_details', 'usr_details.user_id', '=', 'for_posts.user_id') ->join('usr_profile', 'usr_profile.user_id', '=', 'for_posts.user_id') ->join('usr_perm_id', 'usr_perm_id.user_id', '=', 'for_posts.user_id') ->where('for_posts.top_id', $top_id) ->offset($from) ->limit($to) ->orderBy('for_posts.post_date', 'asc') ->get($getting); } public function getUserPost($id, Request $request) { // /api/rpc/board/post/getuserpost/id $getting = array( 'for_posts.id', 'top_id', 'for_posts.user_id', 'post_date', 'message', 'delete', 'lastedit', 'ipaddress', 'delreason', 'nolayout', 'postcount', 'username', 'perm_id', 'total_posts', 'header', 'footer', 'member_title', 'gender', 'avatar', 'name_style', 'display_name', 'country' ); $valid = $this->objAuth->getPermissions($request->username, $request->password); return DB::table('for_posts') ->join('users', 'for_posts.user_id', '=', 'users.id') ->join('usr_details', 'usr_details.user_id', '=', 'for_posts.user_id') ->join('usr_profile', 'usr_profile.user_id', '=', 'for_posts.user_id') ->join('usr_perm_id', 'usr_perm_id.user_id', '=', 'for_posts.user_id') ->where('for_posts.id', $id) ->orderBy('for_posts.post_date', 'asc') ->get($getting); } public function addTopic(Request $request) { // /api/rpc/board/topic/addtopic $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_post'] == 1) { $addTopic = DB::table('for_threads') ->insertGetId([ 'for_id' => $request->for_id, 'title' => $request->title, 'started_by' => $request->user_id, 'replies' => 0, 'views' => 0, 'last_date' => time(), 'last_uid' => $request->user_id, 'sticky' => 0, 'lock' => 0, 'poll' => 0, 'read' => '', 'lang_id' => 1 ]); DB::table('for_posts') ->insert([ 'top_id' => $addTopic, 'user_id' => $request->user_id, 'post_date' => time(), 'message' => $request->message, 'delete' => 0, 'lastedit' => 0, 'ipaddress' => $request->ipaddress, 'delreason' => '', 'nolayout' => $request->nolayout, 'postcount' => $request->postcount, // Deprecated: remove like and read stuff after full release! 'likes' => 0, 'likers' => '', 'read' => '' ]); return $addTopic; } else { return 'Permission denied.'; } } } public function addPost(Request $request) { // /api/rpc/board/post/addpost $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_post'] == 1) { $add = DB::table('for_posts') ->insert([ 'top_id' => $request->top_id, 'user_id' => $request->user_id, 'post_date' => $request->post_date, 'message' => $request->message, 'delete' => 0, 'lastedit' => 0, 'ipaddress' => $request->ipaddress, 'delreason' => '', 'nolayout' => $request->nolayout, 'postcount' => $request->postcount, // Deprecated: remove like and read stuff after full release! 'likes' => 0, 'likers' => '', 'read' => '' ]); return \Response::json($add); } else { return 'Permission denied.'; } } } public function editPost(Request $request) { // /api/rpc/board/post/editpost $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_editother'] == 1 || $valid['for_editown'] == 1) { // TODO: differenciate own from other. return DB::table('for_posts') ->where('id', $request->id) ->update([ 'lastedit' => $request->lastedit, 'message' => $request->message, 'nolayout' => $request->nolayout ]); } } } public function deletePost(Request $request) { // /api/rpc/board/post/deletepost $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_del'] == 1) { return DB::table('for_posts') ->where('id', $request->id) ->update([ 'delete' => 1, 'delreason' => $request->delreason ]); } } } public function lockTopic(Request $request) { // /api/rpc/board/topic/lock $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_locky'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'lock' => 1 ]); } } } public function unlockTopic(Request $request) { // /api/rpc/board/topic/unlock $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_locky'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'lock' => 0 ]); } } } public function moveTopic(Request $request) { // /api/rpc/board/topic/move /* $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_move'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'delete' => 0, 'delreason' => '' ]); } } */ } public function mergeTopic(Request $request) { // /api/rpc/board/topic/merge /* $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_mergepost'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'delete' => 0, 'delreason' => '' ]); } } */ } public function pinTopic(Request $request) { // /api/rpc/board/topic/pin $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_sticky'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'sticky' => 1 ]); } } } public function unpinTopic(Request $request) { // /api/rpc/board/topic/unpin $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_sticky'] == 1) { return DB::table('for_threads') ->where('id', $request->id) ->update([ 'sticky' => 0 ]); } } } public function undeletePost(Request $request) { // /api/rpc/board/post/undeletepost $check = $this->objAuth->checkLegit($request->username, $request->password); if ($check == 0) { return 'Err!'; } else { $valid = $this->objAuth->getPermissions($request->username, $request->password); if ($valid['for_del'] == 1) { return DB::table('for_posts') ->where('id', $request->id) ->update([ 'delete' => 0, 'delreason' => '' ]); } } } public function browseCategories(Request $request) { // /api/rpc/board/browse/browsecategories $cats = $this->getCategories()->toArray(); $cols = $this->objUser->getGroupColours()->toArray(); $res = array(); $resC = array(); foreach($cats as $c) { $cid = $c->id; $ctitle = $c->title; $fors = $this->getForumsInCategory($cid); $resF = array(); foreach($fors as $f) { if ($f['last_uid'] != 0) { $user = $this->objUser->getUser($f['last_uid'], $request)->toArray(); $showName = ""; $showCol = ""; if ($user[0]->display_name !== '') { $showName = $user[0]->display_name; } else { $showName = $user[0]->username; } if ($user[0]->name_style !== '') { $showCol = $user[0]->name_style; } else { foreach($cols as $cl) { if ($cl->id === $user[0]->perm_id) { if ($user[0]->gender === 1) $showCol = $cl->colour_m; else if ($user[0]->gender === 2) $showCol = $cl->colour_f; else $showCol = $cl->colour_u; } } } } else { $showName = ""; $showCol = ""; } // Compile. $resF[] = array( 'c_id' => $c->id, 'c_name' => $c->title, 'f_id' => $f['id'], 'u_name' => $showName, 'u_col' => $showCol, 'f_cat' => $f['cat_id'], 'f_last_uid' => $f['last_uid'], 'f_name' => $f['title'], 'f_desc' => $f['description'], 'f_topics' => $f['threads'], 'f_posts' => $f['posts'], 'f_last' => $f['last_date'] ); } $res[] = array( 'cats' => array( 'id' => $c->id, 'name' => $c->title ), 'fors' => $resF ); } return $res; } public function browseForums($id, $from, $to, Request $request) { // /api/rpc/board/browse/browseforums/id/from/to $fors = $this->getForums($id); $cols = $this->objUser->getGroupColours()->toArray(); $res = array(); foreach($fors as $f) { if ($f['last_uid'] != 0) { $user = $this->objUser->getUser($f['last_uid'], $request)->toArray(); $showName = ""; $showCol = ""; if ($user[0]->display_name !== '') { $showName = $user[0]->display_name; } else { $showName = $user[0]->username; } if ($user[0]->name_style !== '') { $showCol = $user[0]->name_style; } else { foreach($cols as $cl) { if ($cl->id === $user[0]->perm_id) { if ($user[0]->gender === 1) $showCol = $cl->colour_m; else if ($user[0]->gender === 2) $showCol = $cl->colour_f; else $showCol = $cl->colour_u; } } } } else { $showName = ""; $showCol = ""; } $catname = $this->getCategoryName($id); // Compile. $res[] = array( 'f_id' => $f['id'], 'f_last_uid' => $f['last_uid'], 'f_cat' => $f['cat_id'], 'f_name' => $f['title'], 'f_desc' => $f['description'], 'f_topics' => $f['threads'], 'f_posts' => $f['posts'], 'f_last' => $f['last_date'], 'c_name' => $catname[0]->title, 'u_name' => $showName, 'u_col' => $showCol ); } return $res; } public function browseForumInfo($id, $to) { // /api/rpc/board/browse/browseforuminfo/id/to } public function browseTopics($mode, $id, $from, $to, Request $request) { // /api/rpc/board/browse/browsetopicsmode/id/from/to $topsUP = $this->getTopicsUnpinned($id, $from, $to); $topsPN = $this->getTopicsPinned($id, $from, $to); $topsUS = $this->getTopicsUser($id, $from, $to); $cols = $this->objUser->getGroupColours()->toArray(); $tops = null; if ($mode === 'unpinned') { $tops = $topsUP; } else if ($mode === 'pinned') { $tops = $topsPN; } else if ($mode === 'user') { $tops = $topsUS; } else { return array( 'error' => 'Invalid mode.' ); } $res = array(); foreach($tops as $t) { $fplp = $this->getFirstAndLastPosts($t->id); $userFD = $fplp['first']['date']; $userLD = $fplp['last']['date']; $userFirst = $this->objUser->getUser($fplp['first']['uid'], $request)->toArray(); $userLast = $this->objUser->getUser($fplp['last']['uid'], $request)->toArray(); $showNameF = ""; $showColF = ""; $showNameL = ""; $showColL = ""; if ($userFirst[0]->display_name !== '') { $showNameF = $userFirst[0]->display_name; } else { $showNameF = $userFirst[0]->username; } if ($userFirst[0]->name_style !== '') { $showColF = $userFirst[0]->name_style; } else { foreach($cols as $cl) { if ($cl->id === $userFirst[0]->perm_id) { if ($userFirst[0]->gender === 1) $showColF = $cl->colour_m; else if ($userFirst[0]->gender === 2) $showColF = $cl->colour_f; else $showColF = $cl->colour_u; } } } if ($userLast[0]->display_name !== '') { $showNameL = $userLast[0]->display_name; } else { $showNameL = $userLast[0]->username; } if ($userLast[0]->name_style !== '') { $showColL = $userLast[0]->name_style; } else { foreach($cols as $cl) { if ($cl->id === $userLast[0]->perm_id) { if ($userLast[0]->gender === 1) $showColL = $cl->colour_m; else if ($userLast[0]->gender === 2) $showColL = $cl->colour_f; else $showColL = $cl->colour_u; } } } $catname = $this->getCategoryName($id); // Compile. $res[] = array( 't_id' => $t->id, 't_for_id' => $t->for_id, 't_title' => $t->title, 't_replies' => $t->replies, 't_views' => $t->views, 't_first_date' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', date($userFD)), 't_last_date' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', date($userLD)), 't_sticky' => $t->sticky, 't_lock' => $t->lock, 't_poll' => $t->poll, 't_read' => $t->read, 't_lang_id' => $t->lang_id, 'u_first_uid' => $t->started_by, 'u_last_uid' => $t->last_uid, 'u_first_name' => $showNameF, 'u_last_name' => $showNameL, 'u_first_col' => $showColF, 'u_last_col' => $showColL ); } return $res; } public function browseTopicInfo($tp, $id, $to) { // /api/rpc/board/browse/browsetopicinfo/tp/id/to if ($tp == 'p') { // Get information for the navigation. $tid = $this->getTopicIdFromPost($id); $tinfo = $this->getTopicName($tid); } else { // Get information for the navigation. $tinfo = $this->getTopicName($id); } $finfo = $this->getForumName($tinfo[0]->for_id); $cinfo = $this->getCategoryName($finfo[0]->cat_id); // Count posts for navigation. if ($tp == 't') $pcount = $this->countPostsInTopic($id); // Is this topic locked? if ($tp == 't') $tlock = $this->getTopicLock($id); else $tlock = $this->getTopicLock($tid); $glock = false; if ($tlock[0]->lock == 0) $glock = false; else $glock = true; // Is this topic pinned? if ($tp == 't') $tpin = $this->getTopicPin($id); else $tpin = $this->getTopicPin($tid); $gpin = false; if ($tpin[0]->sticky == 0) $gpin = false; else $gpin = true; if ($tp == 'p') { // Compile. return array( 'topId' => $tid, 'forId' => $tinfo[0]->for_id, 'topName' => $tinfo[0]->title, 'catId' => $finfo[0]->cat_id, 'forName' => $finfo[0]->title, 'catName' => $cinfo[0]->title, 'lock' => $glock, 'pin' => $gpin ); } else { // Compile. return array( 'forId' => $tinfo[0]->for_id, 'topName' => $tinfo[0]->title, 'catId' => $finfo[0]->cat_id, 'forName' => $finfo[0]->title, 'catName' => $cinfo[0]->title, 'maxPage' => ceil($pcount / $to), 'posts' => $pcount, 'lock' => $glock, 'pin' => $gpin ); } } public function stripBR($string) { return preg_replace('/\/i', '', $string); } public function autoLink($s) { if (strpos($s, '[link=') !== false || strpos($s, '[/link]') !== false) { return $s; } else if (strpos($s, '') !== false) { return $s; } else if (strpos($s, '[img]') !== false || strpos($s, '[/img]') !== false) { return $s; } else { return preg_replace('!(\s|^)((https?://|www\.)+[a-z0-9_%./#?=;&-]+)!i', ' $2 ',$s); } } function getBBCode($text) { $find = array( '~\[b\](.*?)\[/b\]~s', '~\[i\](.*?)\[/i\]~s', '~\[u\](.*?)\[/u\]~s', '~\[s\](.*?)\[/s\]~s', '~\[o\](.*?)\[/o\]~s', '~\[centre\](.*?)\[/centre\]~s', '~\[img width=(.*?) height=(.*?)\](https?://.*?\.(?:jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]~s', '~\[img height=(.*?) width=(.*?)\](https?://.*?\.(?:jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]~s', '~\[img width=(.*?)\](https?://.*?\.(?:jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]~s', '~\[img height=(.*?)\](https?://.*?\.(?:jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]~s', '~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]~s', '~\[yt\](.*?)\[/yt\]~s', '~\[link=((?:ftp|https?)://.*?)\](.*?)\[/link\]~s', '~\[sound\](https?://.*?\.(?:mp3))\[/sound\]~s', '~\[size=(.*?)\](.*?)\[/size\]~s', '~\[colour=(.*?)\](.*?)\[/colour\]~s', '~\[quote="(.*?)" id="(.*?)"](.*?)\[/quote]~s', '~\[quote="(.*?)"](.*?)\[/quote]~s', '~\[quote](.*?)\[/quote]~s', '~\[code](.*?)\[/code]~s', '~\[spoiler=(.*?)](.*?)\[/spoiler]~s', '~\[spoiler](.*?)\[/spoiler]~s', '~\[rtl](.*?)\[/rtl]~s', '~\[gcn](.*?)\[/gcn]~s', '~\[miiverse](.*?)\[/miiverse]~s', '~\[smb](.*?)\[/smb]~s', '~\[video](.*?)\[/video]~s', ); $replace = array( '$1', '$1', '$1', '$1', '$1', '$1', '', '', '', '', '', '
', '$2', '', '$2', '$2', '
Posted by \'$1\'
$3
', '
Posted by \'$1\'
$2
', '

$1
', '
$1

', '

', '

', '
$1
', '$1', '$1', '$1', '', ); return preg_replace($find, $replace, $text); } public function packageMessage($string) { $string = $this->stripBR($string); $string = $this->autoLink($string); $string = $this->getBBCode($string); return $string; } public function browseTopicPosts($tp, $id, $from, $to, Request $request) { // /api/rpc/board/browse/browsetopicposts/tp/id/from/to // Load group colours. $ucol = $this->objUser->getGroupColours(); // All the user posts' user IDs. if ($tp == 't') $uid = $this->getUserPosts($id, $from, $to, $request); else if ($tp == 'p') $uid = $this->getUserPost($id, $request); else $uid = $this->getPostsOfUser($id, $from, $to); $udat = array(); $key = 0; foreach ($uid as $i) { $showName = ''; $showCol = ''; $showGroupName = ''; // Display name or username? if (!empty($i->display_name)) { $showName = $i->display_name; } else { $showName = $i->username; } // Custom name styling or default? if (!empty($i->name_style)) { $showCol = $i->name_style; } else { foreach ($ucol as $j) { if ($j->id == $i->perm_id) { if ($i->gender == 1) $showCol = $j->colour_m; else if ($i->gender == 2) $showCol = $j->colour_f; else $showCol = $j->colour_u; } } } // Group names. $gname = $this->objUser->getGroupName($i->user_id); $showGroupName = $gname[0]->name; $mess = $this->packageMessage($i->message); setlocale(LC_ALL, 'ja_JP.utf8'); array_push($udat, [ 'key' => $key, 'id' => $i->id, 'tid' => $i->top_id, 'uid' => $i->user_id, 'post_date' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', date($i->post_date)), 'message' => $mess, 'delete' => $i->delete, 'delreason' => $i->delreason, 'lastedit' => strftime('%Y/%m/%d(%a) %H:%M:%S %Z', date($i->lastedit)), 'lasteditUnix' => $i->lastedit, 'ipaddress' => $i->ipaddress, 'nolayout' => $i->nolayout, 'postcount' => $i->postcount, 'total_posts' => $i->total_posts, 'header' => $i->header, 'footer' => $i->footer, 'member_title' => $i->member_title, 'gender' => $i->gender, 'avatar' => $i->avatar, 'showcol' => $showCol, 'showname' => $showName, 'showgroup' => $showGroupName, 'country' => $i->country, ]); $key++; } // Assign group names. return $udat; } public function browsePermissions($uid, Request $request) { // /api/rpc/board/browse/browsepermissions/uid // Get user ID. $perm = $this->objUser->getUser($uid, $request); // Does the user ID exist? Grand the appropriate rights. Otherwise, use guest. if ($uid != 0) { // Forum permissions. $grouppermfor = $this->objPermission->getPermissionGroup('for', $perm[0]->perm_id); $userpermfor = $this->objPermission->getPermissionUser('for', $uid); // User permissions. $grouppermusr = $this->objPermission->getPermissionGroup('usr', $perm[0]->perm_id); $userpermusr = $this->objPermission->getPermissionUser('usr', $uid); // Now provide an array of user overwritten permissions if it exists. Otherwise, give its group permissions. $forarr = array(); $usrarr = array(); if (!empty($userpermfor[0])) { $forarr = (array)$userpermfor[0]; } else { $forarr = (array)$grouppermfor[0]; } if (!empty($userpermusr[0])) { $usrarr = (array)$userpermusr[0]; } else { $usrarr = (array)$grouppermusr[0]; } $merge = array(); $merge = array_merge($forarr, $usrarr); return $merge; } else { // Forum permissions. $grouppermfor = $this->objPermission->getPermissionGroup('for', 6); // User permissions. $grouppermusr = $this->objPermission->getPermissionGroup('usr', 6); // Since guests don't have user overwritten permissions, simply return the group permissions. $merge = array(); $merge = array_merge((array)$grouppermfor[0], (array)$grouppermusr[0]); return $merge; } } }