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_check = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message_from)->find(); if ($reporter_check->loaded == true) { $reporter_id = $reporter_check->id; } else { // get default reporter level (Untrusted) $levels = new Level_Model(); $default_level = $levels->where('level_weight', 0)->find(); $reporter = new Reporter_Model(); $reporter->service_id = $service->id; $reporter->service_userid = null; $reporter->service_account = $message_from; $reporter->reporter_level = $default_level; $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(); $reporter_id = $reporter->id; } // 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(); } } }
/** * 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 = null; $reporter_check = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message['email'])->find(); if ($reporter_check->loaded == true) { $reporter_id = $reporter_check->id; $reporter = ORM::factory('reporter')->find($reporter_id); } else { // Add new reporter $names = explode(' ', $message['from'], 2); $last_name = ''; if (count($names) == 2) { $last_name = $names[1]; } // get default reporter level (Untrusted) $levels = new Level_Model(); $default_level = $levels->where('level_weight', 0)->find(); $reporter = new Reporter_Model(); $reporter->service_id = $service->id; $reporter->service_userid = null; $reporter->service_account = $message['email']; $reporter->reporter_level = $default_level; $reporter->reporter_first = $names[0]; $reporter->reporter_last = $last_name; $reporter->reporter_email = null; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); $reporter_id = $reporter->id; } if ($reporter->reporter_level > 1) { // 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 = null; $email->save(); } } }
public function index($service_id = 1) { $this->template->content = new View('admin/reporters'); $this->template->content->title = Kohana::lang('ui_admin.reporters'); $filter = "1=1"; $search_type = ""; $keyword = ""; // Get Search Type (If Any) if ($service_id) { $search_type = $service_id; $filter .= " AND (service_id='" . $service_id . "')"; } else { $search_type = "0"; } // Get Search Keywords (If Any) if (isset($_GET['k']) and !empty($_GET['k'])) { $keyword = $_GET['k']; $filter .= " AND (service_account LIKE'%" . $_GET['k'] . "%')"; } // setup and initialize form field names $form = array('reporter_id' => '', 'level_id' => '', 'service_name' => '', 'service_account' => '', 'location_id' => '', 'location_name' => '', 'latitude' => '', 'longitude' => ''); // copy the form as errors, so the errors will be stored with keys corresponding to the form field names $errors = $form; $form_error = FALSE; $form_saved = FALSE; $form_action = ""; // 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('action', 'required', 'alpha', 'length[1,1]'); $post->add_rules('reporter_id.*', 'required', 'numeric'); if ($post->action == 'l') { $post->add_rules('level_id', 'required', 'numeric'); } elseif ($post->action == 'a') { $post->add_rules('level_id', 'required', 'numeric'); // If any location data is provided, require all location parameters if ($post->latitude or $post->longitude or $post->location_name) { $post->add_rules('latitude', 'required', 'between[-90,90]'); // Validate for maximum and minimum latitude values $post->add_rules('longitude', 'required', 'between[-180,180]'); // Validate for maximum and minimum longitude values $post->add_rules('location_name', 'required', 'length[3,200]'); } } // Test to see if things passed the rule checks if ($post->validate()) { if ($post->action == 'd') { foreach ($post->reporter_id as $item) { // Delete Reporters Messages ORM::factory('message')->where('reporter_id', $item)->delete_all(); // Delete Reporter $reporter = ORM::factory('reporter')->find($item); $reporter->delete($item); } $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.deleted')); } elseif ($post->action == 'l') { foreach ($post->reporter_id as $item) { // Update Reporter Level $reporter = ORM::factory('reporter')->find($item); if ($reporter->loaded) { $reporter->level_id = $post->level_id; $reporter->save(); } } $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.modified')); } else { if ($post->action == 'a') { foreach ($post->reporter_id as $item) { $reporter = ORM::factory('reporter')->find($item); // SAVE Reporter only if loaded if ($reporter->loaded) { $reporter->level_id = $post->level_id; // SAVE Location if available if ($post->latitude and $post->longitude) { $location = new Location_Model($post->location_id); $location->location_name = $post->location_name; $location->latitude = $post->latitude; $location->longitude = $post->longitude; $location->location_date = date("Y-m-d H:i:s", time()); $location->save(); $reporter->location_id = $location->id; } $reporter->save(); $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.modified')); } } } } } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('reporters')); $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('reporter')->where($filter)->count_all())); $reporters = ORM::factory('reporter')->where($filter)->orderby('service_account', 'asc')->find_all((int) Kohana::config('settings.items_per_page_admin'), $pagination->sql_offset); $this->template->content->form = $form; $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; $this->template->content->pagination = $pagination; $this->template->content->total_items = $pagination->total_items; $this->template->content->reporters = $reporters; $this->template->content->service_id = $service_id; $this->template->content->search_type = $search_type; $search_type_array = Service_Model::get_array(); $search_type_array[0] = "All"; asort($search_type_array); $this->template->content->search_type_array = $search_type_array; $this->template->content->keyword = $keyword; $levels = ORM::factory('level')->orderby('level_weight')->find_all(); $this->template->content->levels = $levels; // Level and Service Arrays $this->template->content->level_array = Level_Model::get_array(); $this->template->content->service_array = Service_Model::get_array(); // Javascript Header $this->template->map_enabled = TRUE; $this->template->js = new View('admin/reporters_js'); $this->template->js->default_map = Kohana::config('settings.default_map'); $this->template->js->default_zoom = Kohana::config('settings.default_zoom'); $this->template->js->latitude = Kohana::config('settings.default_lat'); $this->template->js->longitude = Kohana::config('settings.default_lon'); $this->template->js->form_error = $form_error; }
function levels() { $this->template->content = new View('admin/levels'); $this->template->content->title = Kohana::lang('ui_admin.reporter_levels'); // setup and initialize form field names $form = array('level_id' => '', 'level_title' => '', 'level_description' => '', 'level_weight' => ''); // copy the form as errors, so the errors will be stored with keys corresponding to the form field names $errors = $form; $form_error = FALSE; $form_saved = FALSE; $form_action = ""; // 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); if ($post->action == 'a') { // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('level_title', 'required', 'length[3,80]'); $post->add_rules('level_description', 'required'); $post->add_rules('level_weight', 'required'); } // Test to see if things passed the rule checks if ($post->validate()) { $level_id = $post->level_id; $level = new Level_Model($level_id); if ($post->action == 'd') { $level->delete($level_id); $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.deleted')); } else { if ($post->action == 'a') { // SAVE Category $level->level_title = $post->level_title; $level->level_description = $post->level_description; $level->level_weight = $post->level_weight; $level->save(); $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.added_edited')); } } } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('level')); $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('level')->count_all())); $levels = ORM::factory('level')->orderby('level_weight', 'asc')->find_all((int) Kohana::config('settings.items_per_page_admin'), $pagination->sql_offset); $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; $this->template->content->pagination = $pagination; $this->template->content->total_items = $pagination->total_items; $this->template->content->levels = $levels; }
/** * Adds hash tweets in JSON format to the database and saves the sender as a new * Reporter if they don't already exist * @param string $data - Twitter JSON results */ private function add_hash_tweets($data) { $services = new Service_Model(); $service = $services->where('service_name', 'Twitter')->find(); if (!$service) { return; } $tweets = json_decode($data, false); if (!$tweets) { return; } if (isset($tweets->{'error'})) { return; } $tweet_results = $tweets->{'results'}; foreach ($tweet_results as $tweet) { $reporter_check = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $tweet->{'from_user'})->find(); if ($reporter_check->loaded == true) { $reporter_id = $reporter_check->id; } else { // get default reporter level (Untrusted) $levels = new Level_Model(); $default_level = $levels->where('level_weight', 0)->find(); $reporter = new Reporter_Model(); $reporter->service_id = $service->id; $reporter->service_userid = null; $reporter->service_account = $tweet->{'from_user'}; $reporter->reporter_level = $default_level; $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(); $reporter_id = $reporter->id; } if (count(ORM::factory('message')->where('service_messageid', $tweet->{'id'})->find_all()) == 0) { // Save Tweet as 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 = $tweet->{'from_user'}; $message->message_to = null; $message->message = $tweet->{'text'}; $message->message_type = 1; // Inbox $tweet_date = date("Y-m-d H:i:s", strtotime($tweet->{'created_at'})); $message->message_date = $tweet_date; $message->service_messageid = $tweet->{'id'}; $message->save(); } } }
function reporters() { $this->template->content = new View('admin/reporters'); $this->template->content->title = 'Reporters'; // setup and initialize form field names $form = array('reporter_id' => '', 'service_id' => '', 'service_userid' => '', 'service_account' => '', 'reporter_level' => '', 'reporter_first' => '', 'reporter_last' => '', 'reporter_email' => '', 'reporter_phone' => '', 'reporter_ip' => '', 'reporter_date' => ''); // copy the form as errors, so the errors will be stored with keys corresponding to the form field names $errors = $form; $form_error = FALSE; $form_saved = FALSE; $form_action = ""; // 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); if ($post->action == 'a') { // Add some rules, the input field, followed by a list of checks, carried out in order $post->add_rules('service_id', 'required'); // we also require either service_userid or service_account, not necessarily both } // Test to see if things passed the rule checks if ($post->validate()) { $reporter_id = $post->reporter_id; $reporter = new Reporter_Model($reporter_id); if ($post->action == 'd') { $level->delete($level_id); $form_saved = TRUE; $form_action = "DELETED"; } else { if ($post->action == 'a') { // SAVE Reporter $reporter->service_id = $post->service_id; /*$reporter->service_userid = $post->service_userid; $reporter->service_account = $post->service_account;*/ $reporter->reporter_level = $post->reporter_level; /*$reporter->reporter_first = $post->reporter_first; $reporter->reporter_last = $post->reporter_last; $reporter->reporter_email = $post->reporter_email; $reporter->reporter_phone = $post->reporter_phone; $reporter->reporter_ip = $post->reporter_ip; $reporter->reporter_date = $post->reporter_date;*/ $reporter->save(); $form_saved = TRUE; $form_action = "ADDED/EDITED"; } } } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('level')); $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('reporter')->count_all())); $reporters = ORM::factory('reporter')->orderby('reporter_first', 'asc')->find_all((int) Kohana::config('settings.items_per_page_admin'), $pagination->sql_offset); $this->template->content->form = $form; $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; $this->template->content->pagination = $pagination; $this->template->content->total_items = $pagination->total_items; $this->template->content->reporters = $reporters; // Level and Service Arrays $this->template->content->level_array = Level_Model::get_array(); $this->template->content->service_array = Service_Model::get_array(); }
/** * Add Edit Reporter Levels */ public function levels() { $this->template->content = new View('admin/levels'); $this->template->content->title = Kohana::lang('ui_admin.reporter_levels'); // setup and initialize form field names $form = array('level_id' => '', 'level_title' => '', 'level_description' => '', 'level_weight' => ''); // Copy the form as errors, so the errors will be stored with keys corresponding to the form field names $errors = $form; $form_error = FALSE; $form_saved = FALSE; $form_action = ""; // Check, has the form been submitted, if so, setup validation if ($_POST) { // Level_Model instance for the opertation $level = (isset($_POST['level_id']) and Level_Model::is_valid_level($_POST['level_id'])) ? new Level_Model($_POST['level_id']) : new Level_Model(); if ($_POST['action'] == 'a') { // Manually extract the data to be validated $data = arr::extract($_POST, 'level_title', 'level_description', 'level_weight'); if ($level->validate($data)) { $level->save(); $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.added_edited')); } else { // Repopulate the form fields $form = arr::overwrite($form, $data->as_array()); // Ropulate the error fields, if any $errors = arr::overwrite($errors, $data->errors('level')); $form_error = TRUE; } } elseif ($_POST['action'] == 'd') { if ($level->loaded) { // Levels are tied to reporters, therefore nullify // @todo Reporter_Model::delink_level($level_id) $level->delete(); $form_saved = TRUE; $form_action = strtoupper(Kohana::lang('ui_admin.deleted')); } } } // Pagination $pagination = new Pagination(array('query_string' => 'page', 'items_per_page' => $this->items_per_page, 'total_items' => ORM::factory('level')->count_all())); $levels = ORM::factory('level')->orderby('level_weight', 'asc')->find_all($this->items_per_page, $pagination->sql_offset); $this->template->content->errors = $errors; $this->template->content->form_error = $form_error; $this->template->content->form_saved = $form_saved; $this->template->content->form_action = $form_action; $this->template->content->pagination = $pagination; $this->template->content->total_items = $pagination->total_items; $this->template->content->levels = $levels; }
/** * Adds tweets in JSON format to the database and saves the sender as a new * Reporter if they don't already exist unless the message is a TWitter Search result * @param string $data - Twitter JSON results */ private function add_json_tweets($data) { $services = new Service_Model(); $service = $services->where('service_name', 'Twitter')->find(); if (!$service) { return false; } $tweets = json_decode($data, false); if (!$tweets) { return false; } if (array_key_exists('results', $tweets)) { $tweets = $tweets->{'results'}; } foreach ($tweets as $tweet) { $tweet_user = null; if (array_key_exists('user', $tweet)) { $tweet_user = $tweet->{'user'}; } //XXX For Twitter Search, should we curl Twitter for a full tweet? $reporter = null; if ($tweet_user) { $reporter_model = new Reporter_Model(); $reporters = $reporter_model->where('service_id', $service->id)->where('service_userid', $tweet_user->{'id'})->find_all(); if (count($reporters) < 1) { // Add new reporter $names = explode(' ', $tweet_user->{'name'}, 2); $last_name = ''; if (count($names) == 2) { $last_name = $names[1]; } // get default reporter level (Untrusted) $levels = new Level_Model(); $default_level = $levels->where('level_weight', 0)->find(); $reporter = new Reporter_Model(); $reporter->service_id = $service->id; $reporter->service_userid = $tweet_user->{'id'}; $reporter->service_account = $tweet_user->{'screen_name'}; $reporter->reporter_level = $default_level; $reporter->reporter_first = $names[0]; $reporter->reporter_last = $last_name; $reporter->reporter_email = null; $reporter->reporter_phone = null; $reporter->reporter_ip = null; $reporter->reporter_date = date('Y-m-d'); $reporter->save(); } else { // reporter already exists $reporter = $reporters[0]; } } if (count(ORM::factory('message')->where('service_messageid', $tweet->{'id'})->find_all()) == 0) { // Save Tweet as Message $message = new Message_Model(); $message->parent_id = 0; $message->incident_id = 0; $message->user_id = 0; if ($reporter) { $message->reporter_id = $reporter->id; } else { $message->reporter_id = 0; } if ($tweet_user) { $message->message_from = $tweet_user->{'screen_name'}; } elseif (array_key_exists('from_user', $tweet)) { // Twitter Search tweets $message->message_from = $tweet->{'from_user'}; } $message->message_to = null; $message->message = $tweet->{'text'}; $message->message_detail = null; $message->message_type = 1; // Inbox $tweet_date = date("Y-m-d H:i:s", strtotime($tweet->{'created_at'})); $message->message_date = $tweet_date; $message->service_messageid = $tweet->{'id'}; $message->save(); } } return true; }
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_check = ORM::factory('reporter')->where('service_id', $service->id)->where('service_account', $message_from)->find(); if ($reporter_check->loaded == true) { $reporter_id = $reporter_check->id; } else { // get default reporter level (Untrusted) $levels = new Level_Model(); $default_level = $levels->where('level_weight', 0)->find(); $reporter = new Reporter_Model(); $reporter->service_id = $service->id; $reporter->service_userid = null; $reporter->service_account = $message_from; $reporter->reporter_level = $default_level; $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(); $reporter_id = $reporter->id; } $rest = $this->getsms($message_description); if ($rest['incidencia'] != '') { if ($coord = $this->gettextaddress($rest['localidad'] . ', mexico')) { // STEP 1: SAVE LOCATION $location = new Location_Model(''); $location->location_name = $coord['textaddress']; $location->country_id = 157; //Mexico $location->latitude = $coord['latitude']; $location->longitude = $coord['longitude']; $location->location_date = date("Y-m-d H:i:s", time()); $location->save(); $locationid = $location->id; } else { $locationid = 0; } // STEP 2: SAVE INCIDENT $incident = new Incident_Model(''); $incident->location_id = $locationid; //$incident->locale = $post->locale; $incident->form_id = 1; $incident->user_id = 0; $incident->incident_title = $rest['mensaje']; $incident->incident_description = $rest['mensaje']; $incident->incident_date = date("Y-m-d H:i:s", time()); $incident->incident_dateadd = date("Y-m-d H:i:s", time()); $incident->incident_mode = 2; // Incident Evaluation Info $incident->incident_active = 0; $incident->incident_verified = 0; $incident->incident_source = null; $incident->incident_information = null; //Save $incident->save(); $incidentid = $incident->id; // STEP 3: SAVE CATEGORIES $incident_category = new Incident_Category_Model(); $incident_category->incident_id = $incident->id; $incident_category->category_id = $rest['incidencia']; $incident_category->save(); } else { $incidentid = 0; } // Save Message $message = new Message_Model(); $message->parent_id = 0; $message->incident_id = $incidentid; $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(); } } }