Пример #1
0
 /**
  * Метод загрузки данных
  *
  * @param Sppc_Dashboard_DateRange $range
  */
 protected function loadResults(Sppc_Dashboard_DateRange $range, $sortField = '', $sortDirection = '')
 {
     // Подключаем объект фидов
     $this->CI->load->model('feeds');
     /* @var $feeds Feeds */
     $feeds = $this->CI->feeds;
     if (empty($sortField)) {
         $sortField = $this->getSortField();
     }
     if (empty($sortDirection)) {
         $sortDirection = $this->getSortDirection();
     }
     // Формируем колонки
     $this->addColumn('name', 'Feed Name');
     $this->addColumn('impressions', 'Impressions', 'numeric', 'desc');
     $this->addColumn('clicks', 'Clicks', 'numeric', 'desc');
     $this->addColumn('ctr', '% CTR', 'numeric', 'desc');
     $this->addColumn('revenue', 'Earnings', 'numeric', 'desc');
     // Получаем данные по фидам
     $rowsData = $feeds->top($sortField, $sortDirection, array('from' => $range->getUnixStartDate(), 'to' => $range->getUnixEndDate()));
     foreach ($rowsData as $data) {
         $rowData = array(type_to_str($data['title'], 'encode'), type_to_str($data['impressions'], 'integer'), type_to_str($data['clicks'], 'integer'), type_to_str($data['ctr'], 'procent'), type_to_str($data['revenue'], 'money'));
         $this->addRow($rowData);
     }
     // Устанавливаем title
     $this->title = sprintf(__('Top Feeds (%d)'), count($rowsData));
 }
Пример #2
0
 /**
  * функция по умолчанию
  *
  * @return ничего не возвращает
  */
 public function index()
 {
     $this->load->model('groups', '', TRUE);
     $this->groups->end_fl_status();
     if (is_null($this->id_campaign)) {
         if (is_null($this->id_group)) {
             $usercode = type_to_str($this->user_id, 'textcode');
             $node = 'user' . $usercode;
             $startitem = "show_campaigns('{$usercode}');";
         } else {
             $node = 'group' . $this->id_group;
             $id_campaign_type = $this->groups->group_type(type_cast($this->id_group, 'textcode'));
             $startitem = "show_ads('{$this->id_group}', '', '{$id_campaign_type}');";
         }
     } else {
         $node = 'camp' . $this->id_campaign;
         $id_campaign = type_cast($this->id_campaign, 'textcode');
         $id_campaign_type = $this->groups->campaign_type($id_campaign);
         $startitem = "show_groups('{$this->id_campaign}', '{$id_campaign_type}');";
     }
     $vars = array('TREE' => $this->groups->get_html_tree($this->user_id, $this->user_name), 'TABLE' => 'table', 'STARTITEM' => $startitem, 'NODE' => $node, 'TAB' => $this->tab, 'NUMBERFORMAT' => get_number_format());
     $vars['PLUGIN_COLOR_HINT'] = implode($this->plugins->run('get_colors_hint_html', $this));
     $vars['PLUGIN_JS_FUNCTIONS'] = implode($this->plugins->run('get_js_functions_html', $this));
     $plugin_controller = '';
     foreach ($this->plugins->run('get_controller', $this) as $controllers) {
         foreach ($controllers as $id_campaign_type => $return_value) {
             $plugin_controller .= " case '{$id_campaign_type}': return {$return_value}; ";
         }
     }
     $vars['PLUGIN_CONTROLLER'] = $plugin_controller;
     $this->_set_content($this->parser->parse('advertiser/manage_ads/template.html', $vars, TRUE));
     $this->_display();
 }
Пример #3
0
 /**
  * возвращает список выплат
  *
  * @param array параметры списка выплат
  * 			   int id_entity идентификатор сущности, которой выплачивались деньги, - опционально
  * 			   array flow_program фильтр по типам денежных потоков,  - опционально
  *               array fields поля БД для запроса списка - опционально
  *               array order ('by' => 'field', 'direction' => 'asc') параметры сортировки списка - опционально
  * 			   array date_range ('from' => unixtimestamp, 'to' => unixtimestamp) фильтр по дате выплаты - опционально
  *           int id_gateway фильтр по платежным шлюзам - опционально (0 - все шлюзы)
  * @return array
  */
 public function get_list($params)
 {
     $result = array();
     if (isset($params['id_entity'])) {
         $this->db->where('id_entity_receipt', $params['id_entity']);
     }
     if (isset($params['id_gateway'])) {
         if ($params['id_gateway']) {
             $this->db->where('payment_gateways.id_entity', $params['id_gateway']);
         }
     }
     if (isset($params['flow_program'])) {
         $this->db->where_in('flow_program', $params['flow_program']);
     }
     if (isset($params['fields'])) {
         $this->db->select($params['fields']);
     }
     if (isset($params['order'])) {
         $this->db->order_by($params['order']['by'], $params['order']['direction']);
     }
     if (isset($params['date_range'])) {
         $this->db->where(array('flow_date >=' => type_to_str($params['date_range']['from'], 'databasedatetime'), 'flow_date <=' => type_to_str($params['date_range']['to'], 'databasedatetime')));
     }
     $this->db->join('money_flows', self::TABLE . '.id_flow = money_flows.id_flow')->join('payment_gateways', 'money_flows.id_entity_expense = payment_gateways.id_entity')->join('entities', 'payment_gateways.id_entity = entities.id_entity')->join('entities pe', 'money_flows.id_entity_receipt = pe.id_entity')->join('payment_requests', 'money_flows.id_flow = payment_requests.id_flow', 'left');
     $query = $this->db->get(self::TABLE);
     //echo $this->db->last_query();
     foreach ($query->result() as $row) {
         //$ids[] = $row->id_entity_receipt;
         $result[] = $row;
     }
     return $result;
 }
Пример #4
0
 /**
  * @see Sppc_Dashboard_Block_Interface::getContent
  *
  * @param Sppc_Dashboard_DateRange $range
  * @return string
  */
 public function getContent(Sppc_Dashboard_DateRange $range)
 {
     // Получаем заработок за период
     $this->CI->load->model('entity');
     $stat = $this->CI->entity->publisher_range_stat(array('from' => mktime(0, 0, 0), 'to' => time()));
     // Выводим
     $data = array('REVENUE' => type_to_str($stat['revenue'], 'money'));
     return $this->CI->parser->parse('common/dashboard/today_earnings.html', $data, true);
 }
Пример #5
0
 public function index()
 {
     $this->load->model('ads', '', TRUE);
     $this->load->model('groups', '', TRUE);
     $id_ad = $this->input->post('id');
     if ($id_ad) {
         $id_ad_decoded = type_cast($id_ad, 'textcode');
         $this->load->model('ads', '', TRUE);
         $id_group_decoded = $this->ads->group($id_ad_decoded);
         $group_code = type_to_str($id_group_decoded, 'textcode');
         $this->id_group = $group_code;
     } else {
         $this->load->model('new_campaign');
         $this->new_campaign->free_storage($this->id_xml);
         $this->session->unset_userdata('id_xml');
     }
     $id_group = $this->input->post('id_group');
     if (isset($id_ad_decoded)) {
         $this->img_src = $this->ads->image($id_ad_decoded, TRUE);
         $this->img_dim = $this->ads->get_ad_dimensions($id_ad_decoded);
     }
     if ($id_group) {
         $id_group_decoded = type_cast($id_group, 'textcode');
         $group_code = type_to_str($id_group_decoded, 'textcode');
         $this->id_group = $id_group;
     }
     $campaign_name = type_to_str($this->groups->parent_campaign($id_group_decoded), 'encode');
     $id_campaign = type_to_str($this->groups->id_parent_campaign($id_group_decoded), 'textcode');
     $group_name = type_to_str($this->groups->name($id_group_decoded), 'encode');
     $this->cancel_creation_controller = "advertiser/manage_ads/group/{$group_code}/ads";
     if ($id_ad) {
         $this->next_step = 'advertiser/create_ad/success/' . $group_code . '/true';
     } else {
         $this->next_step = 'advertiser/create_ad/success/' . $group_code . '/false';
     }
     $this->upload_controller = "advertiser/create_ad/upload_image/{$group_code}";
     $this->form_title = '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads">{@Manage Ads@}</a> &rarr; ' . '<a href="advertiser/manage_ads/campaign/' . $id_campaign . '">{@Campaign@}:</a> <span class="green i">&bdquo;' . $campaign_name . '&ldquo;</span> &rarr; ' . '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads/group/' . $group_code . '/ads">{@Group@}:</a> <span class="green i">&bdquo;' . $group_name . '&ldquo;</span> &rarr; ';
     if ($id_ad) {
         $ad_info = $this->ads->get($id_ad_decoded);
         if ($ad_info['ad_type'] == 'richmedia') {
             $ad_info['title'] = __('Rich Media Ad');
         }
         $this->ad_id = $id_ad;
         $this->form_title .= __('Edit Ad') . ': <span class="green i">&bdquo;' . type_to_str($ad_info['title'], 'encode') . '&ldquo;</span>';
         $this->image_dir = $this->config->item('path_to_images');
     } else {
         $this->form_title .= __('Create Ad');
     }
     parent::index('create_ad');
 }
Пример #6
0
 /**
  * конструктор класса,
  * вносит изменения в структуру базового класса
  *
  * @return ничего не возвращает
  */
 public function Account_settings()
 {
     parent::Parent_entity();
     $this->form_data["id"] = $this->user_id;
     $this->form_data["kill"] = array("terms_and_conditions", "confirm_password", "cancel_button");
     $this->form_data["redirect"] = "advertiser/account_settings/success";
     unset($this->form_data["fields"]["confirm"]);
     $this->button_name = "{@Update Account@}";
     $this->content['SROLE'] = $this->role;
     $this->content['CODE'] = type_to_str($this->user_id, 'textcode');
     $this->content["CANCEL"] = $this->site_url . $this->index_page . "advertiser/account_settings";
     $this->content["INFO"] = $this->load->view("advertiser/account_settings/info.html", "", TRUE);
     $this->_set_title(implode(self::TITLE_SEP, array(__("Advertiser"), __("Account Settings"))));
     $this->_set_help_index("advertiser_account_settings");
 }
Пример #7
0
 public function index($group_code = FALSE, $program_type = null)
 {
     $this->set_campaign_type('edit_channels');
     $this->setCurrentStep('/advertiser/edit_channels');
     $this->load->model('groups', '', TRUE);
     $code = $this->input->post('group');
     if (FALSE === $code) {
         $code = $group_code;
     } else {
         //Если код группы есть в POST, то на страницу пришли из раздела Manage Ads (производим очистку XML)
         $this->new_campaign->free_storage($this->id_xml);
         $this->id_xml = uniqid();
         $this->session->set_userdata('id_xml', $this->id_xml);
     }
     if (2 == $this->new_campaign->init_storage($this->id_xml)) {
         //на первом шаге создаем xml-файл и наполняем его данными выбранной группы
         $id_group = type_cast($code, 'textcode');
         //$this->new_campaign->free_storage($this->id_xml);
         //$this->new_campaign->init_storage($this->id_xml);
         $this->new_campaign->set_group_name($code);
         /*$channels = $this->groups->get_channels($id_group);
           foreach ($channels as $channel) {
           	$this->new_campaign->add_channel($channel);
           }*/
         $this->new_campaign->set_program_type($program_type);
         $site_channels = $this->groups->get_site_channels($id_group, false);
         foreach ($site_channels as $site_channel) {
             $this->new_campaign->add_site_channel($site_channel);
         }
         $this->new_campaign->apply_sites_channels();
         $frequency_coup = $this->groups->get_frequency_coup($id_group);
         $this->new_campaign->set_daily_impressions($frequency_coup > 0 ? $frequency_coup : '');
         $this->new_campaign->save_data();
     } else {
         //на остальных шагах работаем с xml-файлом
         //$this->new_campaign->init_storage($this->id_xml);
         $code = $this->new_campaign->get_group_name();
         $id_group = type_cast($code, 'textcode');
     }
     $this->cancel_creation_controller = 'advertiser/manage_ads/group/' . $code . '/channels';
     $this->load->model('campaigns', '', TRUE);
     $campaign_name = type_to_str($this->groups->parent_campaign($id_group), 'encode');
     $id_campaign = type_to_str($this->groups->id_parent_campaign($id_group), 'textcode');
     $group_name = type_to_str($this->groups->name($id_group), 'encode');
     $group_code = type_to_str($id_group, 'textcode');
     $this->form_title = '<h1><a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads">{@Manage Ads@}</a> &rarr; ' . '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads/campaign/' . $id_campaign . '">{@Campaign@}:</a> <span class="green i">&bdquo;' . $campaign_name . '&ldquo;</span> &rarr; ' . '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads/group/' . $group_code . '/channels">{@Group@}:</a> <span class="green i">&bdquo;' . $group_name . '&ldquo;</span></h1>';
     parent::index('edit_channels');
 }
Пример #8
0
 public function index()
 {
     $this->load->model('groups', '', TRUE);
     $this->new_campaign->init_storage($this->id_xml);
     $code = $this->new_campaign->get_group_name();
     $this->id_group = type_cast($code, 'textcode');
     $this->cancel_creation_controller = 'advertiser/manage_ads/group/' . $code . '/channels';
     $this->load->model('campaigns', '', TRUE);
     $campaign_name = type_to_str($this->groups->parent_campaign($this->id_group), 'encode');
     $id_campaign = type_to_str($this->groups->id_parent_campaign($this->id_group), 'textcode');
     $group_name = type_to_str($this->groups->name($this->id_group), 'encode');
     $group_code = type_to_str($this->id_group, 'textcode');
     $this->form_title = '<h1><a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads">{@Manage Ads@}</a> &rarr; ' . '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads/campaign/' . $id_campaign . '">{@Campaign@}:</a> <span class="green i">&bdquo;' . $campaign_name . '&ldquo;</span> &rarr; ' . '<a href="<%SITEURL%><%INDEXPAGE%>advertiser/manage_ads/group/' . $group_code . '/channels">{@Group@}:</a> <span class="green i">&bdquo;' . $group_name . '&ldquo;</span></h1>';
     $this->next_step = 'advertiser/edit_set_pricing/success/' . $code;
     parent::index('edit_channels');
 }
