/**
  * Logs an error to the database.
  *
  * @access  public
  * @param   string    $message        The log entry message.
  * @param   int       $severity       The log entry 'level.'
  * @param   array     $emails         Array of 'admin' emails.
  * @param   string    $extended_data  Additional data.
  * @return  void
  */
 public function log_error($message, $severity = 1, array $emails = array(), $extended_data = '')
 {
     if (class_exists('Omnilog_entry') && class_exists('Omnilogger')) {
         switch ($severity) {
             case 3:
                 $notify = TRUE;
                 $type = Omnilog_entry::ERROR;
                 break;
             case 2:
                 $notify = FALSE;
                 $type = Omnilog_entry::WARNING;
                 break;
             case 1:
             default:
                 $notify = FALSE;
                 $type = Omnilog_entry::NOTICE;
                 break;
         }
         $omnilog_entry = new Omnilog_entry(array('addon_name' => 'MailChimp Subscribe', 'admin_emails' => $emails, 'date' => time(), 'extended_data' => $extended_data, 'message' => $message, 'notify_admin' => $notify, 'type' => $type));
         Omnilogger::log($omnilog_entry);
     }
 }
 /**
  * Runs a demo.
  *
  * @access  public
  * @return  void
  */
 public function run_demo()
 {
     $redirect_url = $this->_base_url . AMP . 'method=demo';
     if (!file_exists(PATH_THIRD . 'omnilog/classes/omnilogger' . EXT)) {
         $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('demo_flashdata_missing_omnilogger'));
         $this->EE->functions->redirect($redirect_url);
     }
     include_once PATH_THIRD . 'omnilog/classes/omnilogger' . EXT;
     $this->EE->load->helper('email');
     $demo = $this->EE->input->get('demo');
     $emails = array();
     switch ($demo) {
         case 'log_error':
             $notify = FALSE;
             $type = Omnilog_entry::ERROR;
             break;
         case 'log_notice':
             $notify = FALSE;
             $type = Omnilog_entry::NOTICE;
             break;
         case 'log_warning':
             $notify = FALSE;
             $type = Omnilog_entry::WARNING;
             break;
         case 'notify_standard':
             $emails = array($this->EE->config->item('webmaster_email'));
             $notify = TRUE;
             $type = Omnilog_entry::ERROR;
             break;
         case 'notify_custom':
             $emails = array();
             $raw_emails = explode(',', urldecode($this->EE->input->get('email')));
             foreach ($raw_emails as $email) {
                 $emails[] = trim($email);
             }
             $notify = TRUE;
             $type = Omnilog_entry::ERROR;
             break;
         default:
             $notify = FALSE;
             $type = FALSE;
             break;
     }
     if (!$type) {
         $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('demo_flashdata_unknown_demo'));
         $this->EE->functions->redirect($redirect_url);
     }
     $omnilog_entry = new Omnilog_entry(array('addon_name' => 'OmniLog Demo', 'admin_emails' => $emails, 'date' => time(), 'message' => $this->EE->lang->line('demo_message'), 'extended_data' => $this->EE->lang->line('demo_extended_data'), 'notify_admin' => $notify, 'type' => $type));
     if (!Omnilogger::log($omnilog_entry)) {
         $this->EE->session->set_flashdata('message_failure', $this->EE->lang->line('demo_flashdata_failure'));
     } else {
         $this->EE->session->set_flashdata('message_success', $this->EE->lang->line('demo_flashdata_success'));
     }
     $this->EE->functions->redirect($redirect_url);
 }
 private function _log_core($msg, $extended = '', $severity = 1, $emails = array())
 {
     if (class_exists('Omnilog_entry') && class_exists('Omnilogger')) {
         switch ($severity) {
             case 3:
                 $notify = TRUE;
                 $type = Omnilog_entry::ERROR;
                 break;
             case 2:
                 $notify = FALSE;
                 $type = Omnilog_entry::WARNING;
                 break;
             case 1:
             default:
                 $notify = FALSE;
                 $type = Omnilog_entry::NOTICE;
                 break;
         }
         // Once we hit $max_logs it's a strict one-in, one-out policy
         $this->EE->db->from('omnilog_entries');
         $this->EE->db->where('addon_name', $this->name);
         if ($this->EE->db->count_all_results() >= $this->max_logs) {
             $this->EE->db->where('addon_name', $this->name);
             $this->EE->db->order_by('log_entry_id', 'desc');
             $query = $this->EE->db->get('omnilog_entries', 1, $this->max_logs - 1);
             if ($query->row('log_entry_id')) {
                 $this->EE->db->where('log_entry_id <=', $query->row('log_entry_id'));
                 $this->EE->db->where('addon_name', $this->name);
                 $this->EE->db->delete('omnilog_entries');
             }
         }
         $omnilog_entry = new Omnilog_entry(array('addon_name' => $this->name, 'admin_emails' => $emails, 'date' => time(), 'extended_data' => $extended, 'message' => $msg, 'notify_admin' => $notify, 'type' => $type));
         Omnilogger::log($omnilog_entry);
     }
 }
 public function test__log__notify_admin_failure()
 {
     $exception_message = 'Exception';
     $log_entry = new Omnilog_entry($this->_log_entry_props);
     $log_entry->set_notify_admin(TRUE);
     $saved_entry_props = array_merge($log_entry->to_array(), array('log_entry_id' => 10));
     $saved_entry = new Omnilog_entry($saved_entry_props);
     // $this->_model->expectOnce('save_entry_to_log', array($log_entry));
     $this->_model->expectOnce('save_entry_to_log', array('*'));
     $this->_model->setReturnValue('save_entry_to_log', $saved_entry);
     // $this->_model->expectOnce('notify_site_admin_of_log_entry',
     //  array($saved_entry));
     $this->_model->expectOnce('notify_site_admin_of_log_entry', array('*'));
     $this->_model->throwOn('notify_site_admin_of_log_entry', new Exception($exception_message));
     $this->assertIdentical(FALSE, Omnilogger::log($log_entry));
 }