function index() { if (isset($_GET['key'])) { $frontlinesms_key = $_GET['key']; } if (isset($_GET['s'])) { $message_from = $_GET['s']; // Remove non-numeric characters from string $message_from = ereg_replace("[^0-9]", "", $message_from); } if (isset($_GET['m'])) { $message_description = $_GET['m']; } if (!empty($frontlinesms_key) && !empty($message_from) && !empty($message_description)) { // Is this a valid FrontlineSMS Key? $keycheck = ORM::factory('settings', 1)->where('frontlinesms_key', $frontlinesms_key)->find(); if ($keycheck->loaded == TRUE) { $services = new Service_Model(); $service = $services->where('service_name', 'SMS')->find(); if (!$service) { return; } $reporter = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message_from)->find(); if (!$reporter->loaded == TRUE) { // get default reporter level (Untrusted) $level = ORM::factory('level')->where('level_weight', 0)->find(); $reporter->service_id = $service->id; $reporter->level_id = $level->id; $reporter->service_userid = null; $reporter->service_account = $message_from; $reporter->reporter_first = null; $reporter->reporter_last = null; $reporter->reporter_email = null; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } // Save Message $message = new Message_Model(); $message->parent_id = 0; $message->incident_id = 0; $message->user_id = 0; $message->reporter_id = $reporter->id; $message->message_from = $message_from; $message->message_to = null; $message->message = $message_description; $message->message_type = 1; // Inbox $message->message_date = date("Y-m-d H:i:s", time()); $message->service_messageid = null; $message->save(); // Notify Admin Of New Email Message $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_sms.subject'), Kohana::lang('notifications.admin_new_sms.message')); } } }
/** * 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); }
/** * Adds email to the database and saves the sender as a new * Reporter if they don't already exist * @param string $messages */ private function add_email($messages) { $services = new Service_Model(); $service = $services->where('service_name', 'Email')->find(); if (!$service) { return; } if (empty($messages) || !is_array($messages)) { return; } foreach ($messages as $message) { $reporter = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message['email'])->find(); if (!$reporter->loaded == true) { // Add new reporter $names = explode(' ', $message['from'], 2); $last_name = ''; if (count($names) == 2) { $last_name = $names[1]; } // get default reporter level (Untrusted) $level = ORM::factory('level')->where('level_weight', 0)->find(); $reporter->service_id = $service->id; $reporter->level_id = $level->id; $reporter->service_userid = null; $reporter->service_account = $message['email']; $reporter->reporter_first = $names[0]; $reporter->reporter_last = $last_name; $reporter->reporter_email = $message['email']; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } if ($reporter->level_id > 1 && count(ORM::factory('message')->where('service_messageid', $message['message_id'])->find_all()) == 0) { // Save Email as Message $email = new Message_Model(); $email->parent_id = 0; $email->incident_id = 0; $email->user_id = 0; $email->reporter_id = $reporter->id; $email->message_from = $message['from']; $email->message_to = null; $email->message = $message['subject']; $email->message_detail = $message['body']; $email->message_type = 1; // Inbox $email->message_date = $message['date']; $email->service_messageid = $message['message_id']; $email->save(); // Notify Admin Of New Email Message $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_email.subject'), Kohana::lang('notifications.admin_new_email.message')); } } }
/** * 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(); }
/** * Adds email to the database and saves the sender as a new * Reporter if they don't already exist * @param string $messages */ private function add_email($messages) { $service = ORM::factory('service')->where('service_name', 'Email')->find(); if (!$service->loaded) { return; } if (empty($messages) or !is_array($messages)) { return; } foreach ($messages as $message) { $reporter = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message['email'])->find(); if (!$reporter->loaded == true) { // Add new reporter $names = explode(' ', $message['from'], 2); $last_name = ''; if (count($names) == 2) { $last_name = $names[1]; } // get default reporter level (Untrusted) $level = ORM::factory('level')->where('level_weight', 0)->find(); $reporter->service_id = $service->id; $reporter->level_id = $level->id; $reporter->service_account = $message['email']; $reporter->reporter_first = $names[0]; $reporter->reporter_last = $last_name; $reporter->reporter_email = $message['email']; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } if ($reporter->level_id > 1 && count(ORM::factory('message')->where('service_messageid', $message['message_id'])->find_all()) == 0) { // Save Email as Message $email = new Message_Model(); $email->parent_id = 0; $email->incident_id = 0; $email->user_id = 0; $email->reporter_id = $reporter->id; $email->message_from = $message['from']; $email->message_to = null; $email->message = $message['subject']; $email->message_detail = $message['body']; $email->message_type = 1; // Inbox $email->message_date = $message['date']; $email->service_messageid = $message['message_id']; $email->save(); // Attachments? foreach ($message['attachments'] as $attachments) { foreach ($attachments as $attachment) { $media = new Media_Model(); $media->location_id = 0; $media->incident_id = 0; $media->message_id = $email->id; $media->media_type = 1; // Images $media->media_link = $attachment[0]; $media->media_medium = $attachment[1]; $media->media_thumb = $attachment[2]; $media->media_date = date("Y-m-d H:i:s", time()); $media->save(); } } // Auto-Create A Report if Reporter is Trusted $reporter_weight = $reporter->level->level_weight; $reporter_location = $reporter->location; if ($reporter_weight > 0 and $reporter_location) { // Create Incident $incident = new Incident_Model(); $incident->location_id = $reporter_location->id; $incident->incident_title = $message['subject']; $incident->incident_description = $message['body']; $incident->incident_date = $message['date']; $incident->incident_dateadd = date("Y-m-d H:i:s", time()); $incident->incident_active = 1; if ($reporter_weight == 2) { $incident->incident_verified = 1; } $incident->save(); // Update Message with Incident ID $email->incident_id = $incident->id; $email->save(); // Save Incident Category $trusted_categories = ORM::factory("category")->where("category_trusted", 1)->find(); if ($trusted_categories->loaded) { $incident_category = new Incident_Category_Model(); $incident_category->incident_id = $incident->id; $incident_category->category_id = $trusted_categories->id; $incident_category->save(); } // Add Attachments $attachments = ORM::factory("media")->where("message_id", $email->id)->find_all(); foreach ($attachments as $attachment) { $attachment->incident_id = $incident->id; $attachment->save(); } } // Notify Admin Of New Email Message $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_email.subject'), Kohana::lang('notifications.admin_new_email.message')); // Action::message_email_add - Email Received! Event::run('ushahidi_action.message_email_add', $email); } } }
/** * Send The SMS Message Using Default Provider * @param from mixed The source/sender address * @param message mixed The text content of the message * @param to mixed Optional... 'which number the message was sent to' */ public static function add($from = NULL, $message = NULL, $to = NULL) { $from = preg_replace("#[^0-9]#", "", $from); $to = preg_replace("#[^0-9]#", "", $to); if (!$from or !$message) { return "Missing Sender and/or Message"; } //Filters to allow modification of the values from the SMS gateway Event::run('ushahidi_filter.message_sms_from', $from); Event::run('ushahidi_filter.message_sms', $message); $services = new Service_Model(); $service = $services->where('service_name', 'SMS')->find(); if (!$service) { return false; } $reporter = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $from)->find(); if (!$reporter->loaded == TRUE) { // get default reporter level (Untrusted) $level = ORM::factory('level')->where('level_weight', 0)->find(); $reporter->service_id = $service->id; $reporter->level_id = $level->id; $reporter->service_userid = null; $reporter->service_account = $from; $reporter->reporter_first = null; $reporter->reporter_last = null; $reporter->reporter_email = null; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } // Save Message $sms = new Message_Model(); $sms->parent_id = 0; $sms->incident_id = 0; $sms->user_id = 0; $sms->reporter_id = $reporter->id; $sms->message_from = $from; $sms->message_to = $to; $sms->message = $message; $sms->message_type = 1; // Inbox $sms->message_date = date("Y-m-d H:i:s", time()); $sms->service_messageid = null; $sms->save(); // Notify Admin Of New Email Message $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_sms.subject'), Kohana::lang('notifications.admin_new_sms.message')); // Action::message_sms_add - SMS Received! Event::run('ushahidi_action.message_sms_add', $sms); // Auto-Create A Report if Reporter is Trusted $reporter_weight = $reporter->level->level_weight; $reporter_location = $reporter->location; if ($reporter_weight > 0 and $reporter_location) { $incident_title = text::limit_chars($message, 50, "...", false); // Create Incident $incident = new Incident_Model(); $incident->location_id = $reporter_location->id; $incident->incident_title = $incident_title; $incident->incident_description = $message; $incident->incident_date = $sms->message_date; $incident->incident_dateadd = date("Y-m-d H:i:s", time()); $incident->incident_active = 1; if ($reporter_weight == 2) { $incident->incident_verified = 1; } $incident->save(); // Update Message with Incident ID $sms->incident_id = $incident->id; $sms->save(); // Save Incident Category $trusted_categories = ORM::factory("category")->where("category_trusted", 1)->find(); if ($trusted_categories->loaded) { $incident_category = new Incident_Category_Model(); $incident_category->incident_id = $incident->id; $incident_category->category_id = $trusted_categories->id; $incident_category->save(); } } return TRUE; }
/** Function for the administrator to add feeds. */ public function add($feedtype = 'rss2') { //$this->template->header->this_page = 'feed_add'; $this->template->content = new View('feed_add'); // setup and initialize form field names $form = array('feed_name' => '', 'feed_url' => '', 'feed_active' => 1, 'feed_category' => 0); //copy the form as errors, so the errors will be stored with keys corresponding to the form field names $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(array_merge($_POST, $_FILES)); // 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('feed_name', 'required', 'length[3,200]'); $post->add_rules('feed_url', 'required'); //$post->add_rules('feed_active', 'required'); $post->add_rules('feed_category', 'required'); // echo " post->feed_active ".(isset($post->feed_active))?"True","FALSE" ; // exit(0); // Test to see if things passed the rule checks if ($post->validate()) { // STEP 2: SAVE INCIDENT $feed = new Feed_Model(); $feed->feed_name = $post->feed_name; $feed->feed_url = $post->feed_url; $feed->feed_active = isset($post->feed_active) ? 1 : 0; $feed->category_id = $post->feed_category; if (ORM::factory('feed')->where('feed_url', $post->feed_url)->count_all() == 0) { $feed->save(); } else { $errors['feed_url'] = 'This url is already in the database'; // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('report')); $form_error = TRUE; } // Notify Admin Of New Report $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_report.subject'), Kohana::lang('notifications.admin_new_report.message') . "\n\n'" . strtoupper($feed->feed_name) . "'" . "\n" . $feed->feed_url); // url::redirect('reports/thanks'); } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('report')); $form_error = TRUE; } } $this->template->content->form = $form; $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; $this->template->content->categories = $this->_get_categories($form['feed_category']); $this->template->header->render(TRUE); $this->template->content->render(TRUE); $this->template->Render(); }
/** * ADD The SMS Message Using Default Provider * @param from mixed The source/sender address * @param message mixed The text content of the message * @param to mixed Optional... 'which number the message was sent to' */ public static function add($from = NULL, $message = NULL, $to = NULL) { $from = preg_replace("#[^0-9]#", "", $from); $to = preg_replace("#[^0-9]#", "", $to); if (!$from or !$message) { return "Missing Sender and/or Message"; } //Filters to allow modification of the values from the SMS gateway Event::run('ushahidi_filter.message_sms_from', $from); Event::run('ushahidi_filter.message_sms', $message); $services = new Service_Model(); $service = $services->where('service_name', 'SMS')->find(); if (!$service) { return false; } $reporter = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $from)->find(); if (!$reporter->loaded == TRUE) { // get default reporter level (Untrusted) $level = ORM::factory('level')->where('level_weight', 0)->find(); $reporter->service_id = $service->id; $reporter->level_id = $level->id; $reporter->service_userid = null; $reporter->service_account = $from; $reporter->reporter_first = null; $reporter->reporter_last = null; $reporter->reporter_email = null; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } // Save Message $sms = new Message_Model(); $sms->parent_id = 0; $sms->incident_id = 0; $sms->user_id = 0; $sms->reporter_id = $reporter->id; $sms->message_from = $from; $sms->message_to = $to; $sms->message = $message; $sms->message_type = 1; // Inbox $sms->message_date = date("Y-m-d H:i:s", time()); $sms->service_messageid = null; $sms->save(); // Notify Admin Of New Email Message $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_sms.subject'), Kohana::lang('notifications.admin_new_sms.message')); // Action::message_sms_add - SMS Received! Event::run('ushahidi_action.message_sms_add', $sms); // Auto-Create A Report if Reporter is Trusted $reporter_weight = $reporter->level->level_weight; $reporter_location = $reporter->location; if ($reporter_weight > 0 and $reporter_location) { $incident_title = text::limit_chars($message, 50, "...", false); // Create Incident $incident = new Incident_Model(); $incident->location_id = $reporter_location->id; $incident->incident_title = $incident_title; $incident->incident_description = $message; $incident->incident_date = $sms->message_date; $incident->incident_dateadd = date("Y-m-d H:i:s", time()); $incident->incident_active = 1; if ($reporter_weight == 2) { $incident->incident_verified = 1; } $incident->save(); // Update Message with Incident ID $sms->incident_id = $incident->id; $sms->save(); // Save Incident Category $trusted_categories = ORM::factory("category")->where("category_trusted", 1)->find(); if ($trusted_categories->loaded) { $incident_category = new Incident_Category_Model(); $incident_category->incident_id = $incident->id; $incident_category->category_id = $trusted_categories->id; $incident_category->save(); } } // Add clickable report back feature. // Change delimiter to whatever is needed for sending the text aka # $delimiter = "#"; $token = strtok($message, $delimiter); $i = 0; while ($token !== false) { $str[$i] = $token; $token = strtok($delimiter); $i++; } // Redirection for mysql server $php_db = "ranjoat_Ushahidi_Web"; $myphp_db = 'ranjoat_Ushahidi_Web'; // Change these variables to the working database $addr = "127.0.0.1"; $login = "******"; $passwd = "0258"; if (strstr($str[0], "{$delimiter}.stop")) { // connect to database and find/match sms number in list of sms alerts numbers $db = mysql_connect($addr, $login, $passwd); if (!$db) { die('Could not connect: ' . mysql_error()); } mysql_select_db($php_db, $db); //when matched begin process to remove that number from the table mysql_query("DELETE FROM {$myphp_db}.`alert` WHERE `alert`.`alert_recipient` = `{$from}`"); mysql_close($db); } else { if (strstr($str[0], "{$delimiter}.report")) { if ($i == 1 && $str[0] !== false) { // When the user does not how to use the #report function // Add clickable report back feature. if (strstr($str[0], "{$delimiter}.report")) { $message = "Format for #report is: #report/# where the # is the incident id or #report/#location/keyword where location is the city and keyword used in the search."; // Edit the parameters in sms::send to work with main deployment //sms::send($to, $from, $message); sms::send($to, $from, $message); } } } } // For matching specific cases where the user knows the report ID if ($i == 2 && $str[1] !== false) { $db = mysql_connect($addr, $login, $passwd); if (!$db) { die('Could not connect: ' . mysql_error()); } mysql_select_db($php_db, $db); $new = $str[1]; $result = mysql_query("SELECT `incident`.`id`, `incident`.`incident_description` FROM `incident` WHERE `incident`.`id` = {$str['1']}"); $message = mysql_fetch_row($result); sms::send($to, $from, $message[1]); mysql_free_result($result); mysql_close($db); } return TRUE; }
private function _save_feed($feed_id, $feed_url, $feed_category, $feed_name = "none", $weight) { $feedname = $feed_name == "none" ? $feed_url : $feed_name; if (isset($feed_url) && !empty($feed_url) && $feed_url != '' && $feed_category > 0) { $feed = new Feed_Model(); //if unique url then create new else update old. $numItems = ORM::factory('feed')->where('feed_url', $feed_url)->count_all(); if ($numItems == 0 && $feed_id == 0) { $feed->feed_name = $feedname; $feed->feed_url = $feed_url; $feed->weight = $weight; $feed->category_id = $feed_category; $feed->save(); } else { if ($feed_id != 0) { $db = new Database(); $sql = " UPDATE feed SET feed_url = '" . $feed_url . "' , feed_name = '" . $feedname . "' , weight= " . $weight . "\t"; $sql .= " WHERE id = " . $feed_id; // echo $sql."<br/>"; $Result = $db->query($sql); } } $send = notifications::notify_admins("[" . Kohana::config('settings.site_name') . "] " . Kohana::lang('notifications.admin_new_report.subject'), Kohana::lang('notifications.admin_new_report.message') . "\n\n'" . strtoupper($feed->feed_name) . "'" . "\n" . $feed->feed_url); } }