public static function moderate_comment(Comment_Model $object, $moderated_state, $new_content = NULL) { $object->moderated_state = $moderated_state; //TODO: mail à l'intéressé ... if ($new_content != NULL) { $object->content = $new_content; } $object->save(); }
/** * Displays a report. * @param boolean $id If id is supplied, a report with that id will be * retrieved. */ public function view($id = false) { $this->template->header->this_page = 'reports'; $this->template->content = new View('reports_view'); // Load Akismet API Key (Spam Blocker) $api_akismet = Kohana::config('settings.api_akismet'); if (!$id) { url::redirect('main'); } else { $incident = ORM::factory('incident', $id); if ($incident->id == 0) { url::redirect('main'); } // Comment Post? // Setup and initialize form field names $form = array('comment_author' => '', 'comment_description' => '', 'comment_email' => '', 'comment_ip' => '', 'captcha' => ''); $captcha = Captcha::factory(); $errors = $form; $form_error = FALSE; // Check, has the form been submitted, if so, setup validation if ($_POST) { // Instantiate Validation, use $post, so we don't overwrite $_POST fields with our own things $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('comment_author', 'required', 'length[3,100]'); $post->add_rules('comment_description', 'required'); $post->add_rules('comment_email', 'required', 'email', 'length[4,100]'); $post->add_rules('captcha', 'required', 'Captcha::valid'); // Test to see if things passed the rule checks if ($post->validate()) { // Yes! everything is valid if ($api_akismet != "") { // Run Akismet Spam Checker $akismet = new Akismet(); // comment data $comment = array('author' => $post->comment_author, 'email' => $post->comment_email, 'website' => "", 'body' => $post->comment_description, 'user_ip' => $_SERVER['REMOTE_ADDR']); $config = array('blog_url' => url::site(), 'api_key' => $api_akismet, 'comment' => $comment); $akismet->init($config); if ($akismet->errors_exist()) { if ($akismet->is_error('AKISMET_INVALID_KEY')) { // throw new Kohana_Exception('akismet.api_key'); } elseif ($akismet->is_error('AKISMET_RESPONSE_FAILED')) { // throw new Kohana_Exception('akismet.server_failed'); } elseif ($akismet->is_error('AKISMET_SERVER_NOT_FOUND')) { // throw new Kohana_Exception('akismet.server_not_found'); } // If the server is down, we have to post // the comment :( // $this->_post_comment($comment); $comment_spam = 0; } else { if ($akismet->is_spam()) { $comment_spam = 1; } else { $comment_spam = 0; } } } else { // No API Key!! $comment_spam = 0; } $comment = new Comment_Model(); $comment->incident_id = $id; $comment->comment_author = strip_tags($post->comment_author); $comment->comment_description = strip_tags($post->comment_description); $comment->comment_email = strip_tags($post->comment_email); $comment->comment_ip = $_SERVER['REMOTE_ADDR']; $comment->comment_date = date("Y-m-d H:i:s", time()); // Activate comment for now if ($comment_spam == 1) { $comment->comment_spam = 1; $comment->comment_active = 0; } else { $comment->comment_spam = 0; $comment->comment_active = 1; } $comment->save(); // Notify Admin Of New Comment $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_comment.subject'), Kohana::lang('notifications.admin_new_comment.message') . "\n\n'" . strtoupper($incident->incident_title) . "'" . "\n" . url::base() . 'reports/view/' . $id); // Redirect url::redirect('reports/view/' . $id); } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('comments')); $form_error = TRUE; } } $this->template->content->incident_id = $incident->id; $this->template->content->incident_title = $incident->incident_title; $this->template->content->incident_description = nl2br($incident->incident_description); $this->template->content->incident_location = $incident->location->location_name; $this->template->content->incident_latitude = $incident->location->latitude; $this->template->content->incident_longitude = $incident->location->longitude; $this->template->content->incident_date = date('M j Y', strtotime($incident->incident_date)); $this->template->content->incident_time = date('H:i', strtotime($incident->incident_date)); $this->template->content->incident_category = $incident->incident_category; if ($incident->incident_rating == '') { $this->template->content->incident_rating = 0; } else { $this->template->content->incident_rating = $incident->incident_rating; } // Retrieve Media $incident_news = array(); $incident_video = array(); $incident_photo = array(); foreach ($incident->media as $media) { if ($media->media_type == 4) { $incident_news[] = $media->media_link; } elseif ($media->media_type == 2) { $incident_video[] = $media->media_link; } elseif ($media->media_type == 1) { $incident_photo[] = $media->media_link; } } $this->template->content->incident_verified = $incident->incident_verified; // Retrieve Comments (Additional Information) $incident_comments = array(); if ($id) { $incident_comments = ORM::factory('comment')->where('incident_id', $id)->where('comment_active', '1')->where('comment_spam', '0')->orderby('comment_date', 'asc')->find_all(); } $this->template->content->incident_comments = $incident_comments; } // Add Neighbors $this->template->content->incident_neighbors = $this->_get_neighbors($incident->location->latitude, $incident->location->longitude); // Get RSS News Feeds $this->template->content->feeds = ORM::factory('feed_item')->limit('5')->orderby('item_date', 'desc')->find_all(); // Video links $this->template->content->incident_videos = $incident_video; //images $this->template->content->incident_photos = $incident_photo; // Create object of the video embed class $video_embed = new VideoEmbed(); $this->template->content->videos_embed = $video_embed; // Javascript Header $this->template->header->map_enabled = TRUE; $this->template->header->photoslider_enabled = TRUE; $this->template->header->videoslider_enabled = TRUE; $this->template->header->js = new View('reports_view_js'); $this->template->header->js->incident_id = $incident->id; $this->template->header->js->default_map = Kohana::config('settings.default_map'); $this->template->header->js->default_zoom = Kohana::config('settings.default_zoom'); $this->template->header->js->latitude = $incident->location->latitude; $this->template->header->js->longitude = $incident->location->longitude; $this->template->header->js->incident_photos = $incident_photo; // Pack the javascript using the javascriptpacker helper $myPacker = new javascriptpacker($this->template->header->js, 'Normal', false, false); $this->template->header->js = $myPacker->pack(); // initialize custom field array $form_field_names = $this->_get_custom_form_fields($id, $incident->form_id, false); // Retrieve Custom Form Fields Structure $disp_custom_fields = $this->_get_custom_form_fields($id, $incident->form_id, true); $this->template->content->disp_custom_fields = $disp_custom_fields; // Forms $this->template->content->form = $form; $this->template->content->form_field_names = $form_field_names; $this->template->content->captcha = $captcha; $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; // If the Admin is Logged in - Allow for an edit link $this->template->content->logged_in = $this->logged_in; }
/** * Submit comments * * @return int */ private function _add_comment() { $api_akismet = Kohana::config('settings.api_akismet'); // Comment Post? // Setup and initialize form field names $form = array('incident_id' => '', 'comment_author' => '', 'comment_description' => '', 'comment_email' => ''); $captcha = Captcha::factory(); $errors = $form; $form_error = FALSE; $ret_value = 0; // Check, has the form been submitted, if so, setup validation if ($_POST and Kohana::config('settings.allow_comments')) { // Instantiate Validation, use $post, so we don't overwrite $_POST fields with our own things $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('incident_id', 'required'); $post->add_rules('comment_author', 'required', 'length[3,100]'); $post->add_rules('comment_description', 'required'); $post->add_rules('comment_email', 'required', 'email', 'length[4,100]'); // Test to see if things passed the rule checks if ($post->validate()) { // Yes! everything is valid $incident = ORM::factory('incident')->where('id', $post->incident_id)->where('incident_active', 1)->find(); if ($incident->id == 0) { return $this->response(1, "No incidents with that ID"); } if ($api_akismet != "") { // Run Akismet Spam Checker $akismet = new Akismet(); // Comment data $comment = array('author' => $post->comment_author, 'email' => $post->comment_email, 'website' => "", 'body' => $post->comment_description, 'user_ip' => $_SERVER['REMOTE_ADDR']); $config = array('blog_url' => url::site(), 'api_key' => $api_akismet, 'comment' => $comment); $akismet->init($config); if ($akismet->errors_exist()) { if ($akismet->is_error('AKISMET_INVALID_KEY')) { // throw new Kohana_Exception('akismet.api_key'); } elseif ($akismet->is_error('AKISMET_RESPONSE_FAILED')) { // throw new Kohana_Exception('akismet.server_failed'); } elseif ($akismet->is_error('AKISMET_SERVER_NOT_FOUND')) { // throw new Kohana_Exception('akismet.server_not_found'); } // If the server is down, we have to post // the comment :( // $this->_post_comment($comment); $comment_spam = 0; } else { if ($akismet->is_spam()) { $comment_spam = 1; } else { $comment_spam = 0; } } } else { // No API Key!! $comment_spam = 0; } $comment = new Comment_Model(); $comment->incident_id = strip_tags($post->incident_id); $comment->comment_author = strip_tags($post->comment_author); $comment->comment_description = strip_tags($post->comment_description); $comment->comment_email = strip_tags($post->comment_email); $comment->comment_ip = $_SERVER['REMOTE_ADDR']; $comment->comment_date = date("Y-m-d H:i:s", time()); // Activate comment for now if ($comment_spam == 1) { $comment->comment_spam = 1; $comment->comment_active = 0; } else { $comment->comment_spam = 0; if (Kohana::config('settings.allow_comments') == 1) { // Auto Approve $comment->comment_active = 1; } else { // Manually Approve $comment->comment_active = 0; } } $comment->save(); // Notify Admin Of New Comment $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_comment.subject'), Kohana::lang('notifications.admin_new_comment.message') . "\n\n'" . strtoupper($incident->incident_title) . "'" . "\n" . url::base() . 'reports/view/' . $post->incident_id); } else { // No! We have validation errors, we need to show the form again, with the errors // Repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // Populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('comments')); foreach ($errors as $error_item => $error_description) { if (!is_array($error_description)) { $this->error_messages .= $error_description; if ($error_description != end($errors)) { $this->error_messages .= " - "; } } } $ret_value = 1; // Validation error } } else { $ret_value = 3; } return $this->response($ret_value, $this->error_messages); }
/** * Lists the reports. * @param int $page */ function index($page = 1) { $this->template->content = new View('simplegroups/comments'); $this->template->content->title = Kohana::lang('ui_admin.comments'); if (!empty($_GET['status'])) { $status = $_GET['status']; if (strtolower($status) == 'a') { $filter = 'comment_active = 1 AND comment_spam = 0'; } elseif (strtolower($status) == 'p') { $filter = 'comment_active = 0 AND comment_spam = 0'; } elseif (strtolower($status) == 's') { $filter = 'comment_spam = 1'; } else { $status = "0"; $filter = 'comment_spam = 0'; } } else { $status = "0"; $filter = 'comment_spam = 0'; } // check, has the form been submitted? $form_error = FALSE; $form_saved = FALSE; $form_action = ""; if ($_POST) { $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('action', 'required', 'alpha', 'length[1,1]'); $post->add_rules('comment_id.*', 'required', 'numeric'); if ($post->validate()) { if ($post->action == 'a') { // Approve Action foreach ($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_active = '1'; $update->comment_spam = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.approved')); } elseif ($post->action == 'u') { // Unapprove Action foreach ($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_active = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.unapproved')); } elseif ($post->action == 's') { // Spam Action foreach ($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_spam = '1'; $update->comment_active = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.marked_as_spam')); } elseif ($post->action == 'n') { // Spam Action foreach ($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_spam = '0'; $update->comment_active = '1'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.marked_as_not_spam')); } elseif ($post->action == 'd') { foreach ($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->delete(); } } $form_action = Kohana::lang('ui_admin.deleted'); } elseif ($post->action == 'x') { ORM::factory('comment')->where('comment_spam', '1')->delete_all(); $form_action = Kohana::lang('ui_admin.deleted'); } $form_saved = TRUE; } else { $form_error = TRUE; } } // Pagination $pagination = new Pagination(array('query_string' => 'page', 'items_per_page' => (int) Kohana::config('settings.items_per_page_admin'), 'total_items' => ORM::factory('comment')->join("simplegroups_groups_incident", "comment.incident_id", "simplegroups_groups_incident.incident_id")->where($filter . " AND (simplegroups_groups_incident.simplegroups_groups_id = " . $this->group->id . ") ")->count_all())); $comments = ORM::factory('comment')->join("simplegroups_groups_incident", "comment.incident_id", "simplegroups_groups_incident.incident_id")->where($filter . " AND (simplegroups_groups_incident.simplegroups_groups_id = " . $this->group->id . ") ")->orderby('comment_date', 'desc')->find_all((int) Kohana::config('settings.items_per_page_admin'), $pagination->sql_offset); $this->template->content->comments = $comments; $this->template->content->pagination = $pagination; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; // Total Reports $this->template->content->total_items = $pagination->total_items; // Status Tab $this->template->content->status = $status; // Javascript Header $this->template->js = new View('simplegroups/comments_js'); }
/** * Displays a report. * @param boolean $id If id is supplied, a report with that id will be * retrieved. */ public function view($id = FALSE) { $this->template->header->this_page = 'reports'; $this->template->content = new View('reports/detail'); // Load Akismet API Key (Spam Blocker) $api_akismet = Kohana::config('settings.api_akismet'); // Sanitize the report id before proceeding $id = intval($id); if ($id > 0) { $incident = ORM::factory('sharing_incident')->where('id', $id)->where('incident_active', 1)->find(); // Not Found if (!$incident->loaded) { url::redirect('reports/'); } // Comment Post? // Setup and initialize form field names $form = array('comment_author' => '', 'comment_description' => '', 'comment_email' => '', 'comment_ip' => '', 'captcha' => ''); $captcha = Captcha::factory(); $errors = $form; $form_error = FALSE; // Check, has the form been submitted, if so, setup validation if ($_POST and Kohana::config('settings.allow_comments')) { // Instantiate Validation, use $post, so we don't overwrite $_POST fields with our own things $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order if (!$this->user) { $post->add_rules('comment_author', 'required', 'length[3,100]'); $post->add_rules('comment_email', 'required', 'email', 'length[4,100]'); } $post->add_rules('comment_description', 'required'); $post->add_rules('captcha', 'required', 'Captcha::valid'); // Test to see if things passed the rule checks if ($post->validate()) { // Yes! everything is valid if ($api_akismet != "") { // Run Akismet Spam Checker $akismet = new Akismet(); // Comment data $comment = array('website' => "", 'body' => $post->comment_description, 'user_ip' => $_SERVER['REMOTE_ADDR']); if ($this->user) { $comment['author'] = $this->user->name; $comment['email'] = $this->user->email; } else { $comment['author'] = $post->comment_author; $comment['email'] = $post->comment_email; } $config = array('blog_url' => url::site(), 'api_key' => $api_akismet, 'comment' => $comment); $akismet->init($config); if ($akismet->errors_exist()) { if ($akismet->is_error('AKISMET_INVALID_KEY')) { // throw new Kohana_Exception('akismet.api_key'); } elseif ($akismet->is_error('AKISMET_RESPONSE_FAILED')) { // throw new Kohana_Exception('akismet.server_failed'); } elseif ($akismet->is_error('AKISMET_SERVER_NOT_FOUND')) { // throw new Kohana_Exception('akismet.server_not_found'); } $comment_spam = 0; } else { $comment_spam = $akismet->is_spam() ? 1 : 0; } } else { // No API Key!! $comment_spam = 0; } $comment = new Comment_Model(); $comment->incident_id = 0; if ($this->user) { $comment->user_id = $this->user->id; $comment->comment_author = $this->user->name; $comment->comment_email = $this->user->email; } else { $comment->comment_author = strip_tags($post->comment_author); $comment->comment_email = strip_tags($post->comment_email); } $comment->comment_description = strip_tags($post->comment_description); $comment->comment_ip = $_SERVER['REMOTE_ADDR']; $comment->comment_date = date("Y-m-d H:i:s", time()); // Activate comment for now if ($comment_spam == 1) { $comment->comment_spam = 1; $comment->comment_active = 0; } else { $comment->comment_spam = 0; $comment->comment_active = Kohana::config('settings.allow_comments') == 1 ? 1 : 0; } $comment->save(); // link comment to sharing_incident $incident_comment = ORM::factory('sharing_incident_comment'); $incident_comment->comment_id = $comment->id; $incident_comment->sharing_incident_id = $incident->id; $incident_comment->save(); // Event::comment_add - Added a New Comment Event::run('ushahidi_action.comment_add', $comment); // Notify Admin Of New Comment $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_comment.subject'), Kohana::lang('notifications.admin_new_comment.message') . "\n\n'" . utf8::strtoupper($incident->incident_title) . "'" . "\n" . url::base() . 'reports/sharing/view/' . $id); // Redirect url::redirect('reports/sharing/view/' . $id); } else { // No! We have validation errors, we need to show the form again, with the errors // Repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // Populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('comments')); $form_error = TRUE; } } // Filters $incident_title = $incident->incident_title; $incident_description = $incident->incident_description; Event::run('ushahidi_filter.report_title', $incident_title); Event::run('ushahidi_filter.report_description', $incident_description); $this->template->header->page_title .= $incident_title . Kohana::config('settings.title_delimiter'); // Add Features // hardcode geometries to empty $this->template->content->features_count = 0; $this->template->content->features = array(); $this->template->content->incident_id = $incident->id; $this->template->content->incident_title = $incident_title; $this->template->content->incident_description = $incident_description; $this->template->content->incident_location = $incident->location->location_name; $this->template->content->incident_latitude = $incident->location->latitude; $this->template->content->incident_longitude = $incident->location->longitude; $this->template->content->incident_date = date('M j Y', strtotime($incident->incident_date)); $this->template->content->incident_time = date('H:i', strtotime($incident->incident_date)); $this->template->content->incident_category = ORM::factory('sharing_incident_category')->where('sharing_incident_id', $incident->id)->find_all(); // Incident rating $rating = ORM::factory('rating')->join('incident', 'incident.id', 'rating.incident_id', 'INNER')->where('rating.incident_id', $incident->id)->find(); $this->template->content->incident_rating = $rating->rating == '' ? 0 : $rating->rating; // Retrieve Media $incident_news = array(); $incident_video = array(); $incident_photo = array(); foreach ($incident->media as $media) { if ($media->media_type == 4) { $incident_news[] = $media->media_link; } elseif ($media->media_type == 2) { $incident_video[] = $media->media_link; } elseif ($media->media_type == 1) { $incident_photo[] = array('large' => url::convert_uploaded_to_abs($media->media_link), 'thumb' => url::convert_uploaded_to_abs($media->media_thumb)); } } $this->template->content->incident_verified = $incident->incident_verified; // Retrieve Comments (Additional Information) $this->template->content->comments = ""; if (Kohana::config('settings.allow_comments')) { $this->template->content->comments = new View('reports/comments'); $incident_comments = array(); if ($id) { $incident_comments = Sharing_Incident_Model::get_comments($id); } $this->template->content->comments->incident_comments = $incident_comments; } } else { url::redirect('reports'); } // Add extra info to meta Event::add('ushahidi_action.report_display_media', array($this, 'report_display_media')); // Add Neighbors $this->template->content->incident_neighbors = Sharing_Incident_Model::get_neighbouring_incidents($id, TRUE, 0, 5); // News Source links $this->template->content->incident_news = $incident_news; // Video links $this->template->content->incident_videos = $incident_video; // Images $this->template->content->incident_photos = $incident_photo; // Create object of the video embed class $video_embed = new VideoEmbed(); $this->template->content->videos_embed = $video_embed; // Javascript Header $this->themes->map_enabled = TRUE; $this->themes->photoslider_enabled = TRUE; $this->themes->videoslider_enabled = TRUE; $this->themes->js = new View('reports/view_js'); $this->themes->js->incident_id = $incident->id; $this->themes->js->incident_json_url = 'json/share/single/' . $incident->id; $this->themes->js->default_map = Kohana::config('settings.default_map'); $this->themes->js->default_zoom = Kohana::config('settings.default_zoom'); $this->themes->js->latitude = $incident->location->latitude; $this->themes->js->longitude = $incident->location->longitude; $this->themes->js->incident_zoom = null; //$incident->incident_zoom; $this->themes->js->incident_photos = $incident_photo; // Initialize custom field array $this->template->content->custom_forms = new View('reports/detail_custom_forms'); $form_field_names = customforms::get_custom_form_fields($id, 1, FALSE, "view"); $this->template->content->custom_forms->form_field_names = $form_field_names; // Are we allowed to submit comments? $this->template->content->comments_form = ""; if (Kohana::config('settings.allow_comments')) { $this->template->content->comments_form = new View('reports/comments_form'); $this->template->content->comments_form->user = $this->user; $this->template->content->comments_form->form = $form; $this->template->content->comments_form->form_field_names = $form_field_names; $this->template->content->comments_form->captcha = $captcha; $this->template->content->comments_form->errors = $errors; $this->template->content->comments_form->form_error = $form_error; } // If the Admin is Logged in - Allow for an edit link $this->template->content->logged_in = $this->logged_in; // Rebuild Header Block $this->template->header->header_block = $this->themes->header_block(); $this->template->footer->footer_block = $this->themes->footer_block(); }
/** * Displays a report. * @param boolean $id If id is supplied, a report with that id will be * retrieved. */ public function view($id = false) { $this->template->header->this_page = 'reports'; $this->template->content = new View('reports_view'); if (!$id) { url::redirect('main'); } else { $incident = ORM::factory('incident', $id); if ($incident->id == 0) { url::redirect('main'); } // Comment Post? // Setup and initialize form field names $form = array('comment_author' => '', 'comment_description' => '', 'comment_email' => '', 'comment_ip' => '', 'captcha' => ''); $captcha = Captcha::factory(); $errors = $form; $form_error = FALSE; // Check, has the form been submitted, if so, setup validation if ($_POST) { // Instantiate Validation, use $post, so we don't overwrite $_POST fields with our own things $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('comment_author', 'required', 'length[3,100]'); $post->add_rules('comment_description', 'required'); $post->add_rules('comment_email', 'required', 'email', 'length[4,100]'); $post->add_rules('captcha', 'required', 'Captcha::valid'); // Test to see if things passed the rule checks if ($post->validate()) { // Yes! everything is valid $comment = new Comment_Model(); $comment->incident_id = $id; $comment->comment_author = $post->comment_author; $comment->comment_description = $post->comment_description; $comment->comment_email = $post->comment_email; $comment->comment_ip = $_SERVER['REMOTE_ADDR']; $comment->comment_date = date("Y-m-d H:i:s", time()); // Activate comment for now $comment->comment_active = 1; $comment->save(); // Redirect url::redirect('reports/view/' . $id); } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('comments')); $form_error = TRUE; } } $this->template->content->incident_id = $incident->id; $this->template->content->incident_title = $incident->incident_title; $this->template->content->incident_description = nl2br($incident->incident_description); $this->template->content->incident_location = $incident->location->location_name; $this->template->content->incident_latitude = $incident->location->latitude; $this->template->content->incident_longitude = $incident->location->longitude; $this->template->content->incident_date = date('M j Y', strtotime($incident->incident_date)); $this->template->content->incident_time = date('H:i', strtotime($incident->incident_date)); $this->template->content->incident_category = $incident->incident_category; if ($incident->incident_rating == '') { $this->template->content->incident_rating = 0; } else { $this->template->content->incident_rating = $incident->incident_rating; } // Retrieve Media $incident_news = array(); $incident_video = array(); $incident_photo = array(); foreach ($incident->media as $media) { if ($media->media_type == 4) { $incident_news[] = $media->media_link; } elseif ($media->media_type == 2) { $incident_video[] = $media->media_link; } elseif ($media->media_type == 1) { $incident_photo[] = $media->media_link; } } $this->template->content->incident_verified = $incident->incident_verified; // Retrieve Comments (Additional Information) $incident_comments = array(); if ($id) { $incident_comments = ORM::factory('comment')->where('incident_id', $id)->where('comment_active', '1')->orderby('comment_date', 'asc')->find_all(); } $this->template->content->incident_comments = $incident_comments; } // Add Neighbors $this->template->content->incident_neighbors = $this->_get_neighbors($incident->location->latitude, $incident->location->longitude); // Get RSS News Feeds $this->template->content->feeds = ORM::factory('feed_item')->limit('5')->orderby('item_date', 'desc')->find_all(); // Video links $this->template->content->incident_videos = $incident_video; // Create object of the video embed class $video_embed = new VideoEmbed(); $this->template->content->videos_embed = $video_embed; // Javascript Header $this->template->header->map_enabled = TRUE; $this->template->header->photoslider_enabled = TRUE; $this->template->header->videoslider_enabled = TRUE; $this->template->header->js = new View('reports_view_js'); $this->template->header->js->incident_id = $incident->id; $this->template->header->js->default_map = Kohana::config('settings.default_map'); $this->template->header->js->default_zoom = Kohana::config('settings.default_zoom'); $this->template->header->js->latitude = $incident->location->latitude; $this->template->header->js->longitude = $incident->location->longitude; $this->template->header->js->incident_photos = $incident_photo; // Pack the javascript using the javascriptpacker helper $myPacker = new javascriptpacker($this->template->header->js, 'Normal', false, false); $this->template->header->js = $myPacker->pack(); // Forms $this->template->content->form = $form; $this->template->content->captcha = $captcha; $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; }
/** * Approves / Dissaproves a comment * * @param string response_type - The resposne format to return.XML * or JSON * * @return Array */ public function _approve_comment($response_type) { $form = array('action' => '', 'comment_id' => ''); $errors = $form; if ($_POST) { $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of //checks, carried out in order $post->add_rules('action', 'required', 'alpha', 'length[1,1]'); $post->add_rules('comment_id', 'required', 'numeric'); if ($post->validate()) { $comment_id = $post->comment_id; $comment = new Comment_Model($comment_id); if ($comment->loaded == true) { //approve if ($post->action == strtolower('a')) { $comment->comment_active = '1'; $comment->comment_spam = '0'; } else { if ($post->action == strtolower('u')) { $comment->comment_active = '0'; } } $comment->save(); } else { //Comment id doesn't exist in DB //TODO i18nize the string $this->error_messages .= "Comment ID does not exist."; $this->ret_value = 1; } } else { //TODO i18nize the string $this->error_messages .= "Comment ID is required."; $this->ret_value = 1; } } else { $this->ret_value = 3; } return $this->api_actions->_response($this->ret_value, $response_type, $this->error_messages); }
/** * Lists the reports. * @param int $page */ function index($page = 1) { $this->template->content = new View('admin/comments'); $this->template->content->title = Kohana::lang('ui_admin.comments'); $filter = ''; $r_from = ""; if( isset($_GET['from']) ) { $r_from = $this->input->xss_clean($_GET['from']); } $r_to = ""; if( isset($_GET['to']) ) { $r_to = $this->input->xss_clean($_GET['to']); } $filter_range = ""; if( isset($r_from) && empty($r_to) ) { $filter_range = "comment_date between \"".date("Y-m-d",strtotime($r_from))." 00:00:00\" and \"".date("Y-m-d")." 23:59:00\""; } elseif( isset($r_from) && isset($r_to) ) { $filter_range = "comment_date between \"".date("Y-m-d",strtotime($r_from))." 00:00:00\" and \"".date("Y-m-d",strtotime($r_to))." 23:59:00\""; } elseif( empty($r_from) && isset($r_to) ) { $filter_range = "comment_date between \"".date("Y-m-d",1)." 00:00:00\" and \"".date("Y-m-d",strtotime($r_to))." 23:59:00\""; } $filter_status = ""; if (!empty($_GET['status'])) { $status = $_GET['status']; if (strtolower($status) == 'a') { $filter_status = 'comment_active = 1 AND comment_spam = 0'; } elseif (strtolower($status) == 'p') { $filter_status = 'comment_active = 0 AND comment_spam = 0'; } elseif (strtolower($status) == 's') { $filter_status = 'comment_spam = 1'; } else { $status = "0"; $filter_status = 'comment_spam = 0'; } } else { $status = "0"; $filter_status = 'comment_spam = 0'; } // filter string build. $filter = $filter_status; $filter .= ((!empty($filter))? ((!empty($filter_range))? (" AND ".$filter_range):""):$filter_range); if (empty($filter)) { $filter = 'comment_spam = 0'; } // check, has the form been submitted? $form_error = FALSE; $form_saved = FALSE; $form_action = ""; if ($_POST) { $post = Validation::factory($_POST); // Add some filters $post->pre_filter('trim', TRUE); // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('action','required', 'alpha', 'length[1,1]'); $post->add_rules('comment_id.*','required','numeric'); if ($post->validate()) { if ($post->action == 'a') { // Approve Action foreach($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_active = '1'; $update->comment_spam = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.approved')); } elseif ($post->action == 'u') { // Unapprove Action foreach($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_active = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.unapproved')); } elseif ($post->action == 's') { // Spam Action foreach($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_spam = '1'; $update->comment_active = '0'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.marked_as_spam')); } elseif ($post->action == 'n') { // Spam Action foreach($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->comment_spam = '0'; $update->comment_active = '1'; $update->save(); } } $form_action = strtoupper(Kohana::lang('ui_admin.marked_as_not_spam')); } elseif ($post->action == 'd') // Delete Action { foreach($post->comment_id as $item) { $update = new Comment_Model($item); if ($update->loaded == true) { $update->delete(); } } $form_action = Kohana::lang('ui_admin.deleted'); } elseif ($post->action == 'x') // Delete All Spam Action { ORM::factory('comment')->where('comment_spam','1')->delete_all(); $form_action = Kohana::lang('ui_admin.deleted'); } $form_saved = TRUE; } else { $form_error = TRUE; } } $order = 0; $order_string = "desc"; if( isset($_GET['order']) ) { $order = intval($_GET['order']); if ( $order == 0 ) { $order_string = "desc"; } elseif ( $order == 1 ) { $order_string = "asc"; } else { $order = 0; $order_string = "desc"; } } // Pagination $pagination = new Pagination(array( 'query_string' => 'page', 'items_per_page' => (int) Kohana::config('settings.items_per_page_admin'), 'total_items' => ORM::factory('comment')->where($filter)->count_all() )); $comments = ORM::factory('comment')->where($filter)->orderby('comment_date', $order_string)->find_all((int) Kohana::config('settings.items_per_page_admin'), $pagination->sql_offset); $this->template->content->from = $r_from; $this->template->content->to = $r_to; $this->template->content->order = $order; $this->template->content->comments = $comments; $this->template->content->pagination = $pagination; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; // Total Reports $this->template->content->total_items = $pagination->total_items; // Status Tab $this->template->content->status = $status; // Javascript Header $this->template->js = new View('admin/comments_js'); }