Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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')));
         }
     }
 }
Пример #3
0
<?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);
}