Esempio n. 1
0
 public function getTrackerStats()
 {
     $data = array('datasets' => array());
     $start = Request::get('start', 'int') ?: -30;
     $end = Request::get('end', 'int') ?: 0;
     $sub_id = -1;
     $user_id = -1;
     $tracker = NULL;
     foreach ($_GET['sets'] as $set) {
         $tracker = isset($set['tracker']) ? intval($set['tracker']) : $tracker;
         $sub_id = isset($set['sub_id']) ? intval($set['sub_id']) : $sub_id;
         $user_id = isset($set['user_id']) ? intval($set['user_id']) : $user_id;
         if (empty($tracker)) {
             throw new \Exception('Invalid tracker');
         }
         $data['datasets'][] = array('data' => array_values(Tracker::getHistory($tracker, $start, $end, $sub_id, $user_id)), 'label' => Tracker::getName($tracker));
     }
     $data['labels'] = array();
     $start += Time::today();
     $end += Time::today();
     for ($i = $start; $i <= $end; $i++) {
         $data['labels'][] = jdtogregorian($i);
     }
     Output::json($data);
 }
Esempio n. 2
0
 public function getGetData()
 {
     $start = Request::get('start', 'int', null, -30);
     $end = Request::get('end', 'int', null, 0);
     $message_id = Request::get('message_id', 'int');
     $tracker = new Tracker();
     $email_sent = $tracker->getHistory(Tracker::getTrackerId('Email Sent'), $start, $end, $message_id);
     $email_bounced = $tracker->getHistory(Tracker::getTrackerId('Email Bounced'), $start, $end, $message_id);
     $email_opened = $tracker->getHistory(Tracker::getTrackerId('Email Opened'), $start, $end, $message_id);
     $data = new ChartData(Time::today() + $start, Time::today() + $end);
     $data->addDataSet($email_sent, 'Sent');
     $data->addDataSet($email_bounced, 'Bounced');
     $data->addDataSet($email_opened, 'Opened');
     $data->setXLabels(array_map('jdtogregorian', range(Time::today() + $start, Time::today() + $end)));
     $data->output();
 }
Esempio n. 3
0
 public function execute($job)
 {
     $mailer = new MailerTool();
     $date = new DateTime();
     $time = $date->getTimestamp();
     $start = $job['last_start'] + $date->getOffset();
     $end = $time + $date->getOffset();
     // Load all messages that should be sent on a specific date.
     $messages = Database::getInstance()->selectColumn('message', 'message_id', ['send_date' => ['BETWEEN', $start, $end]]);
     foreach ($messages as $message_id) {
         $start_time = time();
         $this->out("Sending message {$message_id}");
         $count = $mailer->sendBulk($message_id, false, true);
         $time = Time::formatLength(time() - $start_time);
         $this->out("Message {$message_id} sent to {$count} users in {$time}");
     }
 }
Esempio n. 4
0
 /**
  * Insert a new user if he doesn't already exist.
  *
  * @param string $email
  *   The new email
  * @param string $pass
  *   The new password
  * @param string $first_name
  *   The first name
  * @param string $last_name
  *   The last name.
  *
  * @return integer
  *   The new user's ID.
  */
 protected static function insertUser($email, $pass = NULL, $first_name = '', $last_name = '')
 {
     $user_details = array('email' => Scrub::email(strtolower($email)), 'first' => $first_name, 'last' => $last_name, 'created' => Time::today(), 'confirmed' => static::requiresConfirmation() ? static::UNCONFIRMED : static::CONFIRMED, 'type' => 0, 'referrer' => 0);
     if ($pass) {
         $salt = static::getSalt();
         $user_details['password'] = static::passHash($pass, $salt);
         $user_details['salt'] = bin2hex($salt);
         $user_details['registered'] = Time::today();
     }
     return Database::getInstance()->insert('user', $user_details);
 }
Esempio n. 5
0
 public static function date($name, $settings = array())
 {
     $content = Database::getInstance()->selectRow($settings['table'], array($settings['key'] => $settings['id']), array($settings['column']));
     if ($content) {
         $value = $content[$settings['column']];
     } else {
         $value = '';
     }
     if (ClientUser::getInstance()->isAdmin()) {
         JS::startup('lightning.cms.initDate()');
         JS::set('token', Session::getInstance()->getToken());
         return '<img src="/images/lightning/pencil.png" class="cms_edit_date icon-16" id="cms_edit_' . $settings['id'] . '">' . '<img src="/images/lightning/save.png" class="cms_save_date icon-16" id="cms_save_' . $settings['id'] . '" style="display:none">' . '<span id="cms_' . $settings['id'] . '" style="display:none">' . Time::datePop('cms_' . $settings['id'], $value, 'true', 0) . '</span>' . '<input type="hidden" id="cms_key_' . $settings['id'] . '" value="' . $settings['key'] . '" />' . '<input type="hidden" id="cms_column_' . $settings['id'] . '" value="' . $settings['column'] . '" />' . '<input type="hidden" id="cms_table_' . $settings['id'] . '" value="' . $settings['table'] . '" />';
     } else {
         return $value;
     }
 }