Пример #9
0
 /**
  * отправляет письмо
  *
  * @param array $fields массив со значениями полей формы
  * @return string при успехе - пустая строка, иначе текст ошибки
  */
 public function _create($fields)
 {
     $title = $this->global_variables->get('SiteName');
     $CI =& get_instance();
     $CI->load->library('email');
     $config['charset'] = 'utf-8';
     $config['wordwrap'] = FALSE;
     $CI->email->initialize($config);
     $CI->email->from($fields['e_mail'], type_to_str($fields['name'], 'mime'));
     $CI->email->to($this->global_variables->get("SystemEMail"));
     $subject = $title . ' ' . __('Contact Us Message');
     $CI->email->subject(type_to_str($subject, 'mime'));
     $CI->email->message($fields['message']);
     $CI->email->send();
     $this->global_variables->set('MsgID_' . $this->messageid, 'true', 0);
     return "";
 }
Пример #10
0
 /**
  * Метод загрузки данных
  *
  * @param Sppc_Dashboard_DateRange $range
  */
 protected function loadResults(Sppc_Dashboard_DateRange $range)
 {
     // Получаем данные за период
     $this->CI->load->model('entity');
     $stat = $this->CI->entity->publisher_range_stat(array('from' => $range->getUnixStartDate(), 'to' => $range->getUnixEndDate()));
     // Формируем строки для отображения
     $this->addRow(__('Total Earnings'), type_to_str($stat['revenue'], 'money'));
     $this->addRow(__('Total Impressions'), type_to_str($stat['impressions'], 'integer'));
     $this->addRow(__('Total Clicks'), type_to_str($stat['clicks'], 'integer'));
     $this->addRow(__('CTR'), type_to_str($stat['ctr'], 'procent'));
     // add additional summary performance fields from plugins
     foreach ($this->_hooks as $hookObj) {
         $fields = $hookObj->addSummaryPerformanceFields($stat);
         foreach ($fields as $field) {
             $this->addRow($field['title'], $field['value']);
         }
     }
 }
Пример #11
0
 public function _load($id)
 {
     $fields = array();
     $id_campaign = type_cast($id, 'textcode');
     $this->load->model('campaigns', '', TRUE);
     $info = $this->campaigns->info($id_campaign);
     $fields['campaign_name'] = $info['name'];
     $fields['targeting_type'] = $info['targeting_type'];
     $fields['id_targeting_group'] = type_to_str($info['id_targeting_group'], 'textcode');
     $this->load->model('targeting_groups');
     $id_targeting_group_temp = $this->targeting_groups->copy($info['id_targeting_group']);
     //echo $info['id_targeting_group'];
     $fields['id_targeting_group_temp'] = type_to_str($id_targeting_group_temp, 'textcode');
     $targeting_info = new Campaign_Targeting();
     $targeting_group_countries = $this->targeting_groups->get_group_list($info['id_targeting_group'], 'countries');
     foreach ($targeting_group_countries as $country) {
         $targeting_info->countries[] = $country['value'];
     }
     if (0 == count($targeting_info->countries)) {
         foreach ($this->targeting_all_list->countries as $iso => $country) {
             $targeting_info->countries[] = $iso;
         }
     }
     $targeting_group_languages = $this->targeting_groups->get_group_list($info['id_targeting_group'], 'languages');
     foreach ($targeting_group_languages as $language) {
         $targeting_info->languages[] = $language['value'];
     }
     if (0 == count($targeting_info->languages)) {
         foreach ($this->targeting_all_list->languages as $iso => $language) {
             $targeting_info->languages[] = $iso;
         }
     }
     $fields['targeting'] = json_encode($targeting_info);
     $id_schedule = $this->campaigns->schedule($id_campaign);
     $schedule = new Campaign_Schedule();
     $schedule->schedule_is_set = !is_null($id_schedule);
     if (!is_null($id_schedule)) {
         $schedule->schedule = $this->schedule->get($id_schedule);
     }
     $fields['schedule'] = json_encode($schedule);
     return $fields;
 }
Пример #12
0
 /**
  * Метод загрузки данных
  *
  * @param Sppc_Dashboard_DateRange $range
  */
 protected function loadResults(Sppc_Dashboard_DateRange $range)
 {
     // Получаем новости
     $this->CI->load->model('admin_news');
     $need_update = time() - $this->CI->global_variables->get('orbitscripts_news_time') > 60 * 60 * 12;
     if ($need_update) {
         $xml_file = $this->CI->global_variables->get('orbitscripts_news_xml');
         $this->CI->load->model('orbit_news', '', TRUE);
         $rez = $this->CI->orbit_news->parse_xml($xml_file);
         if (is_null($rez)) {
             $this->CI->global_variables->set('orbitscripts_news_time', time());
         }
     }
     $news = $this->CI->admin_news->get_admin_news();
     // Добавляем новости для вывода
     foreach ($news as $row) {
         $rowData = array('date' => type_to_str($row['date'], 'mysqldate'), 'title' => type_to_str($row['title'], 'encode'), 'description' => nl2br($row['content']), 'link' => $row['link']);
         $this->addRow($rowData);
     }
 }
Пример #13
0
 /**
  * показывает форму для изменения настроек или результат изменения настроек
  *
  * @return ничего не возвращает
  */
 public function index()
 {
     $this->load->model('ourdatabaseevo');
     $this->load->library('Plugins', array('path' => array('admin', 'system_settings'), 'interface' => 'Sppc_Admin_SystemSettings_Interface'));
     /**
      * Добавляет Display 'Your Ad Here' link:
      *
      * @return ничего не возвращает
      */
     $your_ad_here_file = APPPATH . 'views/admin/system_settings/your_ad_here.html';
     if (file_exists($your_ad_here_file)) {
         $your_ad_here = $this->load->view('admin/system_settings/your_ad_here.html', '', TRUE);
     } else {
         $your_ad_here = '';
     }
     $afile = APPPATH . 'views/admin/system_settings/approve_advertisers.html';
     if (file_exists($afile)) {
         $advsignup = $this->load->view('admin/system_settings/approve_advertisers.html', '', TRUE);
     } else {
         $advsignup = '';
     }
     $pfile = APPPATH . 'views/admin/system_settings/approve_publishers.html';
     if (file_exists($pfile)) {
         $pubsignup = $this->load->view('admin/system_settings/approve_publishers.html', '', TRUE);
     } else {
         $pubsignup = '';
     }
     $mfile = APPPATH . 'views/admin/system_settings/approve_members.html';
     if (file_exists($mfile)) {
         $memsignup = $this->load->view('admin/system_settings/approve_members.html', '', TRUE);
     } else {
         $memsignup = '';
     }
     $form = array("id" => $this->user_id, "name" => "system_settings", "view" => "admin/system_settings/form.html", 'redirect' => 'admin/system_settings/success', 'vars' => array('USERIDCODE' => type_to_str($this->user_id, 'textcode'), 'YOUR_AD_HERE' => $your_ad_here, 'PUBSIGNUP' => $pubsignup, 'ADVSIGNUP' => $advsignup, 'MEMSIGNUP' => $memsignup, 'ADDITIONAL_SETTINGS' => ''), "fields" => array("mail" => array("display_name" => "Administrator E-mail", "id_field_type" => "string", "form_field_type" => "text", "validation_rules" => "required|valid_email"), "reserve" => array("id_field_type" => "bool", "form_field_type" => "checkbox"), "campaigns" => array("id_field_type" => "bool", "form_field_type" => "checkbox"), "signup" => array("id_field_type" => "bool", "form_field_type" => "checkbox"), "pubsignup" => array("id_field_type" => "bool", "form_field_type" => "checkbox"), "memsignup" => array("id_field_type" => "bool", "form_field_type" => "checkbox"), "title" => array("display_name" => "System Title", "id_field_type" => "string", "form_field_type" => "text", "validation_rules" => "required"), "show_your_ad_here_link" => array("display_name" => "Show 'Your Ad Here' link", "id_field_type" => "bool", "form_field_type" => "checkbox"), "your_ad_here_link_text" => array("display_name" => "'Your Ad Here' link text", "id_field_type" => "string", "form_field_type" => "text", "max" => 15)));
     $this->plugins->run('registerFieldsForAdditionalSettings', $form);
     $additionalSettings = $this->plugins->run('getAdditionalSettingsHTML', null);
     $form['vars']['ADDITIONAL_SETTINGS'] = implode(' ', $additionalSettings);
     $this->load->library("form");
     $this->_set_content($this->form->get_form_content("modify", $form, $this->input, $this));
     $this->_display();
 }
 /**
  * Метод загрузки данных
  *
  * @param Sppc_Dashboard_DateRange $range
  */
 protected function loadResults(Sppc_Dashboard_DateRange $range, $sortField = '', $sortDirection = '')
 {
     // Подключаем нужный объект
     $this->CI->load->model('entity');
     /* @var $entities Entity */
     $entities = $this->CI->entity;
     if (empty($sortField)) {
         $sortField = $this->getSortField();
     }
     if (empty($sortDirection)) {
         $sortDirection = $this->getSortDirection();
     }
     // Формируем колонки
     $this->addColumn('name', 'Advertiser');
     $this->addColumn('impressions', 'Impressions', 'numeric', 'desc');
     $this->addColumn('clicks', 'Clicks', 'numeric', 'desc');
     $this->addColumn('ctr', '% CTR', 'numeric', 'desc');
     $this->addColumn('revenue', 'Earnings', 'numeric', 'desc');
     // add additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $columns = $hookObj->addColumns($this);
         foreach ($columns as $column) {
             $this->addColumn($column['name'], $column['title'], $column['type'], $column['order']);
         }
     }
     // Получаем данные по фидам
     $rowsData = $entities->top_advertisers($sortField, $sortDirection, array('from' => $range->getUnixStartDate(), 'to' => $range->getUnixEndDate()));
     foreach ($rowsData as $idEntity => $data) {
         $code = type_to_str($idEntity, 'textcode');
         $rowData = array(type_to_str($data['name'], 'encode') . " ({$data['email']})", type_to_str($data['impressions'], 'integer'), type_to_str($data['clicks'], 'integer'), type_to_str($data['ctr'], 'procent'), type_to_str($data['revenue'], 'money'));
         // add data for addtional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $rowData = $hookObj->addColumnsData($data, $rowData);
         }
         $this->addRow($rowData);
     }
     // Устанавливаем title
     $this->title = sprintf(__('Top Advertisers (%d)'), count($rowsData));
 }
Пример #15
0
 /**
  * Отображение формы изменения баланса сущности
  *
  */
 public function index()
 {
     $error_message = '';
     $code = $this->input->post('balance_code');
     if (!$code) {
         $error_message = 'Advertiser is not specified!';
         $data = array('MESSAGE' => __($error_message), 'REDIRECT' => $this->site_url . $this->index_page . $this->role . '/manage_advertisers');
         $content = $this->parser->parse('common/errorbox.html', $data, FALSE);
         $this->_set_content($content);
         $this->_display();
         return NULL;
     }
     $id_entity = type_cast($code, 'textcode');
     $entity_info = $this->entity->get_name_and_mail($id_entity);
     $entity_info = $entity_info->name . ' (' . $entity_info->e_mail . ')';
     $balance = $this->entity->ballance($id_entity);
     $balance = type_to_str($balance, 'money');
     $this->load->model('campaigns', '', TRUE);
     $form = array('id' => $code, 'name' => 'balance_form', 'redirect' => "admin/change_" . $this->subject_role . "_balance/success", 'view' => "admin/change_balance/form.html", 'vars' => array('ENTITY' => $entity_info, 'CUR' => $balance, 'CANCEL_URL' => $this->cancel_url, 'PREV_TITLE' => $this->prev_title), 'fields' => array('amount' => array('display_name' => __('Amount'), 'id_field_type' => 'money', 'form_field_type' => 'text', 'validation_rules' => 'required|callback_valuetrim|float|positive'), 'balance_code' => array('id_field_type' => 'string', 'form_field_type' => 'hidden', 'default' => $code), 'balance_mode' => array('id_field_type' => 'string', 'form_field_type' => 'select', 'options' => array('add' => __('Add'), 'sub' => __('Subtract')), 'default' => 'add')));
     $this->_set_content($this->form->get_form_content('modify', $form, $this->input, $this));
     $this->_display();
 }
Пример #16
0
 /**
  * Метод загрузки данных
  *
  * @param Sppc_Dashboard_DateRange $range
  */
 protected function loadResults(Sppc_Dashboard_DateRange $range, $sortField = '', $sortDirection = '')
 {
     // Подключаем нужный объект
     $this->CI->load->model('site');
     /* @var $sites Site */
     $sites = $this->CI->site;
     if (empty($sortField)) {
         $sortField = $this->getSortField();
     }
     if (empty($sortDirection)) {
         $sortDirection = $this->getSortDirection();
     }
     // Формируем колонки
     $this->addColumn('name', 'Site Name');
     $this->addColumn('impressions', 'Impressions', 'numeric', 'desc');
     $this->addColumn('clicks', 'Clicks', 'numeric', 'desc');
     $this->addColumn('ctr', '% CTR', 'numeric', 'desc');
     $this->addColumn('revenue', 'Earnings', 'numeric', 'desc');
     // add additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $columns = $hookObj->addColumns($this);
         foreach ($columns as $column) {
             $this->addColumn($column['name'], $column['title'], $column['type'], $column['order']);
         }
     }
     // Получаем данные по фидам
     $rowsData = $sites->top(null, $sortField, $sortDirection, array('from' => $range->getUnixStartDate(), 'to' => $range->getUnixEndDate()));
     foreach ($rowsData as $data) {
         $code = type_to_str($data['id_publisher'], 'textcode');
         $rowData = array(limit_str_and_hint($data['name'], 20) . " (<a target='_blank' href='http://{$data['url']}'>{$data['url']}</a>)", type_to_str($data['impressions'], 'integer'), type_to_str($data['clicks'], 'integer'), type_to_str($data['ctr'], 'procent'), type_to_str($data['revenue'], 'money'));
         // add data for addtional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $rowData = $hookObj->addColumnsData($data, $rowData);
         }
         $this->addRow($rowData);
     }
     // Устанавливаем title
     $this->title = sprintf(__('Top Sites (%d)'), count($rowsData));
 }
