/** * Site Settings */ public function site() { $this->template->content = new View('admin/settings/site'); $this->template->content->title = Kohana::lang('ui_admin.settings'); $this->themes->js = new View('admin/settings/site_js'); // setup and initialize form field names $form = array('site_name' => '', 'site_tagline' => '', 'banner_image' => '', 'delete_banner_image' => '', 'site_email' => '', 'alerts_email' => '', 'site_language' => '', 'site_timezone' => '', 'site_message' => '', 'site_copyright_statement' => '', 'site_submit_report_message' => '', 'site_contact_page' => '', 'items_per_page' => '', 'items_per_page_admin' => '', 'blocks_per_row' => '', 'allow_alerts' => '', 'allow_reports' => '', 'allow_comments' => '', 'allow_feed' => '', 'allow_stat_sharing' => '', 'cache_pages' => '', 'cache_pages_lifetime' => '', 'private_deployment' => '', 'manually_approve_users' => '', 'require_email_confirmation' => '', 'checkins' => '', 'google_analytics' => '', 'api_akismet' => ''); // 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; // 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 = new Validation($_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('site_name', 'required', 'length[3,250]'); $post->add_rules('site_tagline', 'length[3,250]'); $post->add_rules('site_email', 'email', 'length[4,100]'); //$post->add_rules('alerts_email','required', 'email', 'length[4,100]'); //$post->add_rules('site_message', 'standard_text'); $post->add_rules('site_copyright_statement', 'length[4,600]'); $post->add_rules('site_language', 'required', 'length[2, 5]'); //$post->add_rules('site_timezone','required', 'between[10,50]'); $post->add_rules('site_contact_page', 'required', 'between[0,1]'); $post->add_rules('items_per_page', 'required', 'between[5,50]'); $post->add_rules('items_per_page_admin', 'required', 'between[5,50]'); $post->add_rules('blocks_per_row', 'required', 'numeric'); $post->add_rules('allow_alerts', 'required', 'between[0,1]'); $post->add_rules('allow_reports', 'required', 'between[0,1]'); $post->add_rules('allow_comments', 'required', 'between[0,2]'); $post->add_rules('allow_feed', 'required', 'between[0,1]'); $post->add_rules('allow_stat_sharing', 'required', 'between[0,1]'); $post->add_rules('cache_pages', 'required', 'between[0,1]'); $post->add_rules('cache_pages_lifetime', 'required', 'in_array[60,300,600,900,1800]'); $post->add_rules('private_deployment', 'required', 'between[0,1]'); $post->add_rules('manually_approve_users', 'required', 'between[0,1]'); $post->add_rules('require_email_confirmation', 'required', 'between[0,1]'); $post->add_rules('checkins', 'required', 'between[0,1]'); $post->add_rules('google_analytics', 'length[0,20]'); $post->add_rules('api_akismet', 'length[0,100]', 'alpha_numeric'); // Add rules for file upload $files = Validation::factory($_FILES); $files->add_rules('banner_image', 'upload::valid', 'upload::type[gif,jpg,jpeg,png]', 'upload::size[250K]'); // Test to see if things passed the rule checks if ($post->validate() and $files->validate(FALSE)) { // Yes! everything is valid Settings_Model::save_all($post); // Deal with banner image now // Check if deleting or updating a new image (or doing nothing) if (isset($post->delete_banner_image) and $post->delete_banner_image == 1) { // Delete old badge image ORM::factory('media')->delete(Settings_Model::get_setting('site_banner_id')); // Remove from DB table Settings_Model::save_setting('site_banner_id', NULL); } else { // We aren't deleting, so try to upload if we are uploading an image $filename = upload::save('banner_image'); if ($filename) { $new_filename = "banner_" . time(); $file_type = strrev(substr(strrev($filename), 0, 4)); // Large size $l_name = $new_filename . $file_type; Image::factory($filename)->save(Kohana::config('upload.directory', TRUE) . $l_name); // Medium size $m_name = $new_filename . "_m" . $file_type; Image::factory($filename)->resize(80, 80, Image::HEIGHT)->save(Kohana::config('upload.directory', TRUE) . $m_name); // Thumbnail $t_name = $new_filename . "_t" . $file_type; Image::factory($filename)->resize(60, 60, Image::HEIGHT)->save(Kohana::config('upload.directory', TRUE) . $t_name); // Name the files for the DB $media_link = $l_name; $media_medium = $m_name; $media_thumb = $t_name; // Okay, now we have these three different files on the server, now check to see // if we should be dropping them on the CDN if (Kohana::config("cdn.cdn_store_dynamic_content")) { $media_link = cdn::upload($media_link); $media_medium = cdn::upload($media_medium); $media_thumb = cdn::upload($media_thumb); // We no longer need the files we created on the server. Remove them. $local_directory = rtrim(Kohana::config('upload.directory', TRUE), '/') . '/'; unlink($local_directory . $l_name); unlink($local_directory . $m_name); unlink($local_directory . $t_name); } // Remove the temporary file unlink($filename); // Save banner image in the media table $media = new Media_Model(); $media->media_type = 1; // Image $media->media_link = $media_link; $media->media_medium = $media_medium; $media->media_thumb = $media_thumb; $media->media_date = date("Y-m-d H:i:s", time()); $media->save(); // Save new banner image in settings Settings_Model::save_setting('site_banner_id', $media->id); } } // Delete Settings Cache $this->cache->delete('settings'); $this->cache->delete_tag('settings'); // Everything is A-Okay! $form_saved = TRUE; // Action::site_settings_modified - Site settings have changed Event::run('ushahidi_action.site_settings_modified'); // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); } else { // repopulate the form fields $form = arr::overwrite($form, $post->as_array()); // populate the error fields, if any if (is_array($files->errors()) and count($files->errors()) > 0) { // Error with file upload $errors = arr::overwrite($errors, $files->errors('settings')); } else { // Error with other form filed $errors = arr::overwrite($errors, $post->errors('settings')); } $form_error = TRUE; } } else { $settings = Settings_Model::get_array(); $form = array('site_name' => $settings['site_name'], 'site_tagline' => $settings['site_tagline'], 'site_banner_id' => $settings['site_banner_id'], 'site_email' => $settings['site_email'], 'alerts_email' => $settings['alerts_email'], 'site_message' => $settings['site_message'], 'site_copyright_statement' => $settings['site_copyright_statement'], 'site_submit_report_message' => $settings['site_submit_report_message'], 'site_language' => $settings['site_language'], 'site_timezone' => $settings['site_timezone'], 'site_contact_page' => $settings['site_contact_page'], 'items_per_page' => $settings['items_per_page'], 'items_per_page_admin' => $settings['items_per_page_admin'], 'blocks_per_row' => $settings['blocks_per_row'], 'allow_alerts' => $settings['allow_alerts'], 'allow_reports' => $settings['allow_reports'], 'allow_comments' => $settings['allow_comments'], 'allow_feed' => $settings['allow_feed'], 'allow_stat_sharing' => $settings['allow_stat_sharing'], 'cache_pages' => $settings['cache_pages'], 'cache_pages_lifetime' => $settings['cache_pages_lifetime'], 'private_deployment' => $settings['private_deployment'], 'manually_approve_users' => $settings['manually_approve_users'], 'require_email_confirmation' => $settings['require_email_confirmation'], 'checkins' => $settings['checkins'], 'google_analytics' => $settings['google_analytics'], 'api_akismet' => $settings['api_akismet']); } // Get banner image if (($site_banner_id = Settings_Model::get_setting('site_banner_id')) !== NULL) { $banner = ORM::factory('media')->find($site_banner_id); $this->template->content->banner = url::convert_uploaded_to_abs($banner->media_link); $this->template->content->banner_m = url::convert_uploaded_to_abs($banner->media_medium); $this->template->content->banner_t = url::convert_uploaded_to_abs($banner->media_thumb); } else { $this->template->content->banner = NULL; $this->template->content->banner_m = NULL; $this->template->content->banner_t = NULL; } $this->themes->colorpicker_enabled = TRUE; $this->themes->slider_enabled = TRUE; $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->items_per_page_array = array('5' => '5 Items', '10' => '10 Items', '20' => '20 Items', '30' => '30 Items', '50' => '50 Items'); $blocks_per_row_array = array(); for ($i = 1; $i <= 21; $i++) { $blocks_per_row_array[$i] = $i; } $this->template->content->blocks_per_row_array = $blocks_per_row_array; $this->template->content->yesno_array = array('1' => utf8::strtoupper(Kohana::lang('ui_main.yes')), '0' => utf8::strtoupper(Kohana::lang('ui_main.no'))); $this->template->content->comments_array = array('1' => utf8::strtoupper(Kohana::lang('ui_main.yes') . " - " . Kohana::lang('ui_admin.approve_auto')), '2' => utf8::strtoupper(Kohana::lang('ui_main.yes') . " - " . Kohana::lang('ui_admin.approve_manual')), '0' => utf8::strtoupper(Kohana::lang('ui_main.no'))); $this->template->content->cache_pages_lifetime_array = array('60' => '1 ' . Kohana::lang('ui_admin.minute'), '300' => '5 ' . Kohana::lang('ui_admin.minutes'), '600' => '10 ' . Kohana::lang('ui_admin.minutes'), '900' => '15 ' . Kohana::lang('ui_admin.minutes'), '1800' => '30 ' . Kohana::lang('ui_admin.minutes')); //Generate all timezones $site_timezone_array = array(); $site_timezone_array[0] = Kohana::lang('ui_admin.server_time'); foreach (timezone_identifiers_list() as $timezone) { $site_timezone_array[$timezone] = $timezone; } $this->template->content->site_timezone_array = $site_timezone_array; // Generate Available Locales $locales = ush_locale::get_i18n(TRUE); $this->template->content->locales_array = $locales; $this->cache->set('locales', $locales, array('locales'), 604800); }
/** * Send A New Message Using Default SMS Provider */ public function send() { $this->template = ""; $this->auto_render = FALSE; // Setup and initialize form field names $form = array('to_id' => '', 'message' => ''); // 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 = new Validation($_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('to_id', 'required', 'numeric'); $post->add_rules('message', 'required', 'length[1,160]'); // Test to see if things passed the rule checks if ($post->validate()) { // Yes! everything is valid $reply_to = ORM::factory('message', $post->to_id); if ($reply_to->loaded == true) { // Yes! Replyto Exists // This is the message we're replying to $sms_to = $reply_to->message_from; //checks if the number is encrypted if (preg_match("/([a-zA-Z])(\\D)/", $sms_to)) { $this->decrypter = new Encrypt(); $sms_to = $this->decrypter->decode($sms_to); } else { $sms_to = $sms_to; } // Load Users Settings $settings = Settings_Model::get_array(); if (!empty($settings)) { // Get SMS Numbers if (!empty($settings['sms_no1'])) { $sms_from = $settings['sms_no1']; } elseif (!empty($settings['sms_no2'])) { $sms_from = $settings['sms_no2']; } elseif (!empty($settings['sms_no3'])) { $sms_from = $settings['sms_no3']; } else { // User needs to set up an SMS number $sms_from = "000"; } // Send Message $response = sms::send($sms_to, $sms_from, $post->message); // Message Went Through?? if ($response === TRUE) { $message = ORM::factory('message'); $message->parent_id = $post->to_id; // The parent message $message->message_from = $sms_from; $message->message_to = $sms_to; $message->message = $post->message; $message->message_type = 2; // This is an outgoing message $message->reporter_id = $reply_to->reporter_id; $message->message_date = date("Y-m-d H:i:s", time()); $message->save(); echo json_encode(array("status" => "sent", "message" => Kohana::lang('ui_admin.message_sent'))); } else { // Message Failed echo json_encode(array("status" => "error", "message" => Kohana::lang('ui_admin.error_msg') . " - " . $response)); } } else { echo json_encode(array("status" => "error", "message" => Kohana::lang('ui_admin.error_msg') . Kohana::lang('ui_admin.check_sms_settings'))); } } else { // Send_To Mobile Number Doesn't Exist echo json_encode(array("status" => "error", "message" => Kohana::lang('ui_admin.error_msg') . Kohana::lang('ui_admin.check_number'))); } } else { // Populate the error fields, if any $errors = arr::overwrite($errors, $post->errors('messages')); echo json_encode(array("status" => "error", "message" => Kohana::lang('ui_admin.error_msg') . Kohana::lang('ui_admin.check_message_valid'))); } } }
<?php defined('SYSPATH') or die('No direct script access.'); /** * Default Settings From Database */ // Retrieve Cached Settings $cache = Cache::instance(); $subdomain = Kohana::config('settings.subdomain'); $settings = $cache->get($subdomain . '_settings'); if (!$settings or !is_array($settings)) { // Cache is Empty so Re-Cache $settings = Settings_Model::get_array(); $cache->set($subdomain . '_settings', $settings, array('settings'), 60); // 1 Day } // Set Site Language Kohana::config_set('locale.language', $settings['site_language']); ush_locale::detect_language(); // Copy everything into kohana config settings.XYZ foreach ($settings as $key => $setting) { Kohana::config_set('settings.' . $key, $setting); } // Set Site Timezone if (function_exists('date_default_timezone_set')) { $timezone = isset($settings['site_timezone']) ? $settings['site_timezone'] : null; // Set default timezone, due to increased validation of date settings // which cause massive amounts of E_NOTICEs to be generated in PHP 5.2+ date_default_timezone_set(empty($timezone) ? date_default_timezone_get() : $timezone); Kohana::config_set('settings.site_timezone', $timezone); }