} else { x = cnv2(a); y = cnv2(b); return ((x[0] < y[0]) ? -1 : ((x[0] > y[0]) ? 1 : ((x[1] < y[1]) ? -1 : ((x[1] > y[1]) ? 1 : 0)) )); } }; jQuery.fn.dataTableExt.oSort['click-data-desc'] = function(a, b) { if(a.indexOf('sortdata') + 1) { a = $('.' + $('#type_selected').val() + ' .sortdata', $('<div>' + a + '</div>')).text().split('|'); b = $('.' + $('#type_selected').val() + ' .sortdata', $('<div>' + b + '</div>')).text().split('|'); return srt_data(a, b, 0, -1); } else { x = cnv2(a); y = cnv2(b); return ((x[0] < y[0]) ? 1 : ((x[0] > y[0]) ? -1 : ((x[1] < y[1]) ? 1 : ((x[1] > y[1]) ? -1 : 0)) )); } }; </script> <?php echo tpx('report_toolbar'); echo '<script>'; echo "update_cols('" . $col . "', 0);"; if ($part == 'all') { echo "update_cols('currency_" . $currency . "', 1);"; } echo '</script>'; ?> <input type='hidden' id='usd_selected' value='1'> <input type='hidden' id='type_selected' value='cnt'> <input type='hidden' id='sales_selected' value='1'>
<?php if (!$include_flag) { exit; } // Настройки БД существуют if ($settings[0]) { // Запрашиваем данные админа if (!$auth_info[0] and $auth_info[1] == 'register_new') { echo tpx('install_register_admin'); } } else { // Настройки надо спросить у юзера и сохранить if ($settings[1] == 'cache_not_writable') { // Рассказываем, как открыть на запись папку кэша echo tpx('install_cache_not_writable'); } else { // Ввод данных для подключения к базе echo tpx('install_connect_db'); } }
$main_content = ob_get_contents(); ob_end_clean(); } else { $main_content = ''; } if ($is_authorized) { // Меню сверху include _TRACK_SHOW_COMMON_PATH . "/templates/menu-top.inc.php"; // Меню слева $sidebar = _TRACK_SHOW_COMMON_PATH . '/templates/' . (in_array($page_sidebar, $page_sidebar_allowed) ? $page_sidebar : 'sidebar-left.inc.php'); include $sidebar; echo '<div class="page-content' . $menu_toggle_class . '">'; } ?> <?php if ($is_authorized) { echo load_plugin('payreminder'); echo load_plugin('expiry'); } echo $main_content; if ($is_authorized) { echo '</div>'; } ?> <?php echo tpx('footer'); ?> </body> </html>
<?php if (!$include_flag) { exit; } // Заголовок отчёта с названием, временными рамками и кнопками разбиения по времени echo '<form method="post" name="datachangeform" id="range_form"> <div class="pull-left"><h3>' . $var['report_name'] . '</h3></div> ' . tpx('block_range_' . $var['timestep'], $var) . ' <div class="pull-right" style="margin-top:18px;">' . tpx('report_timestep', $var) . '</div> </form> <div class="row"></div>'; echo tpx('report_breadcrumbs');
// Добавляем глобальные уведомления if ($global_ntf_cnt > 0) { $i = 0; foreach ($global_notifications as $cur) { $i++; switch ($cur) { case 'CRONTAB_CLICKS_NOT_INSTALLED': $process_clicks_path = realpath(_TRACK_SHOW_PATH . '/process_clicks.php'); $title = 'Статистика переходов не обновляется'; $description = '<p>Добавьте в cron запуск следующего файла:<br /><code>' . $process_clicks_path . '</code>,<br /> с интервалом в одну минуту.</p><p>Данный скрипт отвечает за импорт данных о переходах в базу данных.</p><p>Строка запуска может выглядеть примерно так:</p><p><code>*/1 * * * * /usr/bin/php5 /var/www/cpatracker.ru/track-show/process_clicks.php >/dev/null</code></p><p>Для редактирования cron файла используйте панель управления сервером или команду "crontab -e" из консоли.</p><p>После первого успешного обновления статистики данное сообщение исчезнет. При возникновении проблем обратитесь в службу технической поддержки вашего хостинга.</p>'; break; case 'CRONTAB_POSTBACK_NOT_INSTALLED': $process_postback_path = realpath(_TRACK_SHOW_PATH . '/process_postback.php'); $title = 'Статистика продаж не обновляется'; $description = '<p>Добавьте в cron запуск следующего файла:<br /><code>' . $process_postback_path . '</code>,<br /> с интервалом в одну минуту.</p><p>Данный скрипт отвечает за импорт данных о продажах в базу данных.</p><p>Строка запуска может выглядеть примерно так:</p><p><code>*/1 * * * * /usr/bin/php5 /var/www/cpatracker.ru/track-show/process_postback.php >/dev/null</code></p><p>Для редактирования cron файла используйте панель управления сервером или команду "crontab -e" из консоли.</p><p>После первого успешного обновления данных о продажах данное сообщение исчезнет. При возникновении проблем обратитесь в службу технической поддержки вашего хостинга.</p>'; break; case 'API_CONNECT_ERROR': $title = 'Произошла ошибка связи во время синхронизации с трекером'; $description = '<p>Не удалось получить правильый ответ при отправке данных на трекер. Проверьте, пожалуйста, доступность удалённых трекеров и выполните синхронизацию вручную.<br /><a href="?ajax_act=sync_slaves" class="btn btn-default">Выполнить синхронизацию</a>.</p>'; break; default: continue; break; } $ntf[] = array('title' => $title, 'text' => $description); } } $ntf = array_merge($ntf, $user_ntf_arr); $assign = array('cnt' => $user_ntf_cnt, 'cnt_system' => $global_ntf_cnt, 'cnt_unread' => $user_ntf_unread_cnt, 'status' => $status, 'notifications' => $ntf); echo tpx('notifications', $assign);
$var['parent'] = ''; $var['pre_name'] = ''; echo tpx('report_click_all_row', $var); if (!empty($r['sub'])) { $i = 1; $cnt = count($r['sub']); foreach ($r['sub'] as $r0) { $var['r'] = $r0; $var['sub'] = 1; $var['class'] = 'sub'; $var['parent'] = $r; if ($cnt == $i) { $var['class'] .= ' last'; } //$var['pre_name'] = ($cnt == $i) ? '└' : '├'; echo tpx('report_click_all_row', $var); $i++; } } } ?> </tbody> </table> </div> <script> $(document).ready(function() { $('.hidecont').show(); // Конвертируем сложные для сортировки данные (валюта, проценты) в нормальные числа
$sparkline++; if (!empty($r['sub'])) { $i = 1; $cnt = count($r['sub']); foreach ($r['sub'] as $r0) { $row_total_data = array(); // суммирование по строкам $var['r'] = $r0; $var['sub'] = 1; $var['class'] = 'sub'; $var['parent'] = $r; if ($cnt == $i) { $var['class'] .= ' last'; } //dmp($r0); echo tpx('report_daily_lp_row', $var); $sparkline++; $i++; } } } echo "</tbody>"; // Итоговая строка echo "<tfoot><tr><td " . ($var['report_params']['mode'] == 'popular' ? ' colspan="2"' : '') . ">Итого</td>"; foreach ($var['arr_dates'] as $cur_date) { $var['r'] = $column_total_data[$cur_date]; echo '<td>' . get_clicks_report_element2($var, false) . '</td>'; } echo '<td>' . get_clicks_report_element2($table_total_data, false) . '</td>'; echo "</tr></tfoot>"; echo "</table></div>";
<label class="btn btn-default active" onclick='update_stats("currency_usd");'><input type="radio" name="option_currency">$</label> </div> </div> </div> <!-- ./col-md-12 --> </div> <!-- ./row --> <?php } } elseif ($params['part'] == 'all') { // Тулбар ?> <div id="report_toolbar" class="row"> <div class="col-md-12"> <div class="form-group"> <?php // В общем тулбаре панель переключения конверсий следует в начале echo tpx('report_conv', $assign); // Этот селектор не нужен, если нет конверсий if ($params['conv'] != 'none') { ?> <div id="rt_sale_section" class="btn-group margin5rb" <?php if ($params['mode'] != 'popular' and 0) { ?> data-toggle="buttons"<?php } ?> > <?php // Изначально этот фильтр позволял переключать колонки без перезагрузки страницы, потому что они они все уже были на странице. // Но с появлением режима "Популярные" появляется необходимость перезагружать страницу, а с появлением фильтров конверсии (Все, Только продажи, и.т.д.) эта необходимость переходит на все отчёты // Все действия, продажи, лиды foreach ($option_leads_type as $k => $v) {
db_query($q); $q = "select count(id) as `cnt` from `tbl_sources`"; $rs = db_query($q); $r = mysql_fetch_assoc($rs); $out = array('total' => intval($r['cnt']), 'have_favorits' => $r['cnt'] > 0 ? 1 : 0); echo json_encode($out); exit; break; case 'restore_link': $ids = rq('id', -2); $cat_type = rq('cat_type'); $cat_id = rq('cat_id', 2); delete_offer($ids, 0); cache_outs_update($ids); $offers_arr = offers_total($cat_type, $cat_id); $out = array('total' => $offers_arr['total'], 'total_html' => tpx('links_table_total', $offers_arr), 'more' => $offers_arr['more']); echo json_encode($out); exit; break; // ну а вдруг кто-то уберёт exit ;) // ну а вдруг кто-то уберёт exit ;) case 'delete_sale': $conversion_id = rq('conversion_id', 2); delete_sale_by_id($conversion_id); exit; break; case 'get_sales': $sales = get_sales($_POST['sType'], $_POST['sStart'], $_POST['sEnd']); echo json_encode($sales); exit; break;
echo '<form method="post" name="datachangeform" id="range_form"> <div id="per_day_range" class="pull-right" style="margin-top:0px; margin-bottom:10px;"> <span class="glyphicon glyphicon-calendar"></span> <span id="cur_day_range">'.date('d.m.Y', strtotime($from)).' - '. date('d.m.Y', strtotime($to)).'</span> <b class="caret"></b> <input type="hidden" name="from" id="sStart" value=""> <input type="hidden" name="to" id="sEnd" value=""> </div> <div><'.$report_name_tag.'>'._e($report_name).'</'.$report_name_tag.'></div> </form>'; */ // Группировки aka разрезы ?> <div class="row"> </div> <?php echo tpx('report_groups', $_REQUEST); ?> <script> $(document).ready(function() { jQuery.fn.dataTableExt.oApi.fnSortNeutral = function ( oSettings ){ oSettings.aaSorting = [[1, "desc", 0]]; oSettings.aiDisplay.sort( function (x,y) { return x-y; } ); oSettings.aiDisplayMaster.sort( function (x,y) { return x-y; } ); oSettings.oApi._fnReDraw( oSettings ); }; jQuery.fn.dataTableExt.oSort['click-data-asc'] = function(a, b) {
$cat_types = array('favorits' => 'Избранное', 'all' => 'Все офферы', 'archive' => 'Архив'); $category_id = rq('category_id', 2); $offset = rq('offset', 2); $limit = rq('limit', 2, 1000); $cat_type = rq('type'); // Существует ли тип, который нам прислали? if (empty($cat_type) or !array_key_exists($cat_type, $cat_types)) { $cat_type = 'all'; } $result = get_links_categories_list(); $arr_categories = array_merge(array(array('id' => 0, 'category_caption' => 'Без категории')), $result['categories']); $arr_categories_count = $result['categories_count']; // Свежеудаленная категория $delete_cat = rq('delete_cat', 2); if (!empty($delete_cat)) { $delete_category_info = category_info($delete_cat); } /* @var $cat_type string переменная определена при рендеринге меню */ $arr_offers = get_offers_list($cat_type, $category_id, $offset, $limit); if ($arr_offers['error']) { redirect(full_url() . '?page=links'); } if ($arr_offers['cat_name'] == '{empty}') { $page_headers[0] = ''; $page_headers[1] = $cat_types[$cat_type]; } else { $page_headers[0] = $cat_types[$cat_type]; $page_headers[1] = $arr_offers['cat_name']; } echo tpx('links');
<?php if (!$include_flag) { exit; } if ($var['report_params']['mode'] == 'lp_offers' and $var['report_params']['part'] == 'all') { echo tpx('report_click_all_sub', $var); } else { if ($var['report_params']['part'] == 'all') { if ($var['report_params']['mode'] == 'lp') { echo tpx('report_click_all_lp', $var); } elseif ($var['report_params']['mode'] == 'popular') { echo tpx('report_click_all_pop', $var); } else { echo tpx('report_click_all', $var); } } else { if ($var['report_params']['mode'] == 'lp_offers') { echo tpx('report_daily_lp', $var); } else { echo tpx('report_daily', $var); } } }
} ?> </tbody> <tfoot id="offers_footer"> <tr> <td> <form role="form"> <div class="checkbox"> <label> <input type="checkbox" value="" class="i-blue check-all" name="check-all"> </label> </div> </form> </td> <td colspan="3" id="offers_footer_total"><?php echo tpx('links_table_total', $arr_offers); ?> </td> <td colspan="2" class="text-right"><a class="hover-underline" href="#" id="offers_footer_all" <?php if ($arr_offers['more'] == 0) { echo 'style="display: none;"'; } ?> >Показать все</a></td> </tr> </tfoot> </table> </div> <?php } ?>