Пример #17
0
 /**
  * возвращает количество рекламодателей, попадающих под указанный фильтр
  *
  * @param string $filt фильтр по статусу
  * @param array $range массив с двумя датами - начала и конце периода ('from', 'to')
  * @param string $quickSearch Параметр для поиска рекламодателя по id, fullname, email и join date
  * @return integer количество
  */
 public function total($filt, $range, $quickSearch = '')
 {
     $total = array('cnt' => 0, 'balance' => 0, 'impressions' => 0, 'clicks' => 0, 'spent' => 0, 'bonus' => 0);
     // All pages total
     $sql = "\n      \tSELECT \n      \t\tSUM(sa.impressions) AS impressions,\n      \t\tSUM(sa.clicks) AS clicks,\n      \t\tSUM(sa.spent) AS spent,\n      \t\tSUM(e.bonus) AS bonus\n      \tFROM advertisers a\n      \t\tJOIN entities e ON a.id_entity_advertiser = e.id_entity\n      \t\tJOIN entity_roles er ON (er.id_entity = e.id_entity AND er.id_role = " . self::ID_ROLE . ")\n      \t\tLEFT JOIN stat_advertisers sa ON (a.id_entity_advertiser = sa.id_entity_advertiser\n      \t\t\tAND sa.stat_date BETWEEN '" . type_to_str($range['from'], 'databasedate') . "' AND '" . type_to_str($range['to'], 'databasedate') . "')\n      \tWHERE 1 = 1 \n      \t";
     if ($filt != 'all') {
         $sql .= ' AND er.status = ' . $this->db->escape($filt);
     }
     if (!empty($quickSearch)) {
         $escapedQuickSearch = $this->db->escape_str($quickSearch);
         $sql .= " AND ((e.id_entity LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.name LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.e_mail LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.creation_date LIKE '%" . $escapedQuickSearch . "%'))\n      \t \t\t ";
     }
     $query = $this->db->query($sql);
     if (0 < $query->num_rows()) {
         $row = $query->row();
         $total['impressions'] = $row->impressions;
         $total['clicks'] = $row->clicks;
         $total['spent'] = $row->spent;
         $total['bonus'] = $row->bonus;
     }
     // All count
     $sql = "\n      \tSELECT \n      \t\tSUM(e.ballance) AS ballance,\n      \t\tCOUNT(*) AS cnt\n      \tFROM advertisers a\n      \t\tJOIN entities e ON a.id_entity_advertiser = e.id_entity\n      \t\tJOIN entity_roles er ON er.id_entity = e.id_entity AND er.id_role = " . self::ID_ROLE . "\n      \tWHERE 1 = 1\n      ";
     if ($filt != 'all') {
         $sql .= ' AND er.status = ' . $this->db->escape($filt);
     }
     if (!empty($quickSearch)) {
         $escapedQuickSearch = $this->db->escape_str($quickSearch);
         $sql .= " AND ((e.id_entity LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.name LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.e_mail LIKE '%" . $escapedQuickSearch . "%')\n      \t \t\t\t\tOR (e.creation_date LIKE '%" . $escapedQuickSearch . "%'))\n      \t \t\t ";
     }
     $query = $this->db->query($sql);
     if (0 < $query->num_rows()) {
         $row = $query->row();
         $total['balance'] = $row->ballance;
         $total['cnt'] = $row->cnt;
     }
     return $total;
 }
Пример #18
0
 public function select_group($site_code, $channel_code)
 {
     //Стираем данные о ID XML файла (именно здесь - чтобы убить эти данные и в куке)
     $this->session->unset_userdata('id_xml');
     $program_type = $this->input->post("program_type");
     switch ($program_type) {
         case 'cpm_flatrate':
             $campaigns_filter = 'cpm_flatrate';
             break;
         default:
             $this->error_message('Wrong program type specified!');
             return;
     }
     $id_site = type_cast($site_code, 'textcode');
     $id_channel = type_cast($channel_code, 'textcode');
     $site_info = $this->site->get_info($id_site);
     $channel_info = $this->channel->get_info($id_channel);
     if (is_null($site_info) || is_null($channel_info)) {
         $this->error_message('Site or channel is not found.');
         return;
     }
     $this->load->model('groups');
     $campaigns_tree = $this->groups->get_html_tree($this->user_id, $this->user_name, 0, $campaigns_filter);
     $content = $this->parser->parse('advertiser/site_directory/select_group.html', array('SITE_CODE' => $site_code, 'CHANNEL_CODE' => $channel_code, 'SITE_NAME' => type_to_str($site_info->name, 'encode'), 'SITE_URL' => $site_info->url, 'CHANNEL_NAME' => type_to_str($channel_info->name, 'encode'), 'PROGRAM_TYPE' => $program_type, 'CAMPAIGNS_TREEVIEW' => $campaigns_tree, 'CHANNEL_TYPE' => $channel_info->ad_type, 'USER_CODE' => type_to_str($this->user_id, 'textcode'), 'EMPTYTREE' => $this->groups->EmptyTree ? 'true' : 'false'));
     $this->_set_content($content);
     $this->_display();
 }