Esempio n. 6
0
 public static function getHistoryAllSubIDs($tracker, $start = -30, $end = 0, $user_id = -1)
 {
     // Start the criteria with tracker id.
     if (is_array($tracker)) {
         $criteria = array('tracker_id' => array('IN', $tracker));
     } else {
         $criteria = array('tracker_id' => $tracker);
     }
     // Filter by date range.
     $start = Time::today() + $start;
     $end = Time::today() + $end;
     $criteria['date'] = array('BETWEEN', $start, $end);
     // Add the user ID if required.
     if ($user_id != -1) {
         $criteria['user_id'] = $user_id;
     }
     // Run the query.
     $results = Database::getInstance()->select('tracker_event', $criteria, array('y' => array('expression' => 'COUNT(*)'), 'x' => 'date', 'set' => 'sub_id'), 'GROUP BY date, sub_id');
     $data = new ChartData($start, $end);
     $data->createDataSets($results);
     return $data->getData();
 }
Esempio n. 7
0
 /**
  * Render the edit field component.
  *
  * @param array $field
  *   The field settings.
  * @param array $row
  *   The data row.
  *
  * @return string
  *   The rendered HTML.
  */
 protected function renderEditField($field, &$row = array())
 {
     // Make sure the form_field is set.
     if (!isset($field['form_field'])) {
         $field['form_field'] = $field['field'];
     }
     // Get the default field value.
     if (!empty($_POST)) {
         $v = Request::post($field['form_field']);
     } elseif (empty($row)) {
         $v = isset($field['default']) ? $field['default'] : '';
     } elseif (isset($field['edit_value'])) {
         if (is_callable($field['edit_value'])) {
             $v = $row[] = $field['edit_value']($row);
         } else {
             $v = $row[] = $field['edit_value'];
         }
     } elseif (!empty($row[$field['field']])) {
         $v = $row[$field['field']];
     }
     if (isset($this->preset[$field['field']]['render_' . $this->action . '_field'])) {
         $this->get_row(false);
         return $this->preset[$field['field']]['render_' . $this->action . '_field']($this->list);
     }
     // Prepare value.
     if (!isset($field['Value'])) {
         $field['Value'] = isset($v) ? $v : null;
     }
     if (!empty($field['encrypted'])) {
         $field['Value'] = $this->decrypt($field['Value']);
     }
     // Set the default value if new.
     if ($this->action == "new" && isset($field['default'])) {
         $field['Value'] = $field['default'];
     }
     // Print form input.
     $options = array();
     $return = '';
     switch (preg_replace('/\\([0-9]+\\)/', '', $field['type'])) {
         case 'text':
         case 'mediumtext':
         case 'longtext':
         case 'html':
             $config = array();
             $editor = !empty($field['editor']) ? strtolower($field['editor']) : 'default';
             switch ($editor) {
                 case 'full':
                     $config['toolbar'] = "CKEDITOR.config.toolbar_Full";
                     break;
                 case 'print':
                     $config['toolbar'] = "CKEDITOR.config.toolbar_Print";
                     break;
                 case 'basic_image':
                     $config['toolbar'] = "CKEDITOR.config.toolbar_Basic_Image";
                     break;
                 case 'basic':
                 default:
                     $config['toolbar'] = "CKEDITOR.config.toolbar_Basic";
                     break;
             }
             if (!empty($field['full_page'])) {
                 $config['fullPage'] = true;
                 $config['allowedContent'] = true;
             }
             if (!empty($field['height'])) {
                 $config['height'] = $field['height'];
             }
             if (!empty($field['upload'])) {
                 $config['finder'] = true;
             }
             return CKEditor::iframe($field['form_field'], $field['Value'], $config);
             break;
         case 'div':
             if ($field['Value'] == '') {
                 $field['Value'] = "<p></p>";
             }
             return "<input type='hidden' name='{$field['form_field']}' id='{$field['form_field']}' value='" . $this->convert_quotes($field['Value']) . "' />\n\t\t\t\t\t\t\t<div id='{$field['form_field']}_div' spellcheck='true'>{$field['Value']}</div>";
             break;
         case 'plaintext':
             return "<textarea name='{$field['form_field']}' id='{$field['form_field']}' spellcheck='true' cols='90' rows='10'>{$field['Value']}</textarea>";
             break;
         case 'hidden':
             return "<input type='hidden' name='{$field['form_field']}' id='{$field['form_field']}' value='" . $this->convert_quotes($field['Value']) . "' />";
             break;
         case 'image':
             if (!empty($field['Value'])) {
                 $return .= '<img src="' . $this->getImageLocationWeb($field, $field['Value']) . '" class="table_edit_image" />';
             }
             // Fall through.
         // Fall through.
         case 'file':
             if ($field['Value'] != '' && (!isset($field['replaceable']) || empty($field['replaceable'])) || $field['Value'] == '') {
                 $return .= "<input type='file' name='{$field['form_field']}' id='{$field['form_field']}' />";
             }
             return $return;
             break;
         case 'time':
             return Time::timePop($field['form_field'], $field['Value'], !empty($field['allow_blank']));
             break;
         case 'date':
             $return = Time::datePop($field['form_field'], !empty($field['Value']) ? $field['Value'] : 0, !empty($field['allow_blank']), !empty($field['start_year']) ? $field['start_year'] : 0);
             return $return;
             break;
         case 'datetime':
             return Time::dateTimePop($field['form_field'], $field['Value'], !empty($field['allow_blank']), isset($field['start_year']) ? $field['start_year'] : date('Y') - 10);
             break;
         case 'lookup':
         case 'yesno':
         case 'state':
         case 'country':
         case 'select':
             if ($field['type'] == 'lookup') {
                 $options = Database::getInstance()->selectColumn($field['lookuptable'], $field['display_column'], !empty($field['filter']) ? $field['filter'] : array(), !empty($field['lookupkey']) ? $field['lookupkey'] : $field['field']);
             } elseif ($field['type'] == "yesno") {
                 $options = array(1 => 'No', 2 => 'Yes');
             } elseif ($field['type'] == "state") {
                 $options = Location::getStateOptions();
             } elseif ($field['type'] == "country") {
                 $options = Location::getCountryOptions();
             } else {
                 $options = $field['options'];
             }
             if (!is_array($options)) {
                 return false;
             }
             if (!empty($field['allow_blank'])) {
                 $options = array('' => '') + $options;
             }
             $output = BasicHTML::select($field['form_field'], $options, $field['Value']);
             if (!empty($field['pop_add'])) {
                 if ($field['table_url']) {
                     $location = $field['table_url'];
                 } else {
                     $location = "table.php?table=" . $field['lookuptable'];
                 }
                 $output .= "<a onclick='lightning.table.newPop(\"{$location}\",\"{$field['form_field']}\",\"{$field['display_column']}\")'>Add New Item</a>";
             }
             return $output;
             break;
         case 'range':
             $output = "<select name='{$field['form_field']}' id='{$field['form_field']}'>";
             if ($field['allow_blank']) {
                 $output .= '<option value="0"></option>';
             }
             if ($field['start'] < $field['end']) {
                 for ($k = $field['start']; $k <= $field['end']; $k++) {
                     $output .= "<option value='{$k}'" . ($field['Value'] == $k ? 'selected="selected"' : '') . ">{$k}</option>";
                 }
             }
             $output .= '</select>';
             return $output;
             break;
         case 'checkbox':
             return "<input type='checkbox' name='{$field['form_field']}' id='{$field['form_field']}' value='1' " . ($field['Value'] == 1 ? "checked" : '') . " />";
             break;
         case 'note':
             return $field['note'];
             break;
         case 'checklist':
             $vals = $this->decode_bool_group($field['Value']);
             $output = '';
             foreach ($field['options'] as $i => $opt) {
                 if (is_array($opt)) {
                     $id = $opt[0];
                     $name = $opt[1];
                 } else {
                     $id = $i;
                     $name = $opt;
                 }
                 $output .= "<div class='checlist_item'><input type='checkbox' name='{$field['form_field']}_{$id}' value='1' " . ($vals[$id] == 1 ? "checked" : '') . " />{$name}</div>";
             }
             return $output;
             break;
         case 'varchar':
         case 'char':
             preg_match('/(.+)\\(([0-9]+)\\)/i', $field['type'], $array);
             $options['size'] = $array[2];
         default:
             if (!empty($field['autocomplete'])) {
                 $options['classes'] = array('table_autocomplete');
                 $options['autocomplete'] = false;
             }
             return Text::textfield($field['form_field'], $field['Value'], $options);
             break;
     }
 }