Esempio n. 1
0
 public function create()
 {
     //hacking attempt
     if ($_POST['end_of_line'] != "") {
         exit;
     }
     if (isset($_POST['title']) && isset($_POST['cat']) && isset($_POST['imesg']) && isset($_POST['omesg'])) {
         $catid = (int) $_POST['cat'];
         $category = new \CODOF\Forum\Category($this->db);
         if (!$category->exists($catid) || !$category->canCreateTopicIn($catid)) {
             exit(_t("No such category exists!"));
         }
         $post = new \CODOF\Forum\Post($this->db);
         $topic = new \CODOF\Forum\Topic($this->db);
         $notifier = new \CODOF\Forum\Notification\Notifier();
         $subscriber = new \CODOF\Forum\Notification\Subscriber();
         $title = \CODOF\Format::title($_POST['title']);
         $filter = new \CODOF\SpamFilter();
         $needsModeration = false;
         $sticky = $_POST['sticky'] === "true" ? 'yes' : 'no';
         $frontpage = $_POST['frontpage'] === "true" ? 'yes' : 'no';
         if ($filter->isSpam($_POST['imesg'])) {
             $needsModeration = true;
         }
         $user = \CODOF\User\User::get();
         if ($sticky == 'yes' && $user->can('make sticky')) {
             if ($frontpage == 'yes') {
                 $tid = $topic->ins_topic($catid, $title, $needsModeration, \CODOF\Forum\Forum::STICKY);
             } else {
                 $tid = $topic->ins_topic($catid, $title, $needsModeration, \CODOF\Forum\Forum::STICKY_ONLY_CATEGORY);
             }
         } else {
             $tid = $topic->ins_topic($catid, $title, $needsModeration, \CODOF\Forum\Forum::APPROVED);
         }
         $pid = $post->ins_post($catid, $tid, $_POST['imesg'], $_POST['omesg']);
         $topic->link_topic_post($pid, $tid);
         //get any @mentions from the topic post
         $mentions = $subscriber->getMentions($_POST['imesg']);
         //get userids from mentions that actually exists in the database
         $ids = $subscriber->getIdsThatExisits($mentions);
         //subscribe self to topic as a Subscriber::NOTIFIED
         $subscriber->toTopic($catid, $tid, \CODOF\Forum\Notification\Subscriber::$NOTIFIED);
         //if post was inserted successfully
         if ($pid) {
             $topicData = array("label" => 'New topic', "cid" => $catid, "tid" => $tid, "tuid" => $user->id, "pid" => $pid, "mentions" => $ids, "message" => \CODOF\Util::start_cut(\CODOF\Format::imessage($_POST['imesg']), 120), "notification" => "%actor% created <b>%title%</b>", "bindings" => array("title" => \CODOF\Util::start_cut($title, 100)));
             $notifier->queueNotify('new_topic', $topicData);
             //$notifier->dequeueNotify();
             \CODOF\Hook::call('after_topic_insert', $topicData);
         }
         //insert tags if any present in the topic
         if (isset($_POST['tags']) && $user->can('add tags')) {
             //the method does the filtering
             $topic->insertTags($tid, $_POST['tags']);
         }
         echo json_encode(array('tid' => $tid));
     }
 }
Esempio n. 2
0
 public function category($catid, $page)
 {
     $cat = new \CODOF\Forum\Category($this->db);
     $cat_info = $cat->get_cat_info($catid);
     $cid = $cat_info['cat_id'];
     $user = \CODOF\User\User::get();
     if (!$cat_info) {
         $this->view = 'not_found';
         return;
     }
     if (!$user->can('view category', $cid)) {
         $this->view = 'access_denied';
         return;
     }
     $cats = $cat->get_categories();
     $cats_tree = $cat->generate_tree($cats);
     $sub_cats = $cat->get_sub_categories($cats_tree, $cid);
     $this->smarty->assign('parents', $cat->find_parents($cats, $cid));
     $this->smarty->assign('cats', $cats_tree);
     $this->smarty->assign('sub_cats', $sub_cats);
     //$num_results = \CODOF\Util::get_opt("num_posts_cat_topics");
     $subscriber = new \CODOF\Forum\Notification\Subscriber();
     $this->smarty->assign('no_followers', $subscriber->followersOfCategory($cid));
     if (\CODOF\User\CurrentUser\CurrentUser::loggedIn()) {
         $this->smarty->assign('my_subscription_type', $subscriber->levelForCategory($cid));
     }
     $api = new Ajax\forum\category();
     $num_topics_page = \CODOF\Util::get_opt('num_posts_cat_topics');
     $data = $api->get_topics($cid, $page);
     $this->smarty->assign('load_more_hidden', false);
     if ($page * $num_topics_page >= $cat_info['no_topics']) {
         $this->smarty->assign('load_more_hidden', true);
     }
     if (isset($_GET['search']) && $_GET['search'] != null) {
         //$search_conds = json_decode($_GET['search']);
         $search_data = $_GET['search'];
     } else {
         $search_data = '{}';
     }
     $user = \CODOF\User\User::get();
     $this->smarty->assign('new_topics', $data['new_topics']);
     $this->smarty->assign('can_create_topic', $cat->canCreateTopicIn($cid));
     $this->smarty->assign('can_search', $user->can('use search'));
     $this->smarty->assign('search_data', $search_data);
     $this->smarty->assign('topics', \CODOF\HB\Render::tpl('forum/category', $data));
     $this->smarty->assign('cat_info', $cat_info);
     $this->smarty->assign('cat_alias', $catid);
     $this->smarty->assign('curr_page', $page);
     $this->smarty->assign('num_posts_per_page', $num_topics_page);
     $this->assign_editor_vars();
     $no_topics = $no_posts = '&nbsp;&nbsp;&nbsp;-- ';
     if ($user->can('view all topics', $cid)) {
         $no_topics = \CODOF\Util::abbrev_no($cat_info['no_topics'], 2);
         $no_posts = \CODOF\Util::abbrev_no($cat_info['no_posts'], 2);
     }
     $this->smarty->assign('no_topics', $no_topics);
     $this->smarty->assign('no_posts', $no_posts);
     $this->css_files = array('category', 'editor', 'jquery.textcomplete');
     $this->js_files = array(array('category/category.js', array('type' => 'defer')), array('category/jquery.easing.1.3.js', array('type' => 'defer')), array('bootstrap-tagsinput.js', array('type' => 'defer')), array('bootstrap-slider.js', array('type' => 'defer')));
     $this->js_files = array_merge($this->js_files, $cat->get_js_editor_files());
     $this->smarty->assign('can_make_sticky', $user->can('make sticky'));
     $this->view = 'forum/category';
     $this->smarty->assign('can_make_sticky', $user->can('make sticky'));
     $this->smarty->assign('can_add_tags', $user->can('add tags'));
     \CODOF\Hook::call('on_category_view', array($cat_info));
     \CODOF\Store::set('rel:canonical_page', '/');
     \CODOF\Store::set('sub_title', $cat_info['cat_name']);
     \CODOF\Store::set('og:url', RURI . 'category/' . $catid);
     \CODOF\Store::set('og:desc', $cat_info['cat_description']);
     \CODOF\Store::set('og:image', DURI . CAT_IMGS . $cat_info['cat_img']);
 }