Пример #19
0
 /**
  * Скорее всего этот хак можно удалить будет. 
  *
  * @access  public
  * @param   string
  * @param   bool
  * @return  string
  */
 function post_old($index = '', $xss_clean = FALSE)
 {
     /**
      * Dirty hack для datepicker.
      * Суть проблемы: у каждой локали есть свой формат даты.
      * Этот формат никак не совпадает с форматом даты в яваскрипте.
      * И ко всему прочему сокращённое название месяца для разных языков разное.
      * Поэтому для дэйтпикера формат даты текущей локали форматируется в простой формат: mm/dd/yyyy,
      * и соответсвенно из дэйтпикера приходит даты в таком формате.
      * Вот их и нужно скнонвертировать в формат текущей локали.
      * 
      * При каждом обращении к переменным post или get происходит их форматирование.
      * --
      * А можно при первом удачном обращении отформатировать from & to правильно и записать
      * их в POST, а datepicker_flag - убрать    
      * 
      * @author Semerenko
      */
     if (FALSE !== $this->_fetch_from_array($_POST, 'datepicker_flag', $xss_clean) && in_array($index, array('from', 'to', 'birthday'))) {
         $d = $this->_fetch_from_array($_POST, $index, $xss_clean);
         // mm.dd.yyyy
         $date_parts = strptime($d, '%m.%d.%Y');
         $ts = mktime(0, 0, 0, $date_parts["tm_mon"] + 1, $date_parts["tm_mday"], $date_parts["tm_year"]);
         $res = type_to_str($ts, 'date');
         return $res;
     }
     return $this->_fetch_from_array($_POST, $index, $xss_clean);
 }
 /**
  * Получение таблицы сайтов по указанным критериям
  *
  */
 public function sites_table()
 {
     $this->load->model('channel_program');
     $filter_mode = $this->input->post('filter_mode');
     $this->load->helper('periods_helper');
     $this->table_builder->clear();
     $this->table_builder->init_sort_vars('iframe_channels', 'channel_name', 'asc');
     $this->table_builder->sorted_column(0, 'channel_name', "Channel Name", 'asc');
     $this->table_builder->sorted_column(1, 'id_dimension', 'Format', 'asc');
     $this->table_builder->set_cell_content(0, 2, __('Cost Model'));
     $this->table_builder->sorted_column(3, 'min_cpm_volume', __('Minimal CPM Package (Impressions)'), 'asc');
     $this->table_builder->sorted_column(4, 'min_cpm_cost_text', __('CPM Cost (Text Ads)'), 'asc');
     $this->table_builder->sorted_column(6, 'min_cpm_cost_image', __('CPM Cost (Text & Image)'), 'asc');
     $this->table_builder->sorted_column(8, 'min_flat_rate_volume', __('Minimal Flat Rate Package (Days)'), 'asc');
     $this->table_builder->sorted_column(9, 'min_flat_rate_cost_text', __('Flat Rate Cost (Text Ads)'), 'asc');
     $this->table_builder->sorted_column(11, 'min_flat_rate_cost_image', __('Flat Rate Cost (Text & Image)'), 'asc');
     $this->table_builder->sorted_column(13, 'impressions', 'Traffic Volume', 'asc');
     $this->table_builder->set_cell_content(0, 14, __('Action'));
     $this->table_builder->cell(0, 2)->add_attribute('class', 'simpleTitle');
     $this->table_builder->cell(0, 14)->add_attribute('class', 'simpleTitle');
     $this->table_builder->add_col_attribute(0, 'class', '');
     $this->table_builder->add_col_attribute(1, 'class', 'w80 center');
     $this->table_builder->add_col_attribute(2, 'class', 'w80 center');
     $this->table_builder->add_col_attribute(3, 'class', 'center');
     $this->table_builder->add_col_attribute(4, 'class', 'center');
     $this->table_builder->add_col_attribute(6, 'class', 'center');
     $this->table_builder->add_col_attribute(8, 'class', 'center');
     $this->table_builder->add_col_attribute(9, 'class', 'center');
     $this->table_builder->add_col_attribute(11, 'class', 'center');
     $this->table_builder->add_col_attribute(13, 'class', 'center');
     $this->table_builder->add_col_attribute(14, 'class', 'center');
     $this->table_builder->add_row_attribute(0, 'class', 'th f9px');
     $form_data = array("name" => "iframe_channels_form", "view" => "admin/adplacing/manage_sites_channels/choose_channels/iframe_channels_table.html", 'fields' => array('filter_mode' => array('id_field_type' => 'string', 'form_field_type' => 'hidden', 'default' => $filter_mode)));
     switch ($filter_mode) {
         case 'by_category':
             $id_category = $this->input->post('id_category');
             if ($id_category) {
                 $form_data['fields']['id_category'] = array('id_field_type' => 'int', 'form_field_type' => 'hidden', 'default' => $id_category);
                 $channels_array = $this->channel->get_sites_channels(array('fields' => 'id_site_channel, channels.ad_type, channels.name as channel_name,' . ' sites.url as site_url, sites.id_site,' . ' channels.id_channel, channels.id_dimension, dimensions.width,' . ' dimensions.height, SUM(impressions) as impressions', 'category_id_filter' => $id_category, 'show_deleted_channels' => false, 'order_by' => $this->table_builder->sort_field, 'order_direction' => $this->table_builder->sort_direction, 'hide_wo_programs' => true, 'date_filter' => data_range(array('mode' => 'select', 'period' => 'lastmonth')), 'status' => 'active'));
             } else {
                 $channels_array = array();
             }
             break;
         case 'by_price':
             $price = $this->input->post('price');
             if ($price) {
                 $price = type_cast($price, 'float');
             } else {
                 $price = 0;
             }
             $price_program = $this->input->post('price_program');
             $ads_type = $this->input->post('ads_type');
             if ($price && $price_program) {
                 $form_data['fields']['price'] = array('id_field_type' => 'positive_float', 'form_field_type' => 'hidden', 'default' => type_to_str($price, 'float'));
                 $form_data['fields']['price_program'] = array('id_field_type' => 'string', 'form_field_type' => 'hidden', 'default' => $price_program);
                 $form_data['fields']['ads_type'] = array('id_field_type' => 'string', 'form_field_type' => 'hidden', 'default' => $ads_type);
                 $channels_array = $this->channel->get_sites_channels(array('fields' => 'id_site_channel, channels.ad_type, channels.name as channel_name, ' . 'sites.url as site_url, sites.id_site, channels.id_channel, ' . 'channels.id_dimension, dimensions.width, dimensions.height, ' . 'SUM(impressions) as impressions', 'show_deleted_channels' => false, 'order_by' => $this->table_builder->sort_field, 'order_direction' => $this->table_builder->sort_direction, 'price_filter' => array('price' => $price, 'price_program' => $price_program, 'ads_type' => $ads_type), 'hide_wo_programs' => true, 'date_filter' => data_range(array('mode' => 'select', 'period' => 'lastmonth'))));
             } else {
                 $channels_array = array();
             }
             break;
     }
     //установка атрибутов таблицы
     $this->table_builder->add_attribute('class', 'xTable');
     //or set style here
     if (is_null($channels_array)) {
         $channels_array = array();
     }
     $data_rows_conut = sizeof($channels_array);
     $this->table_builder->insert_empty_cells = false;
     $row_counter = 1;
     $site_id = '';
     for ($i = 0; $i < $data_rows_conut; $i++) {
         if (!$this->channel_program->get_default_program(array('id_site_channel' => $channels_array[$i]['id_site_channel']))) {
             continue;
         }
         if ($site_id != $channels_array[$i]['id_site']) {
             $this->table_builder->set_cell_content($row_counter, 0, array('src' => $this->site_url . 'images/pixel.gif', 'onclick' => 'top.SwitchExpander(' . $channels_array[$i]['id_site'] . ',this)', 'extra' => 'class="minus"'), 'image');
             $this->table_builder->cell($row_counter, 0)->add_content(__('Site') . ':&nbsp<span class="green i">&bdquo;' . $channels_array[$i]['site_url'] . '&ldquo;</span>');
             $this->table_builder->cell($row_counter, 0)->add_attribute('colspan', 15);
             $this->table_builder->add_row_attribute($row_counter, 'class', 'group');
             $site_id = $channels_array[$i]['id_site'];
             $row_counter++;
         }
         $this->table_builder->set_cell_content($row_counter, 0, type_to_str($channels_array[$i]['channel_name'], 'encode'));
         $allowedTypes = explode(',', $channels_array[$i]['ad_type']);
         $this->table_builder->set_cell_content($row_counter, 1, '');
         if (in_array(Sppc_Channel::AD_TYPE_TEXT, $allowedTypes)) {
             $ico_path = $this->site_url . 'images/smartppc6/icons/script_code.png';
             $hint_title = __('Text Ad') . ' (' . $channels_array[$i]['width'] . '&times;' . $channels_array[$i]['height'] . ')';
             $img_prefix = 'txt_';
             $this->table_builder->cell($row_counter, 1)->add_content(array('src' => $ico_path, 'extra' => 'title="' . $hint_title . '" href="' . $this->site_url . 'images/dimensions_preview/' . $img_prefix . $channels_array[$i]['id_dimension'] . '.png" class="tooltip"'), 'image');
         }
         if (in_array(Sppc_Channel::AD_TYPE_IMAGE, $allowedTypes)) {
             $ico_path = $this->site_url . 'images/smartppc6/icons/image.png';
             $hint_title = __('Image Ad') . ' (' . $channels_array[$i]['width'] . '&times;' . $channels_array[$i]['height'] . ')';
             $img_prefix = 'img_';
             $this->table_builder->cell($row_counter, 1)->add_content(array('src' => $ico_path, 'extra' => 'title="' . $hint_title . '" href="' . $this->site_url . 'images/dimensions_preview/' . $img_prefix . $channels_array[$i]['id_dimension'] . '.png" class="tooltip"'), 'image');
         }
         $this->table_builder->cell($row_counter, 1)->add_content($channels_array[$i]['width'] . '&times;' . $channels_array[$i]['height'], '', '<br/> ');
         $program_type = "";
         $min_volume_cpm = "";
         $min_volume_flat_rate = "";
         if (!is_null($channels_array[$i]['min_cpm_volume'])) {
             $program_type .= __('CPM');
             $this->table_builder->set_cell_content($row_counter, 3, type_to_str($channels_array[$i]['min_cpm_volume'], 'integer'));
             if (in_array(Sppc_Channel::AD_TYPE_TEXT, $allowedTypes)) {
                 $this->table_builder->set_cell_content($row_counter, 4, type_to_str($channels_array[$i]['min_cpm_cost_text'], 'money'));
             } else {
                 $this->table_builder->set_cell_content($row_counter, 4, '&#151;');
             }
             if (in_array(Sppc_Channel::AD_TYPE_IMAGE, $allowedTypes) && $channels_array[$i]['min_cpm_cost_image'] > 0) {
                 $this->table_builder->set_cell_content($row_counter, 6, type_to_str($channels_array[$i]['min_cpm_cost_image'], 'money'));
             } else {
                 $this->table_builder->set_cell_content($row_counter, 6, '&#151;');
             }
         } else {
             $program_type .= '&#151;';
             $this->table_builder->set_cell_content($row_counter, 3, '&#151;');
             $this->table_builder->set_cell_content($row_counter, 4, '&#151;');
             $this->table_builder->set_cell_content($row_counter, 6, '&#151;');
         }
         if (!is_null($channels_array[$i]['min_flat_rate_volume'])) {
             $program_type .= ' / ' . __('Flat Rate');
             $this->table_builder->set_cell_content($row_counter, 8, type_to_str($channels_array[$i]['min_flat_rate_volume'], 'integer'));
             if (in_array(Sppc_Channel::AD_TYPE_TEXT, $allowedTypes)) {
                 $this->table_builder->set_cell_content($row_counter, 9, type_to_str($channels_array[$i]['min_flat_rate_cost_text'], 'money'));
             } else {
                 $this->table_builder->set_cell_content($row_counter, 9, '&#151;');
             }
             if (in_array(Sppc_Channel::AD_TYPE_IMAGE, $allowedTypes) && $channels_array[$i]['min_flat_rate_cost_image'] > 0) {
                 $this->table_builder->set_cell_content($row_counter, 11, type_to_str($channels_array[$i]['min_flat_rate_cost_image'], 'money'));
             } else {
                 $this->table_builder->set_cell_content($row_counter, 11, '&#151;');
             }
         } else {
             $program_type .= ' / &#151;';
             $this->table_builder->set_cell_content($row_counter, 8, '&#151;');
             $this->table_builder->set_cell_content($row_counter, 9, '&#151;');
             $this->table_builder->set_cell_content($row_counter, 11, '&#151;');
         }
         $this->table_builder->set_cell_content($row_counter, 2, $program_type);
         $this->table_builder->set_cell_content($row_counter, 13, type_to_str($channels_array[$i]['impressions'], 'impressions'));
         $this->table_builder->set_cell_content($row_counter, 14, array('name' => __('Add'), 'href' => '#', 'extra' => 'value="{@Add@}" title="{@Add@}" class="guibutton floatl ico ico-plusgreen" jframe="no" onclick="return addSiteChannelToGroup(' . $channels_array[$i]['id_site_channel'] . ');"'), 'link');
         $this->table_builder->add_row_attribute($row_counter, 'id', "tr{$channels_array[$i]['id_site']}");
         $this->table_builder->add_row_attribute($row_counter, 'id_site_channel', $channels_array[$i]['id_site_channel']);
         $row_counter++;
     }
     if (0 == $data_rows_conut) {
         $this->table_builder->set_cell_content(1, 0, __('Records not found'));
         $this->table_builder->cell(1, 0)->add_attribute('colspan', 15);
         $this->table_builder->cell(1, 0)->add_attribute('class', 'nodata');
     }
     // Устанавливаем возможность выбора колонок
     $this->table_builder->use_select_columns();
     $invariable_columns = array(0, 1, 2, 14);
     $this->table_builder->set_invariable_columns($invariable_columns);
     $channels_table = $this->table_builder->get_sort_html();
     $this->template = "common/parent/jq_iframe.html";
     $form_content = $this->form->get_form_content('create', $form_data, $this->input, $this);
     $form_content = str_replace('<%CHANNELS_TABLE%>', $channels_table, $form_content);
     $form_content = str_replace('<%COLUMNS%>', $this->table_builder->get_columns_html(), $form_content);
     $this->_set_content($form_content);
     $this->_display();
 }
 /**
  * Отображение страницы с предпросмотром созданных объявлений
  *
  * @param string $campaign_type тип создаваемой кампании
  */
 public function index($campaign_type)
 {
     $this->set_campaign_type($campaign_type);
     $this->setCurrentStep(uri_string());
     $this->new_campaign->init_storage($this->id_xml);
     $error_message = '';
     // Нужно ли переходить на следующий шаг?
     if (false !== $this->input->post('complete')) {
         // Проверяем, все ли нормально у кампании?
         $error_message = $this->new_campaign->check_ads();
         if (empty($error_message)) {
             // Переходим на следующий шаг
             redirect($this->get_next_step_controller());
         }
     }
     $action = $this->input->post('form_action');
     if ($action) {
         switch ($action) {
             case 'delete':
                 $id_ad = $this->input->post('id');
                 if ($id_ad) {
                     $this->new_campaign->del_ad($id_ad, 'textcode');
                 }
                 break;
         }
         $this->new_campaign->save_data();
     }
     $ads_list = $this->new_campaign->get_ads_list();
     $ads_preview = '';
     /* Выбранные места */
     $choosen_places = $this->new_campaign->get_places();
     // Нужно получить названия и цвета
     $places_data = array('place' => 'sites', 'name' => 'Content Network', 'color' => '000000');
     $choosen_places_view = '';
     $this->load->model('dimension');
     $places_errors = array();
     foreach ($ads_list as $ad_id => $ad) {
         if ('text' == $ad->ad_type) {
             // Подгружаем стили дефолтной color scheme
             $this->db->select('cs.*, ft.name title_font_name, ft2.name text_font_name, ft3.name url_font_name', false);
             $this->db->from('color_schemes cs');
             $this->db->join('fonts ft', 'ft.id_font = cs.title_id_font');
             $this->db->join('fonts ft2', 'ft2.id_font = cs.text_id_font');
             $this->db->join('fonts ft3', 'ft3.id_font = cs.url_id_font');
             $query = $this->db->get();
             $row = $query->row();
             $ad_preview = $this->parser->parse('common/text_ad_example.html', array('TITLE' => type_to_str($ad->title, 'encode'), 'DESCRIPTION' => type_to_str($ad->description1, 'encode'), 'DESCRIPTION2' => type_to_str($ad->description2, 'encode'), 'DISPLAY_URL' => $ad->display_url, 'DESTINATION_URL' => $ad->destination_protocol . "://" . $ad->destination_url, 'BACKGROUND_COLOR' => $row->background_color, 'BORDER_COLOR' => $row->border_color, 'TITLE_COLOR' => $row->title_color, 'TITLE_FONT_NAME' => $row->title_font_name, 'TITLE_FONT_SIZE' => $row->title_font_size, 'TITLE_FONT_STYLE' => $row->title_font_style, 'TITLE_FONT_WEIGHT' => $row->title_font_weight, 'TEXT_COLOR' => $row->text_color, 'TEXT_FONT_NAME' => $row->text_font_name, 'TEXT_FONT_SIZE' => $row->text_font_size, 'TEXT_FONT_STYLE' => $row->text_font_style, 'TEXT_FONT_WEIGHT' => $row->text_font_weight, 'URL_COLOR' => $row->url_color, 'URL_FONT_NAME' => $row->url_font_name, 'URL_FONT_SIZE' => $row->url_font_size, 'URL_FONT_STYLE' => $row->url_font_style, 'URL_FONT_WEIGHT' => $row->url_font_weight), FALSE);
         } elseif ('image' == $ad->ad_type) {
             list($img_w, $img_h, $type, $attr) = getimagesize($this->config->item('path_to_campaign_creation_images') . $ad->image_id);
             if (13 == $type) {
                 //Для флэша используем специальный шаблон
                 $ad_preview = $this->parser->parse('common/image_ad_swf_example.html', array('TITLE' => type_to_str($ad->title, 'encode'), 'ID_IMAGE' => $ad->image_id, 'ID_SWF_CONTAINER' => str_replace('.', '', $ad->image_id), 'IMG_W' => $img_w, 'IMG_H' => $img_h, 'BGCOLOR' => $ad->bgcolor, 'DISPLAY_URL' => $ad->display_url, 'DESTINATION_URL' => $ad->destination_protocol . "://" . $ad->destination_url), FALSE);
             } else {
                 $ad_preview = $this->parser->parse('common/image_ad_example.html', array('TITLE' => type_to_str($ad->title, 'encode'), 'ID_IMAGE' => $ad->image_id, 'DISPLAY_URL' => $ad->display_url, 'DESTINATION_URL' => $ad->destination_protocol . "://" . $ad->destination_url), FALSE);
             }
         } elseif ('richmedia' == $ad->ad_type) {
             // dimension of iFrame
             $this->load->model('dimension');
             $dim = $this->dimension->get_info($ad->id_dimension);
             $ad_preview = $this->parser->parse('common/richmedia_ad_example.html', array('RICH_CONTENT' => $ad->rich_content, 'IFRAME_SRC' => base_url() . 'advertiser/create_campaign_step_preview_ads/previewAd/' . $ad_id, 'WIDTH' => $dim->width, 'HEIGHT' => $dim->height), FALSE);
         }
         // Warnings ======================
         $warnings = array();
         $messages = array();
         foreach ($places_data as $place) {
             if (in_array($place['place'], $choosen_places)) {
                 $choosen_places_view[] = '<span class="place_name" style="color:#' . $place['color'] . '">' . $place['name'] . '</span>';
                 if (!$this->dimension->checkPlaceSuitability($place['place'], array($ad))) {
                     $messages[] = array('MESSAGE' => '<span class="place_name" style="color:#' . $place['color'] . '">' . $place['name'] . '</span> ' . __('doesn\'t support this format.'));
                 }
             }
         }
         if (count($messages)) {
             $warnings = array(array('MESSAGES' => $messages));
         }
         // Warning END ===================
         $ads_preview .= $this->parser->parse('advertiser/manage_ads/campaigns/creation/preview_ads/ad_box.html', array('AD_PREVIEW' => $ad_preview, 'AD_ID' => $ad_id, 'WARNINGS' => $warnings), FALSE);
     }
     $data = array('ERROR_MESSAGE' => '' != $error_message ? $this->parser->parse('advertiser/manage_ads/campaigns/creation/preview_ads/error.html', array('ERROR' => $error_message), FALSE) : '', 'NEXT_CONTROLLER_URL' => $this->get_next_step_controller(), 'EDIT_ADS_URL' => $this->get_previous_step_controller(), 'ADD_MORE_ADS_URL' => $this->get_previous_step_controller(), 'ADS_PREVIEW' => $ads_preview, 'CAMPAIGN_SCHEME' => $this->load->view('advertiser/manage_ads/campaigns/campaign_scheme.html', '', TRUE));
     $this->_set_content($this->parser->parse('advertiser/manage_ads/campaigns/creation/preview_ads/body.html', $data, FALSE));
     $this->_display();
 }
Пример #22
0
 /**
  * возвращает суммарную статистику по объявлениям выбранной группы
  *
  * @param integer $id_group уникальный код выбранной группы
  * @param array $range массив с двумя датами - начала и конце периода ('from', 'to')
  * @return array массив со статистикой группы (spent, clicks, impressions, ctr)
  */
 public function summary($id_group, $range)
 {
     $res = $this->db->select_sum('spent')->select_sum('clicks')->select_sum('impressions')->select('COUNT(id_group) AS cnt')->from('stat_groups')->where('id_group', $id_group)->where('stat_date >=', type_to_str($range['from'], 'databasedate'))->where('stat_date <=', type_to_str($range['to'], 'databasedate'))->get();
     if ($res->num_rows()) {
         $row = $res->row();
         $summary = array('spent' => $row->spent, 'clicks' => $row->clicks, 'impressions' => $row->impressions, 'cnt' => $row->cnt);
     } else {
         $summary = array('spent' => 0, 'clicks' => 0, 'impressions' => 0, 'cnt' => 0);
     }
     $summary['ctr'] = $summary['impressions'] ? $summary['clicks'] * 100 / $summary['impressions'] : 0;
     $this->db->select('COUNT(DISTINCT id_ad) AS ads,' . ' COUNT(DISTINCT sc.id_site_channel) AS site_channels,' . ' SUM(gsc.status="unpaid" AND s.status="active" AND c.status="active" AND sc.status="active") AS unpaid,' . ' SUM(gsc.status="trouble" AND s.status="active" AND c.status="active" AND sc.status="active") AS trouble', FALSE);
     $this->db->from('groups');
     $this->db->join('ads', 'groups.id_group = ads.id_group AND ads.status!="deleted"', 'LEFT');
     $this->db->join('group_site_channels gsc', 'groups.id_group = gsc.id_group AND gsc.status!="deleted"', 'LEFT');
     $this->db->join('site_channels sc', 'gsc.id_site_channel = sc.id_site_channel AND sc.status!="deleted"', 'LEFT');
     $this->db->join('sites s', 'sc.id_site = s.id_site', 'LEFT');
     $this->db->join('channels c', 'sc.id_channel = c.id_channel', 'LEFT');
     $this->db->where('groups.id_group', $id_group);
     $res = $this->db->get();
     $row = $res->row();
     $summary['ads'] = $row->ads;
     $summary['site_channels'] = $row->site_channels;
     $summary['unpaid'] = $row->unpaid > 0;
     $summary['trouble'] = $row->trouble > 0;
     return $summary;
 }
