<?php /** * Created by PhpStorm. * User: Administrator * Date: 25/12/2015 * Time: 2:22 CH */ if (!defined('BASEPATH')) exit('No direct script access allowed'); include FCPATH . "/application/third_party/PHPExcel.php"; class CmsRanking extends CI_Controller { public function __construct() { parent::__construct(); date_default_timezone_set("Asia/Ho_Chi_Minh"); // $this->load->model('track_model'); $this->load->model('user_model'); $this->load->model('report_views_daily_model'); $this->load->model('report_views_weekly_model'); $this->load->model('report_views_monthly_model'); $this->load->model('crawler_listen_history_model'); $this->load->model('actionlog_model'); } /** * BXH theo ngày --------------------------------------------------------------------------------------------------- */ public function listByDaily() { // Ghi log $this->actionlog_model->add('RANKING', 'BXH Ngày.', 'Report_views_daily_model', 'report_views_daily', null); $this->_data['functionName'] = 'BXH Theo ngày'; $this->_data['action'] = 'listByDaily'; $this->_data['titlePage'] = 'BXH Theo ngày'; $this->_data['loadPage'] = 'backend/cms_ranking/list_by_daily_view'; $this->load->view('backend/admin_template_view', $this->_data); } public function listByDailyAjax() { $data = array(); $fByName = $this->input->post('fByName'); $fByName = str_replace('/', '-', $fByName); $pageId = $this->input->post('pageId'); // $pageId = ($pageId == 0) ? 1 : $pageId; // $limit = 100; $offset = ($pageId - 1) * $limit; $data['offset'] = ($pageId - 1) * $limit; $totalRecord = $this->report_views_daily_model->cmsCountAll($fByName); $data['pagination'] = MyHelper::genPaginationLink($totalRecord, $limit, $pageId); $data['listData'] = $this->report_views_daily_model->cmsGetPagination($limit, $offset, $fByName); $data['previousRanking'] = $this->report_views_daily_model->previousRanking($fByName); // $this->load->view('backend/ajax/cms_ranking/list_by_daily_view', $data); } /** * BXH theo tuần --------------------------------------------------------------------------------------------------- */ public function listByWeekly() { // Ghi log $this->actionlog_model->add('RANKING', 'BXH Tuần.', 'Report_views_weekly_model', 'report_views_weekly', null); $week_list_db = $this->report_views_weekly_model->selectSearch(); $week_list = []; foreach ($week_list_db as $val) { $array_w = MyHelper::getWeekDateRange($val['week'], $val['year'],'d/m'); if (isset($array_w['start_week']) && isset($array_w['end_week'])) { $prefix = 'Tuần ' . $val['week'] . '/' . $val['year']; $suffixe = '(' . $array_w['start_week'] . '-' . $array_w['end_week'] . ')'; $week_list[$val['week'] . '-' . $val['year']] = $prefix . ' ' . $suffixe; } } $this->_data['week_list'] = $week_list; $this->_data['functionName'] = 'BXH Theo tuần'; $this->_data['action'] = 'listByDaily'; $this->_data['titlePage'] = 'BXH Theo tuần'; $this->_data['loadPage'] = 'backend/cms_ranking/list_by_weekly_view'; $this->load->view('backend/admin_template_view', $this->_data); } public function listByWeeklyAjax() { $data = array(); $fByName = $this->input->post('fByName'); $pageId = $this->input->post('pageId'); // $pageId = ($pageId == 0) ? 1 : $pageId; // $limit = 100; $offset = ($pageId - 1) * $limit; $data['offset'] = ($pageId - 1) * $limit; $totalRecord = $this->report_views_weekly_model->cmsCountAll($fByName); $data['pagination'] = MyHelper::genPaginationLink($totalRecord, $limit, $pageId); $data['listData'] = $this->report_views_weekly_model->cmsGetPagination($limit, $offset, $fByName); $data['previousRanking'] = $this->report_views_weekly_model->previousRanking($fByName); // $this->load->view('backend/ajax/cms_ranking/list_by_weekly_view', $data); } /** * BXH theo tháng -------------------------------------------------------------------------------------------------- */ public function listByMonthly() { // Ghi log $this->actionlog_model->add('RANKING', 'BXH Tháng.', 'Report_views_monthly_model', 'report_views_monthly', null); $month_list_db = $this->report_views_monthly_model->selectSearch(); $month_list = []; foreach ($month_list_db as $key => $val) { $prefix = 'Tháng ' . $val['month'] . '/' . $val['year']; $suffixe = '(21/' . ($val['month'] - 1) . '-' . '20/'.$val['month']. ')'; if ($val['month'] == 4 && $val['year'] == 2020) { $suffixe = '(30/' . ($val['month'] - 1) . '-' . '20/'.$val['month']. ')'; } $month_list[$val['month'] . '-' . $val['year']] = $prefix . ' ' . $suffixe; } $this->_data['month_list'] = $month_list; $this->_data['functionName'] = 'BXH Theo tháng'; $this->_data['action'] = 'listByDaily'; $this->_data['titlePage'] = 'BXH Theo tháng'; $this->_data['loadPage'] = 'backend/cms_ranking/list_by_monthly_view'; $this->load->view('backend/admin_template_view', $this->_data); } public function listByMonthlyAjax() { $data = array(); $fByName = $this->input->post('fByName'); $pageId = $this->input->post('pageId'); // $pageId = ($pageId == 0) ? 1 : $pageId; // $limit = 100; $offset = ($pageId - 1) * $limit; $data['offset'] = ($pageId - 1) * $limit; $totalRecord = $this->report_views_monthly_model->cmsCountAll($fByName); $data['pagination'] = MyHelper::genPaginationLink($totalRecord, $limit, $pageId); $data['listData'] = $this->report_views_monthly_model->cmsGetPagination($limit, $offset, $fByName); $data['previousRanking'] = $this->report_views_monthly_model->previousRanking($fByName); // $this->load->view('backend/ajax/cms_ranking/list_by_monthly_view', $data); } /** * Export BXH ngày, tuần, tháng ra excel --------------------------------------------------------------------------- * @param $type * @param $time */ public function exportReport($type, $time) { ini_set('max_execution_time', -1); // Ghi log $this->actionlog_model->add('EXPORTED', 'Export BXH: ' . $type, null, null, null); if ($type && $time) { $array_time = explode('-', $time); $week = date('W'); $month = date('n'); $year = date('Y'); switch ($type) { case 'daily': if ($time) { $daily_at = date('Y-m-d', strtotime($time)); $filename = 'Daily_report_' . date('Y_m_d', strtotime($time)); $sheet_name = 'Daily-report-' . $daily_at; $reports = $this->track_model->getReportDaily($daily_at); } break; case 'weekly': $week = trim($array_time[0]); $year = trim($array_time[1]); $date_range = MyHelper::getWeekDateRange($week, $year, 'd-m-Y'); if (isset($date_range['start_week']) && isset($date_range['end_week'])) { $name = date('d_m', strtotime($date_range['start_week'])) . '__' . date('d_m', strtotime($date_range['end_week'])); $filename = 'Weekly_report_' . (($week < 10) ? '0'.$week : $week) . '_' . $year . ' (' . $name . ')'; } else { $filename = 'Weekly_report_' . (($week < 10) ? '0'.$week : $week) . '_' . $year; } $sheet_name = 'Weekly-report-' . $time; $reports = $this->track_model->getReportWeekly($week, $year); break; case 'monthly': $month = trim($array_time[0]); $year = trim($array_time[1]); $filename = 'Monthly_report_' . (($month < 10) ? '0'.$time : $time); $sheet_name = 'Monthly-report-' . $time; $reports = $this->track_model->getReportMonthly($month, $year); break; } $count_views = []; foreach ($reports as $key => $result) { $list_user = $this->track_model->getUserByTrack($result['track_id']); $casi[$key] = []; if ($list_user && count($list_user) > 0) { foreach ($list_user as $k => $users){ $singer = $this->user_model->getUser($users['user_id']); if ($singer) { $casi[$key][] = $singer[0]['full_name']; }else { $casi[$key][] = $list_user[$k]['name']; } } } $list_artists = $this->track_model->getArtistsByTrack($result['track_id']); $nhacsi[$key] = []; if ($list_artists ) { foreach ($list_artists as $k_art => $art){ $artist = $this->user_model->getUser($art['user_id']); if ($artist) { $nhacsi[$key][] = $artist[0]['full_name']; }else { $nhacsi[$key][] = $list_artists[$k_art]['name']; } } } $track_detail = $this->track_model->getTrackById($result['track_id']); $track_detail = $track_detail[0]; $count_views[] = array( 'A' => isset($result['order']) ? $result['order'] : $result['ranking'], //'B' => ($track_detail['title'] != '') ? $track_detail['title'] . ' (' . $track_detail['id'] . ')' : '', 'B' => ($track_detail['title'] != '') ? $track_detail['title'] : '', 'C' => ($casi[$key] && count($casi[$key]) > 0 ) ? implode(", ", $casi[$key]) : '', 'D' => ($nhacsi[$key] && count($nhacsi[$key]) > 0 ) ? implode(", ", $nhacsi[$key]) : '', 'E' => number_format($result['views_zing']), 'F' => number_format($result['views_nct']), 'G' => number_format($result['views_keeng']), 'H' => 0, 'I' => number_format($result['point_zing']), 'J' => number_format($result['point_nct']), 'K' => number_format($result['point_keeng']), 'L' => 0, 'M' => number_format($result['total_point']) ); } $objPHPExcel = new PHPExcel; // set default font $objPHPExcel->getDefaultStyle()->getFont()->setName('Tahoma'); // set default font size $objPHPExcel->getDefaultStyle()->getFont()->setSize(10); // writer already created the first sheet for us, let's get it $objSheet = $objPHPExcel->getActiveSheet(); // rename the sheet $objSheet->setTitle($sheet_name); $objSheet->getCell('A1')->setValue("Rank"); $objSheet->getCell('B1')->setValue("Song Title"); $objSheet->getCell('C1')->setValue("Artist"); $objSheet->getCell('D1')->setValue("Composer"); $objSheet->getCell('E1')->setValue("Zing Stream"); $objSheet->getCell('F1')->setValue("NCT Stream"); $objSheet->getCell('G1')->setValue("Keeng Stream"); $objSheet->getCell('H1')->setValue("Nhac.vn Stream"); $objSheet->getCell('I1')->setValue("Zing Point"); $objSheet->getCell('J1')->setValue("NCT Point"); $objSheet->getCell('K1')->setValue("Keeng Point"); $objSheet->getCell('L1')->setValue("Nhac.vn Point"); $objSheet->getCell('M1')->setValue("TOTAL POINT"); $border_style = array( 'borders' =>array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('rgb' => '000000') ) ) ); $style_header = array( 'font' => array( 'bold' => true, ), 'alignment' =>array( 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, 'vertical' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER, ), 'fill' =>array( 'type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => '8DB4E2'), ), ); $objSheet->getStyle('A1:M1')->applyFromArray($style_header); $objSheet->getStyle("A1:M1")->applyFromArray($border_style); $style_top10 = array( 'font' => array( 'bold' => true, ), ); $objSheet->getStyle('A2:D11')->applyFromArray($style_top10); // In du lieu vao bang foreach ($count_views as $hang => $hd) { for ($i = 65; $i <= 77; $i++) { if ($i == 66 || $i == 67 || $i == 68) { $objSheet->getStyle(chr($i).($hang+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); }else { $objSheet->getStyle(chr($i).($hang+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } // $hd[chr($i)] = (!empty($hd[chr($i)])) ? $hd[chr($i)] : ''; $objSheet->getCell(chr($i).($hang+2))->setValue($hd[chr($i)]); $objSheet->getStyle(chr($i).($hang+2))->applyFromArray($border_style); $objSheet->getStyle(chr($i).($hang+2))->getAlignment()->setWrapText(true); $objSheet->getStyle(chr($i).($hang+2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); // Set size column // $objSheet->getColumnDimension(chr($i))->setAutoSize(false); if ($i == 65) { $objSheet->getColumnDimension(chr($i))->setWidth("8"); }elseif($i == 66 || $i == 67 || $i == 68) { $objSheet->getColumnDimension(chr($i))->setWidth("26"); }else { $objSheet->getColumnDimension(chr($i))->setWidth("12"); } } } $objSheet->getStyle('A1:M1')->getAlignment()->setWrapText(true); header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="' . $filename . '.xlsx"'); PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007')->save('php://output');; die(); } else { redirect(base_url('backend/home/index')); } } /** * Hàm xử lý lấy dữ liệu lịch sử lượt nghe của bài hát dựa vào ID */ public function getTrackHistoryAjax() { $track_id = $this->input->post('track_id'); $track_title = $this->input->post('track_title'); // Ghi log $this->actionlog_model->add('SHOW_HISTORY', 'Xem lịch sử lượt nghe', null, null, $track_id); $data = []; $histories = $this->crawler_listen_history_model->getByTrackId($track_id); if ($histories) { foreach ($histories as $key => $track) { $data[$key]['date'] = $track['date_log']; $data[$key]['zing'] = intval($track['zing_count']); $data[$key]['nct'] = intval($track['nct_count']); $data[$key]['keeng'] = intval($track['keeng_count']); } } /*$url = 'http://edupham.com/api/v1/vmusicchart/get-listen-history-by-track-id?track_id=1644&type=chart'; $data = file_get_contents($url);*/ $response['response'] = $data; $response['track_title'] = $track_title; $this->load->view('backend/ajax/cms_ranking/history_chart_view', $response); } }