Пример #23
0
 /**
  * функция вызываемая по умолчанию, выводит таблицу кампаний
  *
  * @param integer $id_campaign уникальный код кампании, содержащей группы объявлений
  * @return ничего не возвращает
  */
 public function index($code_campaign)
 {
     $this->id_campaign = type_cast($code_campaign, 'textcode');
     $this->load->library('form');
     $this->load->helper('periods');
     $form = array('id' => 'groups', 'name' => 'manadsgroups_form', 'view' => 'advertiser/manage_ads/groups/table.html', 'redirect' => 'advertiser/manage_ads', 'no_errors' => 'true', 'vars' => array('DATEFILTER' => period_html('manadsgroups')), 'fields' => array('filt' => array('id_field_type' => 'string', 'form_field_type' => 'select', 'options' => array('all' => __('all'), 'active' => __('pl_active'), 'paused' => __('pl_paused')))));
     data_range_fields($form, 'select', 'alltime');
     $html = $this->form->get_form_content('modify', $form, $this->input, $this);
     $this->load->model('groups');
     $this->_actions($this->input->post('manadsgroups_action'));
     $this->load->library('Table_Builder');
     $this->table_builder->clear();
     $this->table_builder->insert_empty_cells = true;
     $this->table_builder->init_sort_vars('manadsgroups', 'id_campaign', 'asc');
     $this->load->model('pagination_post');
     $this->pagination_post->set_form_name('manadsgroups');
     $total_function = 'total';
     $total = $this->groups->{$total_function}($this->id_campaign, $this->temporary['manadsgroups_filt'], $this->date_range);
     $this->pagination_post->set_total_records($total['cnt']);
     $this->pagination_post->read_variables('manadsgroups', 1, $this->global_variables->get('GroupsPerPage'));
     $select_function = 'select';
     $groups = $this->groups->{$select_function}($this->id_campaign, $this->temporary['manadsgroups_page'], $this->temporary['manadsgroups_per_page'], $this->table_builder->sort_field, $this->table_builder->sort_direction, $this->temporary['manadsgroups_filt'], $this->date_range);
     $row = 0;
     //build column map
     $colIndex = 0;
     $colMap = array('chkbox' => $colIndex++, 'id' => $colIndex++, 'name' => $colIndex++, 'status' => $colIndex++, 'ads' => $colIndex++, 'siteChannels' => $colIndex++, 'spent' => $colIndex++, 'impressions' => $colIndex++, 'clicks' => $colIndex++, 'ctr' => $colIndex++, 'action' => $colIndex++);
     // register additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $colMap = $hookObj->extendColumnMap($colMap);
     }
     // create columns
     $this->table_builder->set_cell_content($row, $colMap['chkbox'], array('name' => 'checkAll', 'extra' => 'onclick="return select_all(\'manadsgroups\', this)"'), 'checkbox');
     $this->table_builder->sorted_column($colMap['id'], "id_group", "ID", "asc");
     $this->table_builder->sorted_column($colMap['name'], "name", "Group Name", "asc");
     $this->table_builder->sorted_column($colMap['status'], "status", "Current Status", "asc");
     $this->table_builder->sorted_column($colMap['ads'], "ads", "Ads", "desc");
     $col_name = "Sites/Channels";
     $this->table_builder->sorted_column($colMap['siteChannels'], "site_channels", $col_name, "desc");
     $this->table_builder->set_cell_content($row, $colMap['spent'], __("Spent"));
     $this->table_builder->set_cell_content($row, $colMap['impressions'], __("Impressions"));
     $this->table_builder->set_cell_content($row, $colMap['clicks'], __("Clicks"));
     $this->table_builder->set_cell_content($row, $colMap['ctr'], __("CTR"));
     $this->table_builder->set_cell_content($row, $colMap['action'], __('Action'));
     // create additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->createColumns($colMap, $this->table_builder);
     }
     $this->table_builder->add_row_attribute($row, 'class', 'th');
     //прописывание стилей для ячеек
     $this->table_builder->add_col_attribute($colMap['chkbox'], 'class', '"chkbox"');
     $this->table_builder->add_col_attribute($colMap['id'], 'class', '"w20"');
     $this->table_builder->add_col_attribute($colMap['status'], 'class', '"w100  center"');
     $this->table_builder->add_col_attribute($colMap['ads'], 'class', '"w50   right"');
     $this->table_builder->add_col_attribute($colMap['siteChannels'], 'class', '"w100   right"');
     $this->table_builder->add_col_attribute($colMap['spent'], 'class', '"w100  right"');
     $this->table_builder->add_col_attribute($colMap['impressions'], 'class', '"w100   right"');
     $this->table_builder->add_col_attribute($colMap['clicks'], 'class', '"w50   right"');
     $this->table_builder->add_col_attribute($colMap['ctr'], 'class', '"w50   right"');
     $this->table_builder->add_col_attribute($colMap['action'], 'class', '"nowrap center"');
     // add styles for additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->defineColumnStyles($colMap, $this->table_builder);
     }
     $this->table_builder->add_attribute('class', 'xTable');
     $clone_icon = __('Edit');
     $row++;
     $page_total = array('ads' => 0, 'sites_channels' => 0, 'spent' => 0, 'impressions' => 0, 'clicks' => 0);
     // register additional per page statistic fields
     foreach ($this->_hooks as $hookObj) {
         $page_total = $hookObj->registerPerPageStatisticFields($page_total);
     }
     foreach ($groups as $id_group => $group) {
         // calculate per page statistic
         $page_total['ads'] += $group['ads'];
         $page_total['sites_channels'] += $group['site_channels'];
         $page_total['spent'] += $group['spent'];
         $page_total['impressions'] += $group['impressions'];
         $page_total['clicks'] += $group['clicks'];
         // calculate per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $page_total = $hookObj->calculatePerPageStatistic($page_total, $group);
         }
         $code = type_to_str($id_group, 'textcode');
         // checkbox
         $this->table_builder->set_cell_content($row, $colMap['chkbox'], array('name' => 'id_groups[]', 'value' => $code, 'extra' => "id=chk{$row} onclick=\"checktr('chk{$row}','tr{$row}')\""), 'checkbox');
         // id
         $this->table_builder->set_cell_content($row, $colMap['id'], $id_group);
         // name
         $this->table_builder->set_cell_content($row, $colMap['name'], array('name' => limit_str_and_hint($group['name'], 30), 'href' => "#select_group", 'extra' => "jframe='no' onclick='return top.show_ads(\"{$code}\",\"\");'"), 'link');
         // status
         $this->table_builder->set_cell_content($row, $colMap['status'], __('grp_' . $group['status']));
         // ads
         $this->table_builder->set_cell_content($row, $colMap['ads'], array('name' => type_to_str($group['ads'], 'integer'), 'href' => "#select_ads", 'extra' => "jframe='no' onclick='return top.show_ads(\"{$code}\", \"ads\");'"), 'link');
         // site/channels
         $this->table_builder->set_cell_content($row, $colMap['siteChannels'], array('name' => type_to_str($group['site_channels'], 'integer'), 'href' => "#select_sitechannels", 'extra' => "jframe='no' onclick='return top.show_ads(\"{$code}\", \"channels\");'"), 'link');
         // spent
         $this->table_builder->set_cell_content($row, $colMap['spent'], type_to_str($group['spent'], 'money'));
         // impressions
         $this->table_builder->set_cell_content($row, $colMap['impressions'], type_to_str($group['impressions'], 'integer'));
         // clicks
         $this->table_builder->set_cell_content($row, $colMap['clicks'], type_to_str($group['clicks'], 'integer'));
         // ctr
         $this->table_builder->set_cell_content($row, $colMap['ctr'], type_to_str($group['ctr'], 'procent'));
         // action
         $this->table_builder->set_cell_content($row, $colMap['action'], array('name' => $clone_icon, 'href' => "#edit_group", 'extra' => "jframe='no' class='guibutton floatl ico ico-edit' value='{$clone_icon}' title='{$clone_icon}' onclick='top.editGroup(\"{$code_campaign}\",\"{$code}\");'"), 'link');
         // render additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderRow($row, $colMap, $group, $this->table_builder);
         }
         // add id attribute to the table row
         $this->table_builder->add_row_attribute($row, 'id', "tr{$row}");
         $row++;
     }
     if (0 == count($groups)) {
         $this->table_builder->insert_empty_cells = false;
         $this->table_builder->set_cell_content($row, 0, '&nbsp;&nbsp;' . __('Records not found'));
         $this->table_builder->cell($row, 0)->add_attribute('class', 'nodata');
         $this->table_builder->cell($row, 0)->add_attribute('colspan', count($colMap));
     } else {
         // render per page statistic row
         $this->table_builder->set_cell_content($row, $colMap['name'], __("Page total"));
         $this->table_builder->set_cell_content($row, $colMap['ads'], type_to_str($page_total['ads'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['siteChannels'], type_to_str($page_total['sites_channels'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['spent'], type_to_str($page_total['spent'], 'money'));
         $this->table_builder->set_cell_content($row, $colMap['impressions'], type_to_str($page_total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['clicks'], type_to_str($page_total['clicks'], 'integer'));
         $ctr = $page_total['impressions'] ? $page_total['clicks'] / $page_total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $colMap['ctr'], type_to_str($ctr, 'procent'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'pagetotal');
         // render per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderPageStatisticRow($row, $colMap, $page_total, $this->table_builder);
         }
         // render summary statistic row
         $row++;
         $this->table_builder->set_cell_content($row, $colMap['name'], __("Total"));
         $this->table_builder->set_cell_content($row, $colMap['ads'], type_to_str($total['ads'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['siteChannels'], type_to_str($total['site_channels'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['spent'], type_to_str($total['spent'], 'money'));
         $this->table_builder->set_cell_content($row, $colMap['impressions'], type_to_str($total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $colMap['clicks'], type_to_str($total['clicks'], 'integer'));
         $ctr = $total['impressions'] ? $total['clicks'] / $total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $colMap['ctr'], type_to_str($ctr, 'procent'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'alltotal');
         // render summary statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderSummaryRow($row, $colMap, $total, $this->table_builder);
         }
     }
     // Устанавливаем возможность выбора колонок
     $this->table_builder->use_select_columns();
     $invariable_columns = array($colMap['id'], $colMap['name'], $colMap['action']);
     $this->table_builder->set_invariable_columns($invariable_columns);
     $html = str_replace('<%GROUPS%>', $this->table_builder->get_sort_html(), $html);
     $html = str_replace('<%PAGINATION%>', $this->pagination_post->create_form(), $html);
     $buttons = $this->load->view('advertiser/manage_ads/groups/buttons.html', '', TRUE);
     $buttons = str_replace('<%CAMPAIGN%>', $code_campaign, $buttons);
     $html = str_replace('<%BUTTONST%>', str_replace('<%ID%>', 'top_', $buttons), $html);
     $html = str_replace('<%BUTTONSB%>', str_replace('<%ID%>', 'bottom_', $buttons), $html);
     $html = str_replace('<%COLUMNS%>', $this->table_builder->get_columns_html(), $html);
     $this->_set_content($html);
     $this->_display();
 }
Пример #24
0
 /**
  * Метод получения текстового превью рекламного объявления
  *
  * @param int $id_ad
  * @return string
  */
 function get_text_preview($id_ad)
 {
     $html = '';
     $this->db->select('id_ad, name, title, description, description2, display_url, click_url, protocol')->from('ads')->join('ad_types', 'ads.id_ad_type = ad_types.id_ad_type')->where('id_ad', $id_ad)->limit(1);
     $query = $this->db->get();
     if (0 < $query->num_rows()) {
         $row = $query->row();
         $data = array('CODE' => type_to_str($id_ad, 'textcode'), 'NAME' => $row->name, 'ORIG_DESTINATION_URL' => type_to_str($row->click_url, "encode"), 'DESTINATION_URL' => type_to_str(limit_str($row->click_url, 45), "encode"), 'TITLE' => type_to_str($row->title, "encode"), 'DESCRIPTION' => type_to_str($row->description, "encode"), 'DESCRIPTION2' => type_to_str($row->description2, "encode"), 'DISPLAY_URL' => type_to_str($row->display_url, "encode"), 'PROTOCOL' => $row->protocol, 'SHOW_DESCRIPTION' => 'text' == $row->name ? array(array()) : array());
         $html = $this->parser->parse('common/ad_example.html', $data, TRUE);
     }
     return $html;
 }
Пример #25
0
 /**
  * ограничение строки по максимальной длине и добавление аттрибута title для всплывающей подсказки
  * '<span title="full string length">limited stri...</span>'
  *
  * @param string $str значение поля
  * @param int $limit максимальная длина строки
  * @return string результат ограничения строки
  */
 function limit_str_and_hint($str, $limit = 30)
 {
     //return '<span title="'.type_to_str($str,'encode').'">'.limit_str($str,$limit).'</span>';
     //   return '<span title="'.type_to_str($str,'encode').'" class="truncate" max_len="'.$limit.'">'.type_to_str($str,'encode').'</span>';
     $cutstr = limit_str($str, $limit);
     return '<span title="' . type_to_str($str, 'encode') . '">' . type_to_str($cutstr, 'encode') . '</span>';
 }
Пример #26
0
 /**
  * работа с формой и вывод на экран результатов работы,
  * для получения/сохранения данных для полей формы
  * вызывает либо методы модели данных
  *  - load($id), create($fields), save($id, $fields),
  * либо, если модель не задана, методы вызывавшего класа
  *  - _load($id), _create($fields), _save($id, $fields),
  *
  * @param string $mode режим работы с формой
  *                       "create" - создание новой записи данных
  *                       "modify" - изменение существующей записи данных
  *                       "save"   - проверка и сохранение записи данных
  *                       "filter" - форма фильтрации, изменения объектов нет
  * @param array $form описание формы и ее полей
  *  $form = array(
  *     "name"         => "formname",                имя формы в HTML коде
  *     "id"           => "id_record",               переданный код записи данных, "" - новая запись
  *     "model"        => "account",                 модель для работы с данными формы, при отсутствии - используются методы _load и _save
  *     "view"         => "form_test",               отображение формы
  *     "vars"         => array ("tag" => "value"),  (опционально) массив с переменными для отображения
  *     "redirect"     => "controller",              если задан, то при успехе вызывается контроллер, если не задан - success_view
  *     "success_view" => "form_test_success",       отображение при успешном изменении данных (если не задан redirect)
  *     "no_errors"    => "true",                    (опционально) не выводить текст ошибки под неправильными полями
  *     "action"       => 'http://site.com/page.php' (опционально) перебивает сгенерированный action на заданный
  *     "fields"       => array(                     описание полей формы
  *        "field_name" => array(                    имя поля
  *           "id_field_type"    => "string",        тип данных поля (string, int, money, procent, date, time, date_time, float, bool)
  *           "form_field_type"  => "textarea",      тип HTML поля (text, password, hidden, file, textarea, checkbox, radio, select)
  *           "validation_rules" => "required",      (опционально) правила проверки поля (required, matches, min_length, max_length, exact_length, alpha, alpha_numeric, alpha_dash, numeric, integer, valid_email, valid_ip, valid_base64)
  *           "options" => array(                    (опционально) либо модель списка, либо массив со значениями элементов списка
  *              "value" => "text",                  (только для массива) список значений и строк
  *              ...
  *           ),
  *           "params" => array(                     (только для модели, опционально) список параметров для извлечения списка моделью
  *              "name" => "value",                  (для параметров) список имен параметров и значений
  *              ...
  *           ),
  *           "default"          => "default",       (опционально) значение поля по умолчанию,
  *                                                  если NULL данные при чтении формы не обновляются
  *           "max"    => 32                         (опционально для text) максимальная длина вводимой строки
  *        ),
  *        ...
  *     ),
  *     "kill"         => array(                     список удаляемых блоков в HTML коде
  *        "id_div", ...                             параметр id блока div, который необходимо удалить
  *     )
  *  );
  * @param array $input массив с входными параметрами контроллера
  * @param object $caller объект контроллера, вызвавшего данную модель
  * @return ничего не возвращвет
  */
 public function show_form($mode, &$form, $input, $caller)
 {
     $id = array_key_exists("id", $form) ? $form["id"] : "";
     if ($input->post("form_mode")) {
         $old_mode = $mode;
         $mode = $input->post("form_mode");
     }
     $active_form = '';
     if ($input->post('active_form')) {
         $active_form = $input->post('active_form');
     }
     $CI =& get_instance();
     $CI->load->library("Form_Setter");
     $error = "";
     $field_errors = array();
     $fields = array();
     $rules = array();
     if ("save" == $mode && $active_form == $form['name']) {
         foreach ($form["fields"] as $fname => $field) {
             //$fields[$fname] = isset($fields[$fname]) ? $fields[$fname].', ' : '';
             if (array_key_exists('id_field_type', $form["fields"][$fname])) {
                 $fields[$fname] = type_cast($input->post($fname), $form["fields"][$fname]["id_field_type"]);
             } else {
                 $fields[$fname] = $input->post($fname);
             }
             $form["fields"][$fname]["default"] = $input->post($fname);
             /**
              * Всё те же dirty hacks для datepickera
              * @author Semerenko
              */
             /*         
                         if(in_array($fname,array('from','to'))){
              
                            $form['fields'][$fname]['default'] = date('m.d.Y', type_cast($form["fields"][$fname]["default"],'date'));
                                     
                         }*/
             if (array_key_exists("validation_rules", $field)) {
                 $rules_arr = explode('|', $field["validation_rules"]);
                 foreach ($rules_arr as &$rules_arr_val) {
                     switch ($rules_arr_val) {
                         case "date":
                             $rules_arr_val = "callback_check_date";
                             break;
                         case "datetime":
                             $rules_arr_val = "callback_check_datetime";
                             break;
                         case "hostname":
                             $rules_arr_val = "callback_check_hostname";
                             break;
                         case "url":
                             $rules_arr_val = "callback_check_url";
                             break;
                         case "float":
                             $rules_arr_val = "callback_check_float";
                             break;
                         case "positive":
                             $rules_arr_val = "callback_check_positive";
                             break;
                         case "non_negative":
                             $rules_arr_val = "callback_check_non_negative";
                             break;
                         case "int":
                         case "integer":
                             $rules_arr_val = "callback_check_integer";
                             break;
                         case "ip":
                             $rules_arr_val = "callback_check_ip";
                             break;
                         case "ip_part":
                             $rules_arr_val = "callback_check_ip_part";
                             break;
                         case "ip_re":
                             $rules_arr_val = "callback_check_ip_re";
                             break;
                         default:
                             if (0 === strpos($rules_arr_val, 'min_val') || 0 === strpos($rules_arr_val, 'max_val') || 0 === strpos($rules_arr_val, 'interval') || 0 === strpos($rules_arr_val, 'float') || 0 === strpos($rules_arr_val, 'full_url')) {
                                 $rules_arr_val = "callback_check_" . $rules_arr_val;
                             }
                     }
                     $rules_arr_val = str_replace('md5', 'callback_check_password', $rules_arr_val);
                 }
                 $rules[$fname] = implode('|', $rules_arr);
             }
         }
         $CI->load->library('validation');
         $CI->validation->set_rules($rules);
         $int_validator = count($rules) == 0 || $CI->validation->run();
         $ext_validator = TRUE;
         if (method_exists($caller, '_validator')) {
             $ext_validator = $caller->_validator($fields, $int_validator);
         }
         if ($ext_validator && $int_validator) {
             $error = '';
             if ("save" == $mode) {
                 if (array_key_exists("model", $form)) {
                     $CI->load->model($form["model"]);
                     if ("" == $id) {
                         $error = $CI->{$form}["model"]->create($fields);
                     } else {
                         $error = $CI->{$form}["model"]->save($id, $fields);
                     }
                 } else {
                     if ("" == $id) {
                         $error = $caller->_create($fields);
                     } else {
                         $error = $caller->_save($id, $fields);
                     }
                 }
             }
             if ("" == $error) {
                 if (array_key_exists("redirect", $form)) {
                     redirect($form["redirect"]);
                 } else {
                     $CI->load->view($form["success_view"]);
                     return;
                 }
             }
         } else {
             foreach ($form["fields"] as $fname => $field) {
                 if (isset($CI->validation->{$fname . "_error"})) {
                     if ($CI->validation->{$fname . "_error"} != "") {
                         $field_errors[$fname] = $CI->validation->{$fname . "_error"};
                     }
                 }
             }
             $error = "You must fill all required fields!";
             //$CI->validation->error_string;
             // call form validation error callback:
             if (method_exists($caller, '_validationFailed')) {
                 $caller->_validationFailed($fields, $field_errors);
             }
         }
     }
     if ("modify" == $mode || 'save' == $mode && $active_form != $form['name'] && $old_mode == "modify") {
         if (array_key_exists("model", $form)) {
             $CI->load->model($form["model"]);
             $fields = $CI->{$form}["model"]->load($id);
         } else {
             $fields = $caller->_load($id);
         }
         foreach ($form["fields"] as $fname => $field) {
             if (array_key_exists($fname, $fields)) {
                 if (array_key_exists("default", $form["fields"][$fname]) && is_null($form["fields"][$fname]["default"])) {
                     $form["fields"][$fname]["default"] = "";
                 } else {
                     $form["fields"][$fname]["default"] = type_to_str($fields[$fname], $form["fields"][$fname]["id_field_type"]);
                     /**
                      * Для дэйтпикера dirty hack
                      * Если это поля to & from, то их не нужно форматировать
                      * @author Semerenko
                      */
                     /*
                     if(in_array($fname,array('to','from')) && $form["fields"][$fname]["id_field_type"] == 'date'){
                        // ничего не делать. А всё форматирование пусть будет в else.
                     }else{
                        $form["fields"][$fname]["default"] =
                           type_to_str($fields[$fname], $form["fields"][$fname]["id_field_type"]);
                     }
                     */
                 }
             }
         }
     }
     if (array_key_exists('vars', $form)) {
         $CI->form_setter->set_html($CI->parser->parse($form["view"], $form['vars'], TRUE));
     } else {
         $CI->form_setter->set_html($CI->load->view($form["view"], '', TRUE));
     }
     $CI->form_setter->use_form($form["name"]);
     if (isset($form['action'])) {
         $CI->form_setter->set_action($form['action']);
     } else {
         $CI->form_setter->set_action($CI->config->site_url($CI->uri->uri_string()));
     }
     foreach ($form["fields"] as $fname => $field) {
         switch ($field["form_field_type"]) {
             case "text":
             case "textarea":
             case "password":
             case "file":
             case "hidden":
                 $text = "";
                 if (array_key_exists("default", $field)) {
                     $text = $field["default"];
                 }
                 $max = isset($field['max']) ? $field['max'] : NULL;
                 $CI->form_setter->set_text($fname, $text, $max);
                 break;
             case "checkbox":
             case "radio":
                 if (array_key_exists("default", $field)) {
                     $value = $field["default"];
                     if ("" != $value) {
                         $CI->form_setter->set_state($fname, $value, TRUE);
                     }
                 }
                 break;
             case "select":
                 if (is_array($field["options"])) {
                     $options = $field["options"];
                 } else {
                     $options_model = $field["options"];
                     $CI->load->model($options_model, 'form_temp_model', TRUE);
                     $params = array();
                     if (array_key_exists("params", $field)) {
                         $params = $field["params"];
                     }
                     $options = $CI->form_temp_model->get_list($params);
                     $CI->load->unload_model('form_temp_model');
                 }
                 $default = array_key_exists("default", $field) ? $field["default"] : NULL;
                 $CI->form_setter->set_options($fname, $options, $default);
                 break;
         }
     }
     if ("" != $id) {
         $CI->form_setter->add_hidden("id", $id);
     }
     if ($mode != "filter") {
         $CI->form_setter->add_hidden("form_mode", "save");
         $CI->form_setter->add_hidden("active_form", $form['name']);
     }
     $CI->form_setter->set_error(__($error));
     foreach ($field_errors as $fname => $ferror) {
         $matches = NULL;
         preg_match_all('/{@([\\S]*?)@}/', $ferror, $matches);
         foreach ($matches[1] as $sfname) {
             if (array_key_exists($sfname, $form["fields"])) {
                 if (array_key_exists("display_name", $form["fields"][$sfname])) {
                     $ferror = str_replace("{@{$sfname}@}", "'" . __($form["fields"][$sfname]["display_name"]) . "'", $ferror);
                 }
                 if (array_key_exists('no_errors', $form)) {
                     $ferror = '';
                 }
             }
         }
         $CI->form_setter->set_field_error($fname, $ferror);
     }
     if (array_key_exists("kill", $form)) {
         $CI->form_setter->kill_blocks($form["kill"]);
     }
     $CI->output->set_output($CI->form_setter->get_html());
 }
 /**
  * создание и вывод HTML-кода для управления рекламодателями
  *
  * @return ничего не возвращает
  */
 public function index()
 {
     $this->_set_title(implode(self::TITLE_SEP, array(__('Admin'), __('Manage Advertisers'))));
     $this->_set_help_index("manage_advertisers");
     $this->load->library("form");
     $this->load->helper('periods');
     $form = array('name' => 'manageadvertisers_form', 'view' => 'admin/manage_advertisers/template.html', 'no_errors' => 'true', 'vars' => array('DATEFILTER' => period_html('manageadvertisers')), 'fields' => array('filt' => array('id_field_type' => 'string', 'form_field_type' => 'select', 'options' => array('all' => __('all'), 'active' => __('pl_active'), 'blocked' => __('pl_blocked'), 'deleted' => __('pl_deleted'), 'activation' => __('pl_unapproved'))), 'quicksearch' => array('id_field_type' => 'string', 'form_field_type' => 'text')));
     $this->load->library("Plugins", array('path' => array('admin', 'manage_advertisers_global'), 'interface' => 'Sppc_Admin_ManageAdvertisers_GlobalHandlerInterface'));
     $form['vars']['PLUGIN_JS_FUNCTIONS'] = implode($this->plugins->run('get_js_functions_html', $this));
     data_range_fields($form, 'select', 'today');
     $html = $this->form->get_form_content('modify', $form, $this->input, $this);
     $this->load->model('advertisers');
     $this->_actions($this->input->post('manageadvertisers_action'));
     $this->load->library('Table_Builder');
     $this->table_builder->clear();
     $this->table_builder->insert_empty_cells = true;
     $this->table_builder->init_sort_vars('manageadvertisers', 'id', 'asc');
     $this->load->model('pagination_post');
     $this->pagination_post->set_form_name('manageadvertisers');
     // All pages total
     $total = $this->advertisers->total($this->temporary['manageadvertisers_filt'], $this->range, $this->temporary['manageadvertisers_quicksearch']);
     $this->pagination_post->set_total_records($total['cnt']);
     $this->pagination_post->read_variables('manageadvertisers', 1, $this->global_variables->get('AdvertisersPerPage'));
     $list = $this->advertisers->get($this->temporary['manageadvertisers_page'], $this->temporary['manageadvertisers_per_page'], $this->table_builder->sort_field, $this->table_builder->sort_direction, $this->temporary['manageadvertisers_filt'], $this->range, $this->temporary['manageadvertisers_quicksearch']);
     $col_index = 0;
     $col_alias = array('checkAll' => $col_index++);
     $col_alias['id'] = $col_index++;
     $col_alias['name'] = $col_index++;
     $col_alias['e_mail'] = $col_index++;
     $col_alias['creation_date'] = $col_index++;
     $col_alias['status'] = $col_index++;
     $col_alias['ballance'] = $col_index++;
     $col_alias['impressions'] = $col_index++;
     $col_alias['clicks'] = $col_index++;
     $col_alias['ctr'] = $col_index++;
     $col_alias['spent'] = $col_index++;
     $col_alias['action'] = $col_index++;
     $this->load->library("Plugins", array('path' => array('admin', 'manage_advertisers'), 'interface' => 'Sppc_Admin_ManageAdvertisers_Interface'), 'coupons_plugin');
     $this->coupons_plugin->run('getAdditionalColumns', $col_alias);
     // register additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $col_alias = $hookObj->extendColumnMap($col_alias);
     }
     $this->table_builder->set_cell_content(0, $col_alias['checkAll'], array('name' => 'checkAll', 'extra' => 'onclick="return select_all(\'manageadvertisers\', this)"'), 'checkbox');
     $this->table_builder->sorted_column($col_alias['id'], "id", "ID", "asc");
     $this->table_builder->sorted_column($col_alias['name'], "name", "Full Name", "asc");
     $this->table_builder->sorted_column($col_alias['e_mail'], "e_mail", "E-Mail", "asc");
     $this->table_builder->sorted_column($col_alias['creation_date'], "creation_date", "Join Date", "desc");
     $this->table_builder->sorted_column($col_alias['status'], "status", "Status", "asc");
     $this->table_builder->sorted_column($col_alias['ballance'], "ballance", "Ballance", "desc");
     $this->table_builder->sorted_column($col_alias['impressions'], "impressions", "Impressions", "desc");
     $this->table_builder->sorted_column($col_alias['clicks'], "clicks", "Clicks", "desc");
     $this->table_builder->sorted_column($col_alias['ctr'], "ctr", "CTR", "desc");
     $this->table_builder->sorted_column($col_alias['spent'], "spent", "Spent", "desc");
     $this->table_builder->set_cell_content(0, $col_alias['action'], __("Action"));
     $this->table_builder->add_row_attribute(0, 'class', 'th');
     $this->coupons_plugin->run('getAdditionalFields', $this->table_builder);
     // create additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->createColumns($col_alias, $this->table_builder);
     }
     //прописывание стилей для ячеек
     $this->table_builder->add_col_attribute($col_alias['checkAll'], 'class', '"chkbox"');
     $this->table_builder->add_col_attribute($col_alias['id'], 'class', '"w20 chkbox"');
     $this->table_builder->add_col_attribute($col_alias['creation_date'], 'class', '"w100 center"');
     $this->table_builder->add_col_attribute($col_alias['status'], 'class', '"w100 center"');
     $this->table_builder->add_col_attribute($col_alias['ballance'], 'class', '"right"');
     $this->table_builder->add_col_attribute($col_alias['impressions'], 'class', '"right w100"');
     $this->table_builder->add_col_attribute($col_alias['clicks'], 'class', '"w50 right"');
     $this->table_builder->add_col_attribute($col_alias['ctr'], 'class', '"w50 right"');
     $this->table_builder->add_col_attribute($col_alias['spent'], 'class', '"w50 right"');
     $this->table_builder->add_col_attribute($col_alias['action'], 'class', '"center nowrap"');
     // add styles for additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->defineColumnStyles($col_alias, $this->table_builder);
     }
     $this->table_builder->add_attribute('class', 'xTable');
     $this->coupons_plugin->run('setAdditionalStyle', $this->table_builder);
     // Page Total
     $page_total = array('balance' => 0, 'impressions' => 0, 'clicks' => 0, 'spent' => 0, 'bonus' => 0);
     // register additional per page statistic fields
     foreach ($this->_hooks as $hookObj) {
         $page_total = $hookObj->registerPerPageStatisticFields($page_total);
     }
     $row = 1;
     foreach ($list as $id_entity => $entity) {
         $code = type_to_str($id_entity, 'textcode');
         // Calc total values
         $page_total['balance'] += $entity['ballance'];
         $page_total['impressions'] += $entity['impressions'];
         $page_total['clicks'] += $entity['clicks'];
         $page_total['spent'] += $entity['spent'];
         $page_total['bonus'] += $entity['bonus'];
         // calculate per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $page_total = $hookObj->calculatePerPageStatistic($page_total, $entity);
         }
         // checkbox
         $this->table_builder->set_cell_content($row, $col_alias['checkAll'], array('name' => 'id_entity[]', 'value' => $code, 'extra' => "id=chk{$row} onclick=\"checktr('chk{$row}','tr{$row}')\""), 'checkbox');
         // email
         $this->table_builder->set_cell_content($row, $col_alias['e_mail'], "{$entity['email']}");
         if ('deleted' != $entity['status']) {
             // actions
             $this->table_builder->set_cell_content($row, $col_alias['action'], array('name' => __('Edit'), 'href' => "#edit", 'extra' => "value=\"" . __('Edit') . "\" title=\"" . __('Edit') . "\" class='guibutton floatl mr3 ico ico-edit' onclick='edit(\"{$code}\");'"), 'link');
             $this->table_builder->cell($row, $col_alias['action'])->add_content(array('name' => __('Change Balance'), 'href' => "#balance", 'extra' => "value=\"" . __('Change Balance') . "\" title=\"" . __('Change Balance') . "\" class='guibutton floatl ico ico-money' onclick='balance(\"{$code}\");'"), 'link', ' ');
         }
         switch ($entity['status']) {
             case 'deleted':
                 $this->table_builder->add_row_attribute($row, 'class', "deleted_row");
                 break;
             case 'blocked':
                 $this->table_builder->add_row_attribute($row, 'class', "blocked_row");
                 break;
         }
         // id
         $this->table_builder->set_cell_content($row, $col_alias['id'], $id_entity);
         // name
         $this->table_builder->set_cell_content($row, $col_alias['name'], type_to_str($entity['name'], 'encode'));
         // registration date
         $this->table_builder->set_cell_content($row, $col_alias['creation_date'], type_to_str($entity['join_date'], 'date'));
         // status
         $this->table_builder->set_cell_content($row, $col_alias['status'], __('adv_' . $entity['status']));
         // ballance
         $this->table_builder->set_cell_content($row, $col_alias['ballance'], type_to_str($entity['ballance'], 'money'));
         // impressions
         $this->table_builder->set_cell_content($row, $col_alias['impressions'], type_to_str($entity['impressions'], 'integer'));
         // clicks
         $this->table_builder->set_cell_content($row, $col_alias['clicks'], type_to_str($entity['clicks'], 'integer'));
         // ctr
         $this->table_builder->set_cell_content($row, $col_alias['ctr'], type_to_str($entity['ctr'], 'float') . ' %');
         // spent
         $this->table_builder->set_cell_content($row, $col_alias['spent'], type_to_str($entity['spent'], 'money'));
         // render addtional columns from simple plugins
         $this->coupons_plugin->run('getAdditionalCellsContent', array('table' => &$this->table_builder, 'row' => $row, 'content' => type_to_str($entity['bonus'], 'money')));
         // render additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderRow($row, $col_alias, $entity, $this->table_builder);
         }
         $this->table_builder->add_row_attribute($row, 'id', "tr{$row}");
         $row++;
     }
     if (0 == count($list)) {
         $this->table_builder->insert_empty_cells = false;
         $this->table_builder->set_cell_content(1, 0, '&nbsp;&nbsp;' . __('Records not found'));
         $this->table_builder->cell(1, 0)->add_attribute('colspan', count($col_alias));
         $this->table_builder->cell(1, 0)->add_attribute('class', 'nodata');
         $this->table_builder->remove_col_attribute_value(0, 'class', 'chkbox');
         $this->table_builder->cell(0, 0)->add_attribute('class', 'chkbox');
     } else {
         // Display page total
         $this->table_builder->set_cell_content($row, $col_alias['name'], __("Page total"));
         $this->table_builder->set_cell_content($row, $col_alias['ballance'], type_to_str($page_total['balance'], 'money'));
         $this->table_builder->set_cell_content($row, $col_alias['impressions'], type_to_str($page_total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['clicks'], type_to_str($page_total['clicks'], 'integer'));
         $ctr = $page_total['impressions'] ? $page_total['clicks'] / $page_total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $col_alias['ctr'], type_to_str($ctr, 'float') . ' %');
         $this->table_builder->set_cell_content($row, $col_alias['spent'], type_to_str($page_total['spent'], 'money'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'pagetotal');
         // render additional columns from simple plugins
         $this->coupons_plugin->run('getAdditionalCellsContent', array('table' => &$this->table_builder, 'row' => $row, 'content' => type_to_str($page_total['bonus'], 'money')));
         // render per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderPageStatisticRow($row, $col_alias, $page_total, $this->table_builder);
         }
         $row++;
         // Display all pages total
         $this->table_builder->set_cell_content($row, $col_alias['name'], __("Total"));
         $this->table_builder->set_cell_content($row, $col_alias['ballance'], type_to_str($total['balance'], 'money'));
         $this->table_builder->set_cell_content($row, $col_alias['impressions'], type_to_str($total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['clicks'], type_to_str($total['clicks'], 'integer'));
         $ctr = $total['impressions'] ? $total['clicks'] / $total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $col_alias['ctr'], type_to_str($ctr, 'float') . ' %');
         $this->table_builder->set_cell_content($row, $col_alias['spent'], type_to_str($total['spent'], 'money'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'alltotal');
         // render additional columns from simple plugins
         $this->coupons_plugin->run('getAdditionalCellsContent', array('table' => &$this->table_builder, 'row' => $row, 'content' => type_to_str($total['bonus'], 'money')));
         // render summary statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderSummaryRow($row, $col_alias, $total, $this->table_builder);
         }
     }
     // Устанавливаем возможность выбора колонок
     $this->table_builder->use_select_columns();
     $invariable_columns = array($col_alias['id'], $col_alias['name'], $col_alias['e_mail'], $col_alias['action']);
     $this->table_builder->set_invariable_columns($invariable_columns);
     $html = str_replace('<%ADVERTISERS%>', $this->table_builder->get_sort_html(), $html);
     $html = str_replace('<%PAGINATION%>', $this->pagination_post->create_form(), $html);
     $buttons = $this->load->view('admin/manage_advertisers/buttons.html', '', TRUE);
     $html = str_replace('<%BUTTONST%>', str_replace('<%ID%>', 'top_', $buttons), $html);
     $html = str_replace('<%BUTTONSB%>', str_replace('<%ID%>', 'bottom_', $buttons), $html);
     $html = str_replace('<%COLUMNS%>', $this->table_builder->get_columns_html(), $html);
     $this->_set_content($html);
     $this->_display();
 }
Пример #28
0
 /**
  * возвращает javascript-код для определения текста периода по выбору options
  *
  * @return string javascript-код
  */
 function get_all_periods()
 {
     $all = array('today', 'yesterday', 'lastweek', 'lastbusinessweek', 'thismonth', 'lastmonth', 'alltime');
     $fields['mode'] = 'select';
     $code = '';
     foreach ($all as $per) {
         $fields['period'] = $per;
         $range = data_range($fields);
         $from = type_to_str($range['from'], 'date');
         $to = type_to_str($range['to'], 'date');
         $code .= "case '{$per}': return '{$from}-{$to}';\n";
     }
     $code .= "case 'start': return '" . type_to_str(0, 'date') . "';\n";
     $code .= "case 'end': return '" . type_to_str(mktime(), 'date') . "';\n";
     return $code;
 }
Пример #29
0
 /**
  * подготавливает данные статистики для заданного периода времени 
  *
  * @return ничего не возвращает
  */
 protected function _stat($range)
 {
     //load hooks
     $hooks = array();
     $pluginsConfig = Zend_Registry::getInstance()->get('pluginsConfig');
     if (isset($pluginsConfig->advertiser->dashboard_blocks->summary_performance)) {
         foreach ($pluginsConfig->advertiser->dashboard_blocks->summary_performance as $hookClass) {
             $hookObj = new $hookClass();
             if ($hookObj instanceof Sppc_Advertiser_Dashboard_SummaryPerformanceInterace) {
                 $hooks[] = $hookObj;
             }
         }
     }
     $this->range = $range;
     $stat = $this->entity->get_stat($this->user_id, $range['from'], $range['to']);
     $ctr = $stat['impressions'] ? $stat['clicks'] * 100 / $stat['impressions'] : 0;
     $this->dashboard['TOTALSPENT'] = type_to_str($stat['spent'], 'money');
     $this->dashboard['TOTALIMPRESSIONS'] = type_to_str($stat['impressions'], 'integer');
     $this->dashboard['TOTALCLICKS'] = type_to_str($stat['clicks'], 'integer');
     $this->dashboard['CTR'] = type_to_str($ctr, 'float') . " %";
     // add additional performance fields from plugins
     foreach ($hooks as $hookObj) {
         $this->dashboard['ADDITIONAL_PERFORMANCE_FIELDS'] = $hookObj->addSummaryPerformanceFields($stat, $this->dashboard['ADDITIONAL_PERFORMANCE_FIELDS']);
     }
 }
 /**
  * Отправляет ответ (HTML таблицу) на запрос списка сайтов выбранного канала
  * Канал указывается в GET-параметре id_channel
  */
 public function get_sites($id_channel, $date_from = null, $date_to = null)
 {
     // Add plugins to hook
     $this->add_plugins('channel_sites');
     $message = '';
     if (is_null($date_from) || is_null($date_to)) {
         $fields = period_load('manage_sites_channels', 'select', 'alltime');
         $this->date_range = data_range($fields);
     } else {
         $this->date_range = array('from' => $date_from, 'to' => $date_to);
     }
     $action = $this->input->post('manage_action');
     if ($action) {
         $id_channel = $this->input->post('id_channel');
         switch ($action) {
             case 'pause':
                 $this->pause_channel_sites();
                 break;
             case 'resume':
                 $this->resume_channel_sites();
                 break;
             case 'delete':
                 $message = $this->delete_channel_sites();
                 break;
         }
     }
     $this->pagination_post->clear();
     $this->pagination_post->set_form_name('manage_sites_channels_site_' . $id_channel);
     $total_params = array('channel_id_filter' => $id_channel, 'date_filter' => $this->date_range, 'revenue_field' => $this->revenue_field, 'id_entity' => $this->user_id);
     $total = $this->site->get_count($total_params);
     $this->pagination_post->set_total_records($total['count']);
     $this->pagination_post->read_variables('manage_sites_channels_site', 1, 10, FALSE, 'manage_sites_channels_site_' . $id_channel);
     //настройка параметров разбиения на страницы
     $pagination = $this->pagination_post->create_form();
     $col_index = 0;
     $col_alias = array('chkboxes' => $col_index++, 'id' => $col_index++, 'url' => $col_index++, 'name' => $col_index++, 'status' => $col_index++, 'impressions' => $col_index++, 'alternative_impressions' => $col_index++, 'clicks' => $col_index++, 'ctr' => $col_index++, 'revenue' => $col_index++, 'action' => $col_index++);
     // add addtional columns to column map from plugins
     foreach ($this->_hooks as $hookObj) {
         $col_alias = $hookObj->extendColumnMap($col_alias);
     }
     $this->table_builder->clear();
     $this->table_builder->init_sort_vars('manage_sites_channels_site', 'id', 'desc', FALSE, 'manage_sites_channels_site_' . $id_channel);
     $this->table_builder->sorted_column($col_alias['id'], 'id', 'ID', 'asc');
     $this->table_builder->sorted_column($col_alias['name'], 'name', 'Title', 'asc');
     $this->table_builder->sorted_column($col_alias['url'], 'url', 'Site URL', 'asc');
     $this->table_builder->sorted_column($col_alias['status'], 'status', 'Status', 'asc');
     $this->table_builder->sorted_column($col_alias['impressions'], 'impressions', 'Impressions', 'desc');
     $this->table_builder->sorted_column($col_alias['alternative_impressions'], 'alternative_impressions', 'Alternative Impressions', 'desc');
     $this->table_builder->sorted_column($col_alias['clicks'], 'clicks', 'Clicks', 'desc');
     $this->table_builder->sorted_column($col_alias['ctr'], 'ctr', 'CTR', 'desc');
     $this->table_builder->sorted_column($col_alias['revenue'], 'revenue', 'Revenue', 'desc');
     //$this->table_builder->sorted_column(9,'creation_date','Creation Date','desc');
     //добавление ячеек-заголовка
     $this->table_builder->set_cell_content(0, $col_alias['chkboxes'], array('name' => 'checkAll', 'extra' => 'onclick="return select_all(\'manage_sites_channels_site\', this)"'), 'checkbox');
     $this->table_builder->set_cell_content(0, $col_alias['action'], __('Action'));
     // create additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->createColumns($col_alias, $this->table_builder);
     }
     $this->table_builder->cell(0, $col_alias['chkboxes'])->add_attribute('class', 'simpleTitle');
     $this->table_builder->cell(0, $col_alias['action'])->add_attribute('class', 'simpleTitle');
     //прописывание стилей для ячеек
     $this->table_builder->add_col_attribute($col_alias['chkboxes'], 'class', '"chkbox"');
     $this->table_builder->add_col_attribute($col_alias['id'], 'class', 'w20');
     //$this->table_builder->add_col_attribute(3, 'class', 'w150');
     //$this->table_builder->add_col_attribute(3, 'class', '"w80 center"');
     $this->table_builder->add_col_attribute($col_alias['status'], 'class', 'w80 center');
     $this->table_builder->add_col_attribute($col_alias['impressions'], 'class', 'w80 right');
     $this->table_builder->add_col_attribute($col_alias['alternative_impressions'], 'class', 'w80 right');
     $this->table_builder->add_col_attribute($col_alias['clicks'], 'class', 'w50 right');
     $this->table_builder->add_col_attribute($col_alias['ctr'], 'class', 'w50 right');
     //$this->table_builder->add_col_attribute(8, 'class', '"w80 right"');
     $this->table_builder->add_col_attribute($col_alias['revenue'], 'class', 'w100 center');
     $this->table_builder->add_col_attribute($col_alias['action'], 'class', 'nowrap center');
     // add styles for additional columns from plugins
     foreach ($this->_hooks as $hookObj) {
         $hookObj->defineColumnStyles($col_alias, $this->table_builder);
     }
     $this->table_builder->add_row_attribute(0, 'class', 'th');
     //установка атрибутов таблицы
     $this->table_builder->add_attribute('class', 'xTable');
     //or set style here
     $params = array('fields' => 'sites.id_site as id, ' . 'sites.url, site_channels.status, sites.name, SUM(impressions) as impressions, ' . 'SUM(alternative_impressions) as alternative_impressions, SUM(clicks) as clicks, ' . '(SUM(clicks)/SUM(impressions)*100) as ctr, UNIX_TIMESTAMP(sites.creation_date) as ' . 'creation_date, SUM(' . $this->revenue_field . ') as revenue, ' . 'e.id_entity AS pub_entity', 'order_by' => $this->table_builder->sort_field, 'order_direction' => $this->table_builder->sort_direction, 'channel_id_filter' => $id_channel, 'date_filter' => $this->date_range, 'id_entity' => $this->user_id, 'offset' => ($this->pagination_post->get_page() - 1) * $this->pagination_post->get_per_page(), 'limit' => $this->pagination_post->get_per_page());
     // Add addtional fields to $params['fields']
     foreach ($this->_hooks as $hookObj) {
         if (method_exists($hookObj, 'extendColumnQueryFields')) {
             $params = $hookObj->extendColumnQueryFields($params, 'stat_sites_channels');
         }
     }
     $sites_array = $this->site->get_list($params);
     //echo $this->db->last_query();
     if (is_null($sites_array)) {
         $sites_array = array();
     }
     //$this->table_builder->add_from_array ($sites_array);
     $data_rows_conut = sizeof($sites_array);
     //модификация контента отдельных столбцов (ссылки, чекбоксы)
     $code_channel = type_to_str($id_channel, 'textcode');
     $page_total = array('revenue' => 0, 'impressions' => 0, 'alternative_impressions' => 0, 'clicks' => 0);
     // register additional per page statistic fields
     foreach ($this->_hooks as $hookObj) {
         $page_total = $hookObj->registerPerPageStatisticFields($page_total);
     }
     $pub_entity = NULL;
     for ($i = 0; $i < $data_rows_conut; $i++) {
         $pub_entity = $sites_array[$i]['pub_entity'];
         $page_total['impressions'] += $sites_array[$i]['impressions'];
         $page_total['alternative_impressions'] += $sites_array[$i]['alternative_impressions'];
         $page_total['clicks'] += $sites_array[$i]['clicks'];
         $page_total['revenue'] += $sites_array[$i]['revenue'];
         // calculate per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $page_total = $hookObj->calculatePerPageStatistic($page_total, $sites_array[$i]);
         }
         $code_site = type_to_str($sites_array[$i]['id'], 'textcode');
         if ('deleted' == $sites_array[$i]['status']) {
             $this->table_builder->set_cell_content($i + 1, $col_alias['chkboxes'], '');
             $this->table_builder->set_cell_content($i + 1, $col_alias['action'], '');
             $this->table_builder->add_row_attribute($i + 1, 'class', 'deleted_row');
         } else {
             if ($sites_array[$i]['pub_entity'] == $this->user_id) {
                 $this->table_builder->set_cell_content($i + 1, $col_alias['chkboxes'], array('name' => 'id_site[]', 'value' => $sites_array[$i]['id'], 'extra' => 'id=chk' . $i . ' onclick="checktr(\'chk' . $i . '\',\'tr' . ($i + 1) . '\')"'), 'checkbox');
                 $this->table_builder->set_cell_content($i + 1, $col_alias['action'], array('name' => __('Edit'), 'href' => $this->site_url . $this->index_page . $this->role . '/edit_site/index/' . $sites_array[$i]['id'], 'extra' => 'jframe="no" class="guibutton floatl ico ico-edit" value="{@Edit@}" title="{@Edit@}" onclick="top.location=\'' . $this->site_url . $this->index_page . $this->role . '/edit_site/index/' . $sites_array[$i]['id'] . '\'" target="_top"'), 'link');
                 $this->table_builder->cell($i + 1, $col_alias['action'])->add_content(array('name' => __('Get code'), 'href' => '#get_code', 'extra' => 'jframe="no" class="guibutton floatl ico ico-puzzle2" value="{@Get code@}" title="{@Get code@}" onclick="top.get_channel_code(\'' . $sites_array[$i]['id'] . '\',\'' . $id_channel . '\')"'), 'link', ' ');
                 $this->table_builder->cell($i + 1, $col_alias['action'])->add_content(array('name' => __('Layout'), 'href' => $this->site_url . $this->index_page . $this->role . '/edit_site_channel_layout/index/' . $sites_array[$i]['id'], 'extra' => 'jframe="no" class="guibutton floatl ico ico-site-layout" value="{@Layout@}" title="{@Layout@}" onclick="top.location=\'' . $this->site_url . $this->index_page . $this->role . '/edit_site_channel_layout/index/' . $sites_array[$i]['id'] . '\'" target="_top"'), 'link', '');
             } else {
                 $this->table_builder->set_cell_content($i + 1, $col_alias['chkboxes'], '');
                 $this->table_builder->set_cell_content($i + 1, $col_alias['action'], '');
             }
             $this->table_builder->cell($i + 1, $col_alias['action'])->add_content(array('name' => __('View Ads'), 'href' => '#view_ads', 'extra' => 'jframe="no" class="guibutton floatl ico ico-viewads" value="' . __("View Ads") . '" title="' . __("View Ads") . '"  onclick="top.view_ads(\'' . $code_site . '\',\'' . $code_channel . '\')"'), 'link', ' ');
             $this->table_builder->add_row_attribute($i + 1, 'id', 'tr' . ($i + 1));
             if ('paused' == $sites_array[$i]['status']) {
                 $this->table_builder->add_row_attribute($i + 1, 'class', 'blocked_row');
             }
         }
         $this->table_builder->set_cell_content($i + 1, $col_alias['id'], $sites_array[$i]['id']);
         $this->table_builder->set_cell_content($i + 1, $col_alias['name'], limit_str_and_hint($sites_array[$i]['name'], 30));
         $this->table_builder->set_cell_content($i + 1, $col_alias['url'], array('name' => $sites_array[$i]['url'], 'href' => 'http://' . $sites_array[$i]['url'], 'extra' => 'target="_blank"'), 'link');
         $this->table_builder->set_cell_content($i + 1, $col_alias['status'], __('site_' . $sites_array[$i]['status']));
         $this->table_builder->set_cell_content($i + 1, $col_alias['impressions'], type_to_str($sites_array[$i]['impressions'], 'integer'));
         $this->table_builder->set_cell_content($i + 1, $col_alias['alternative_impressions'], type_to_str($sites_array[$i]['alternative_impressions'], 'integer'));
         $this->table_builder->set_cell_content($i + 1, $col_alias['clicks'], type_to_str($sites_array[$i]['clicks'], 'integer'));
         $this->table_builder->set_cell_content($i + 1, $col_alias['ctr'], type_to_str($sites_array[$i]['ctr'], 'float') . ' %');
         $this->table_builder->set_cell_content($i + 1, $col_alias['revenue'], type_to_str($sites_array[$i]['revenue'], 'money'));
         //$this->table_builder->set_cell_content ( $i + 1, 9, type_to_str($sites_array [$i]['creation_date'], 'date'));
         // render additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderRow($i + 1, $col_alias, $sites_array[$i], $this->table_builder);
         }
     }
     //end модификация контента отдельных столбцов (ссылки, чекбоксы)
     if (0 == $data_rows_conut) {
         $this->table_builder->insert_empty_cells = false;
         $this->table_builder->set_cell_content(1, 0, __('Records not found'));
         $this->table_builder->cell(1, 0)->add_attribute('colspan', count($col_alias));
         $this->table_builder->cell(1, 0)->add_attribute('class', 'nodata');
         $this->table_builder->remove_col_attribute_value(0, 'class', 'chkbox');
         $this->table_builder->cell(0, 0)->add_attribute('class', 'chkbox');
     } else {
         $row = $data_rows_conut + 1;
         $this->table_builder->set_cell_content($row, $col_alias['name'], __("Page total"));
         //$this->table_builder->cell($row, 2)->add_attribute('colspan', 2);
         $this->table_builder->set_cell_content($row, $col_alias['impressions'], type_to_str($page_total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['alternative_impressions'], type_to_str($page_total['alternative_impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['clicks'], type_to_str($page_total['clicks'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['revenue'], type_to_str($page_total['revenue'], 'money'));
         $ctr = $page_total['impressions'] ? $page_total['clicks'] / $page_total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $col_alias['ctr'], type_to_str($ctr, 'procent'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'pagetotal');
         // render per page statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderPageStatisticRow($row, $col_alias, $page_total, $this->table_builder);
         }
         $row++;
         $this->table_builder->set_cell_content($row, $col_alias['name'], __("Total"));
         //$this->table_builder->cell($row, 2)->add_attribute('colspan', 2);
         $this->table_builder->set_cell_content($row, $col_alias['impressions'], type_to_str($total['impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['alternative_impressions'], type_to_str($total['alternative_impressions'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['clicks'], type_to_str($total['clicks'], 'integer'));
         $this->table_builder->set_cell_content($row, $col_alias['revenue'], type_to_str($total['revenue'], 'money'));
         $ctr = $total['impressions'] ? $total['clicks'] / $total['impressions'] * 100 : 0;
         $this->table_builder->set_cell_content($row, $col_alias['ctr'], type_to_str($ctr, 'procent'));
         $this->table_builder->clear_row_attributes($row);
         $this->table_builder->add_row_attribute($row, 'class', 'alltotal');
         // render summary statistic for additional columns from plugins
         foreach ($this->_hooks as $hookObj) {
             $hookObj->renderSummaryRow($row, $col_alias, $total, $this->table_builder);
         }
     }
     // Устанавливаем возможность выбора колонок
     $this->table_builder->use_select_columns();
     $invariable_columns = array($col_alias['chkboxes'], $col_alias['id'], $col_alias['url'], $col_alias['action']);
     $this->table_builder->set_invariable_columns($invariable_columns);
     //$this->table_builder->add_attribute ( 'class', 'xTable' ); //or set style here
     $table = $this->table_builder->get_sort_html();
     $content = $this->parser->parse($this->views_paths['iframe_sites_list'], array('MESSAGE' => json_encode(array('message' => __($message))), 'SITES_TABLE' => $table, 'COLUMNS' => $this->table_builder->get_columns_html(), 'PAGINATION' => $pagination, 'ID_CHANNEL' => $id_channel, 'JFRAME_ACTION' => '<%SITEURL%><%INDEXPAGE%>' . $this->role . '/manage_sites_channels/get_sites/' . $id_channel . '/' . $date_from . '/' . $date_to . '/all'), TRUE);
     if ($pub_entity != $this->user_id) {
         $content = preg_replace("/\\<a name=\"chan_buttons_begin\"\\>\\<\\/a\\>[\\s\\S]*?\\<a name=\"chan_buttons_end\"\\>\\<\\/a\\>/", '', $content);
     }
     //$this->template = "common/parent/iframe.html";
     $this->template = "common/parent/jq_iframe.html";
     $this->_set_content($content);
     $this->_display();
 }