示例#1
0
 public function admindownloadreportAction()
 {
     ini_set('display_errors', 1);
     $frontController = Zend_Controller_Front::getInstance();
     $frontController->throwExceptions(true);
     $this->_helper->layout->disableLayout();
     $reportInforArray = array();
     //post
     if ($this->_request->isPost()) {
         $formData = $this->_request->getPost();
         $accessCodeList = array();
         // get access code from post
         if (isset($formData['accessCode'])) {
             $accessCodeArray = preg_split('/[;\\s]+[\\n\\r\\t]*/', trim($formData['accessCode']));
             $accessCodeString = '';
             foreach ($accessCodeArray as $accessCode) {
                 $accessCodeString .= "'" . $accessCode . "',";
             }
             // get accesscode from campaign
             $db = Zend_Registry::get('db');
             $selectAccessCode = $db->select();
             $selectAccessCode->from('report', array('consumer_id', 'accesscode', 'create_date', 'source'))->joinLeft('reward_point_transaction_record', 'report.reward_point_transaction_record_id = reward_point_transaction_record.id', 'point_amount')->join('consumer', 'consumer.id = report.consumer_id', array('email,login_phone,phone,recipients_name'))->where('report.accesscode in (' . substr($accessCodeString, 0, strlen($accessCodeString) - 1) . ")")->where("report.state = 'APPROVED'")->order(" create_date desc ")->limit(0);
             $accessCodeArray = $db->fetchAll($selectAccessCode);
             foreach ($accessCodeArray as $accessCode) {
                 array_push($accessCodeList, $accessCode['accesscode']);
                 $reportInforArray[$accessCode['accesscode']]['consumer_id'] = $accessCode['consumer_id'];
                 $reportInforArray[$accessCode['accesscode']]['email'] = $accessCode['email'];
                 $reportInforArray[$accessCode['accesscode']]['login_phone'] = $accessCode['login_phone'];
                 $reportInforArray[$accessCode['accesscode']]['phone'] = $accessCode['phone'];
                 $reportInforArray[$accessCode['accesscode']]['recipients_name'] = $accessCode['recipients_name'];
                 $reportInforArray[$accessCode['accesscode']]['createdate'] = $accessCode['create_date'];
                 $reportInforArray[$accessCode['accesscode']]['source'] = $accessCode['source'];
                 $reportInforArray[$accessCode['accesscode']]['point'] = $accessCode['point_amount'];
                 $reportInforArray[$accessCode['accesscode']]['reply'] = '';
             }
             // get reply for report
             $selectReportReply = $db->select();
             $selectReportReply->from('report', 'accesscode')->joinLeft('reply', 'report.id = reply.report_id', 'content')->where('report.accesscode in (' . substr($accessCodeString, 0, strlen($accessCodeString) - 1) . ")")->limit(0);
             $reportReplyArray = $db->fetchAll($selectReportReply);
             foreach ($reportReplyArray as $reply) {
                 $reportInforArray[$reply['accesscode']]['reply'] = $reply['content'];
             }
             // get tag for report
             $selectAllTag = $db->select();
             $selectAllTag->from('tags', array('id', 'name'))->where("tags.module ='REPORT'");
             $allTagArray = $db->fetchAll($selectAllTag);
             $selectReportTag = $db->select();
             $selectReportTag->from('report', 'accesscode')->join('report_tag', 'report.id = report_tag.report_id', null)->join('tags', 'tags.id = report_tag.tag_id', 'name')->where('report.accesscode in (' . substr($accessCodeString, 0, strlen($accessCodeString) - 1) . ")")->limit(0);
             $reportTag = $db->fetchAll($selectReportTag);
             $reportTagArray = array();
             foreach ($reportTag as $tag) {
                 $reportTagArray[$tag['accesscode']][$tag['name']] = 1;
             }
             // get reports from ws
             $indicate2Connect = new Indicate2_Connect();
             $response = $indicate2Connect->getAnswerSetForAccessCode($accessCodeList);
         } else {
             // get survey_id for campaign
             $campaignModel = new Campaign();
             $campaign = $campaignModel->fetchRow('id = ' . $formData['campaign_id']);
             switch ($formData['submittype']) {
                 case 'pre_campaign':
                     $survey_id = $campaign['pre_campaign_survey'];
                     if ($formData['campaign_language'] == 'en') {
                         $survey_id = $campaign['pre_campaign_survey_en'];
                     }
                     $accessCodeList = null;
                     break;
                 case 'post_campaign':
                     $survey_id = $campaign['post_campaign_survey'];
                     if ($formData['campaign_language'] == 'en') {
                         $survey_id = $campaign['post_campaign_survey_en'];
                     }
                     $accessCodeList = null;
                     break;
                     // get reports
                 // get reports
                 default:
                     $survey_id = $campaign['i2_survey_id'];
                     if ($formData['campaign_language'] == 'en') {
                         $survey_id = $campaign['i2_survey_id_en'];
                     }
                     // get accesscode from campaign
                     $db = Zend_Registry::get('db');
                     $selectAccessCode = $db->select();
                     $selectAccessCode->from('report', array('consumer_id', 'accesscode', 'create_date', 'source'))->joinLeft('reward_point_transaction_record', 'report.reward_point_transaction_record_id = reward_point_transaction_record.id', 'point_amount')->join('consumer', 'consumer.id = report.consumer_id', array('email', 'login_phone', 'phone', 'recipients_name'))->where('report.campaign_id = ?', $formData['campaign_id'])->where("report.state = 'APPROVED'")->order("create_date desc")->limit(0);
                     $accessCodeArray = $db->fetchAll($selectAccessCode);
                     foreach ($accessCodeArray as $accessCode) {
                         array_push($accessCodeList, $accessCode['accesscode']);
                         $reportInforArray[$accessCode['accesscode']]['consumer_id'] = $accessCode['consumer_id'];
                         $reportInforArray[$accessCode['accesscode']]['email'] = $accessCode['email'];
                         $reportInforArray[$accessCode['accesscode']]['login_phone'] = $accessCode['login_phone'];
                         $reportInforArray[$accessCode['accesscode']]['phone'] = $accessCode['phone'];
                         $reportInforArray[$accessCode['accesscode']]['recipients_name'] = $accessCode['recipients_name'];
                         $reportInforArray[$accessCode['accesscode']]['createdate'] = $accessCode['create_date'];
                         $reportInforArray[$accessCode['accesscode']]['source'] = $accessCode['source'];
                         $reportInforArray[$accessCode['accesscode']]['point'] = $accessCode['point_amount'];
                         $reportInforArray[$accessCode['accesscode']]['reply'] = '';
                     }
                     // get reply for report
                     $selectReportReply = $db->select();
                     $selectReportReply->from('report', 'accesscode')->joinLeft('reply', 'report.id = reply.report_id', 'content')->where('reply.campaign_id = ?', $formData['campaign_id'])->limit(0);
                     $reportReplyArray = $db->fetchAll($selectReportReply);
                     foreach ($reportReplyArray as $reply) {
                         $reportInforArray[$reply['accesscode']]['reply'] = $reply['content'];
                     }
                     // get tag for report
                     $selectAllTag = $db->select();
                     $selectAllTag->from('tags', array('id', 'name'))->where("tags.module ='REPORT'")->where('tags.campaign_id is null or tags.campaign_id =' . $formData['campaign_id']);
                     $allTagArray = $db->fetchAll($selectAllTag);
                     $selectReportTag = $db->select();
                     $selectReportTag->from('report', 'accesscode')->join('report_tag', 'report.id = report_tag.report_id', null)->join('tags', 'tags.id = report_tag.tag_id', 'name')->where('report.campaign_id = ?', $formData['campaign_id'])->limit(0);
                     $reportTag = $db->fetchAll($selectReportTag);
                     $reportTagArray = array();
                     foreach ($reportTag as $tag) {
                         $reportTagArray[$tag['accesscode']][$tag['name']] = 1;
                     }
                     break;
             }
             // get reports from ws
             $indicate2Connect = new Indicate2_Connect();
             $response = $indicate2Connect->getAnswerSetForSurvey($survey_id, $accessCodeList, null, 0);
         }
         $this->view->reportExtraInfoArray = $reportInforArray;
         $this->view->surveyQuestionArray = $response->QuestionType;
         $this->view->surveyArray = $response->AnswerSetType;
         //Zend_Debug::dump($response);
         //die;
         // create phpexcel obj.
         require_once 'PHPExcel.php';
         require_once 'PHPExcel/IOFactory.php';
         require_once 'PHPExcel/Writer/Excel5.php';
         $objPHPExcel = new PHPExcel();
         $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")->setLastModifiedBy("Maarten Balliauw")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");
         $styleThinBrownBorderOutline = array('borders' => array('outline' => array('style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array('argb' => 'FFB2A1C7'))));
         $objPHPExcel->setActiveSheetIndex(0);
         $objActSheet = $objPHPExcel->getActiveSheet();
         // create an excel column name Array: from A - DZ, you can enlarge this array if you need
         $baseColumnNameArray = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
         $columnNameArray = array();
         $i = 0;
         while ($i < 26 * 9) {
             if ($i < 26) {
                 array_push($columnNameArray, $baseColumnNameArray[$i]);
             } else {
                 array_push($columnNameArray, $baseColumnNameArray[$i / 26 - 1] . $baseColumnNameArray[$i % 26]);
             }
             $i++;
         }
         $columnNumber = 0;
         $tag = array();
         $i = -1;
         // print excel file
         // print line 1: mainly include Accesscode,questions...
         $objActSheet->setCellValue($columnNameArray[$columnNumber] . "1", "AccessCode");
         $objActSheet->getStyle($columnNameArray[$columnNumber] . "1")->applyFromArray($styleThinBrownBorderOutline);
         $objActSheet->getColumnDimension($columnNameArray[$columnNumber++])->setWidth(20);
         foreach ($this->view->surveyQuestionArray as $surveyQuestion) {
             $mergeStart = $columnNameArray[$columnNumber];
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "1", $surveyQuestion->QuestionText);
             if (isset($surveyQuestion->SelectionQuestionOptionType) && is_array($surveyQuestion->SelectionQuestionOptionType) && !empty($surveyQuestion->SelectionQuestionOptionType)) {
                 for ($temp = 0; $temp < count($surveyQuestion->SelectionQuestionOptionType) - 1; $temp++) {
                     $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "1", " ");
                 }
                 $mergeEnd = $columnNameArray[$columnNumber - 1];
                 $objActSheet->mergeCells($mergeStart . '1:' . $mergeEnd . '1');
                 $objActSheet->getStyle($mergeStart . '1:' . $mergeEnd . '1')->applyFromArray($styleThinBrownBorderOutline);
             } else {
                 $objActSheet->getStyle($mergeStart . "1")->applyFromArray($styleThinBrownBorderOutline);
                 $objActSheet->getColumnDimension($mergeStart)->setWidth(50);
             }
         }
         // print line 2: mainly include accesscode,options of questions,user info,tag names...
         $columnNumber = 0;
         $textQuestionArray = array();
         $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "AccessCode");
         foreach ($this->view->surveyQuestionArray as $surveyQuestion) {
             if (isset($surveyQuestion->SelectionQuestionOptionType) && is_array($surveyQuestion->SelectionQuestionOptionType) && !empty($surveyQuestion->SelectionQuestionOptionType)) {
                 foreach ($surveyQuestion->SelectionQuestionOptionType as $selectionQuestionOptionTypeTemp) {
                     $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", $selectionQuestionOptionTypeTemp->OptionText);
                     $tag[++$i] = $selectionQuestionOptionTypeTemp->OptionId;
                 }
             } else {
                 $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", $surveyQuestion->QuestionText);
                 $tag[++$i] = $surveyQuestion->QuestionId;
                 $textQuestionArray[$surveyQuestion->QuestionId] = 1;
             }
         }
         if ($formData['submittype'] == 'report') {
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "ConsumerId");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "ConsumerEmail");
             //TOCHECK
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "login_phone");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "phone");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "recipients_name");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "Create_date");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "Source");
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", "Point");
             $objActSheet->setCellValue($columnNameArray[$columnNumber] . "2", "Reply");
             $objActSheet->getColumnDimension($columnNameArray[$columnNumber++])->setWidth(50);
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", " ");
             foreach ($allTagArray as $tagName) {
                 $objActSheet->setCellValue($columnNameArray[$columnNumber++] . "2", $tagName['name']);
             }
         }
         // print line 3~X: include answers from ws, user info, tag values...
         $lineNumber = 3;
         if (isset($this->view->surveyArray) && is_array($this->view->surveyArray) && !empty($this->view->surveyArray)) {
             // if get more than one surveys from ws
             foreach ($this->view->surveyArray as $surveys) {
                 $columnNumber = 0;
                 $temp = array();
                 $objActSheet->setCellValue($columnNameArray[$columnNumber++] . $lineNumber, $surveys->AccessCode);
                 // more than one answer in the survey
                 if (isset($surveys->AnswerType) && is_array($surveys->AnswerType) && !empty($surveys->AnswerType)) {
                     foreach ($surveys->AnswerType as $question) {
                         if (isset($question->AnswerText) && is_array($question->AnswerText) && !empty($question->AnswerText)) {
                             foreach ($question->AnswerText as $text) {
                                 $temp[$text] = "1";
                             }
                         } else {
                             $decodeValue = base64_decode($question->AnswerText);
                             if (array_key_exists($question->QuestionId, $textQuestionArray)) {
                                 if (isset($question->AnswerText)) {
                                     $temp[$question->QuestionId] = $decodeValue;
                                 }
                             } else {
                                 $temp[$decodeValue] = "1";
                             }
                         }
                     }
                 } else {
                     // only one answer in the survey
                     if (isset($surveys->AnswerType->AnswerText) && is_array($surveys->AnswerType->AnswerText) && !empty($surveys->AnswerType->AnswerText)) {
                         foreach ($surveys->AnswerType->AnswerText as $text) {
                             $temp[$text] = "1";
                         }
                     } else {
                         $decodeValue = base64_decode($surveys->AnswerType->AnswerText);
                         if (array_key_exists($surveys->AnswerType->QuestionId, $textQuestionArray)) {
                             $temp[$surveys->AnswerType->QuestionId] = isset($surveys->AnswerType->AnswerText) ? $decodeValue : "";
                         } else {
                             $temp[$decodeValue] = "1";
                         }
                     }
                 }
                 // print answers from ws
                 for ($i = 0; $i < count($tag); $i++) {
                     if (isset($temp[$tag[$i]])) {
                         if ($temp[$tag[$i]] == "1" || $temp[$tag[$i]] == "0") {
                             $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, $temp[$tag[$i]]);
                         } else {
                             $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, "\"" . $temp[$tag[$i]] . "\"");
                         }
                         //Zend_Debug::dump($i);
                         //Zend_Debug::dump($temp[$tag[$i]]);
                         //Zend_Debug::dump("\"".$temp[$tag[$i]]."\"");
                     }
                     $columnNumber++;
                 }
                 //die;
                 // print user extra info
                 foreach ($this->view->reportExtraInfoArray[$surveys->AccessCode] as $reportExtraInfo) {
                     if (isset($reportExtraInfo)) {
                         $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, $reportExtraInfo);
                     }
                     $columnNumber++;
                 }
                 // if it is report, print tags
                 $objActSheet->setCellValue($columnNameArray[$columnNumber++] . $lineNumber, " ");
                 if ($formData['submittype'] == 'report') {
                     foreach ($allTagArray as $tagName) {
                         if (isset($reportTagArray[$surveys->AccessCode][$tagName['name']])) {
                             $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, "1");
                         }
                         $columnNumber++;
                     }
                 }
                 $lineNumber++;
             }
         } else {
             // if get only one survey from ws
             $columnNumber = 0;
             $survey = $this->view->surveyArray;
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . $lineNumber, $surveys->AccessCode);
             // more than one answer in the survey
             if (isset($survey->AnswerType) && is_array($survey->AnswerType) && !empty($survey->AnswerType)) {
                 foreach ($survey->AnswerType as $question) {
                     if (isset($question->AnswerText) && is_array($question->AnswerText) && !empty($question->AnswerText)) {
                         foreach ($question->AnswerText as $text) {
                             $temp[$text] = "1";
                         }
                     } else {
                         if (array_key_exists($question->QuestionId, $textQuestionArray)) {
                             $decodeValue = preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($question->AnswerText));
                             $temp[$question->QuestionId] = isset($question->AnswerText) ? $decodeValue : "";
                         } else {
                             $temp[$decodeValue] = "1";
                         }
                     }
                 }
             } else {
                 // only one answer in the survey
                 if (isset($survey->AnswerType->AnswerText) && is_array($survey->AnswerType->AnswerText) && !empty($survey->AnswerType->AnswerText)) {
                     foreach ($surveys->AnswerType->AnswerText as $text) {
                         $temp[$text] = "1";
                     }
                 } else {
                     if (array_key_exists($surveys->AnswerType->QuestionId, $textQuestionArray)) {
                         $decodeValue = preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($surveys->AnswerType->AnswerText));
                         $temp[$surveys->AnswerType->QuestionId] = isset($surveys->AnswerType->AnswerText) ? $decodeValue : "";
                     } else {
                         $temp[$decodeValue] = "1";
                     }
                 }
             }
             // print answers from ws
             for ($i = 0; $i < count($tag); $i++) {
                 if (isset($temp[$tag[$i]])) {
                     $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, "\"" . $temp[$tag[$i]] . "\"");
                 }
                 $columnNumber++;
             }
             // print extra info
             foreach ($this->view->reportExtraInfoArray[$surveys->AccessCode] as $reportExtraInfo) {
                 if (isset($reportExtraInfo)) {
                     $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, $reportExtraInfo);
                 }
                 $columnNumber++;
             }
             // if it is report, print tags
             $objActSheet->setCellValue($columnNameArray[$columnNumber++] . $lineNumber, " ");
             if ($formData['submittype'] == 'report') {
                 foreach ($allTagArray as $tagName) {
                     if (isset($reportTagArray[$surveys->AccessCode][$tagName['name']])) {
                         $objActSheet->setCellValue($columnNameArray[$columnNumber] . $lineNumber, "1");
                     }
                     $columnNumber++;
                 }
             }
         }
         // download...
         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
         header("Pragma: public");
         header("Expires: 0");
         header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
         header("Content-Type:application/force-download");
         header("Content-Type:application/vnd.ms-execl");
         header("Content-Type:application/octet-stream");
         header("Content-Type:application/download");
         header('Content-Disposition:attachment;filename="report.xlsx"');
         header("Content-Transfer-Encoding:binary");
         $objWriter->save('php://output');
     }
 }
示例#2
0
 function indexAction()
 {
     //		$this->_helper->layout->disableLayout();
     //		$login = "******";
     //		$password = "******";
     //		include_once 'sina.php';
     //		$resultarray = get_sinacontacts($login, $password);
     //		Zend_Debug::dump($resultarray);
     //		include_once '163.php';
     //		$login = '******';
     //		$password = '******';
     //		$resultarray = get_163contacts($login, $password);
     //		Zend_Debug::dump($resultarray);
     //		include_once 'yahoo.php';
     //		$obj = new GrabYahoo();
     //		$contacts = $obj->getAddressbook('*****@*****.**','19990402');
     //		Zend_Debug::dump($contacts);
     //		include_once "contacts_fn.php";
     //		$ret_array = get_msncontacts('*****@*****.**', '1999040211');
     //		Zend_Debug::dump($ret_array);
     //		$this->_helper->layout->setLayout("layout_admin");
     $this->_helper->layout->disableLayout();
     // get date from db
     $db = Zend_Registry::get('db');
     $select = $db->select();
     $select->from('report', array('left(create_date,10) as date', 'accesscode'))->where('report.campaign_id = 3')->where("report.state = 'APPROVED'")->order('date');
     $results = $db->fetchAll($select);
     $accesscodeDbMatchArray = array();
     foreach ($results as $result) {
         $accesscodeDbMatchArray[$result['accesscode']] = $result['date'];
     }
     $accesscodeArray = array_keys($accesscodeDbMatchArray);
     //		Zend_Debug::Dump($accesscodematchArray);
     // get value from ws
     $indicate2Connect = new Indicate2_Connect();
     $response = $indicate2Connect->getAnswerSetForSurvey(385, null, array(array('ContextIndex' => 1, 'QuestionIndex' => 1), array('ContextIndex' => 1, 'QuestionIndex' => 4)), 0);
     //        Zend_Debug::Dump($response);
     $talkingdurationArray = array();
     $accesscodeResponseMathArray = array();
     if (isset($response->AnswerSetType)) {
         foreach ($response->AnswerSetType as $answerSet) {
             if (isset($answerSet->AnswerType) && is_array($answerSet->AnswerType) && !empty($answerSet->AnswerType)) {
                 foreach ($answerSet->AnswerType as $answer) {
                     if ($answer->QuestionId == 573) {
                         $accesscodeResponseMathArray[$answerSet->AccessCode] = (int) iconv("UTF-8", "gb18030", preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($answer->AnswerText)));
                     }
                     if ($answer->QuestionId == 576) {
                         $talkingdurationArray[$answerSet->AccessCode] = (int) iconv("UTF-8", "gb18030", preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($answer->AnswerText)));
                     }
                 }
             } else {
                 //get min value, like '11-15' = 11
                 $accesscodeResponseMathArray[$answerSet->AccessCode] = (int) iconv("UTF-8", "gb18030", preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($answerSet->AnswerType->AnswerText)));
             }
         }
     }
     //		Zend_Debug::Dump($accesscodeResponseMathArray);
     //		Zend_Debug::Dump($talkingdurationArray);
     $resultmatchArray = array();
     foreach ($accesscodeArray as $accesscode) {
         $resultmatchArray[$accesscodeDbMatchArray[$accesscode]] = 0;
     }
     foreach ($accesscodeArray as $accesscode) {
         if (array_key_exists($accesscode, $accesscodeResponseMathArray)) {
             $resultmatchArray[$accesscodeDbMatchArray[$accesscode]] += $accesscodeResponseMathArray[$accesscode];
         }
     }
     //		 Zend_Debug::Dump($resultmatchArray);
     $dateArray = array_keys($resultmatchArray);
     foreach ($dateArray as $date) {
         $resultmatchArray[$date] = floor($resultmatchArray[$date] * 1.65);
     }
     //        Zend_Debug::Dump($resultmatchArray);
     include 'open-flash-chart.php';
     $data_1 = array();
     $base = floor(1472 * 1.65);
     $temp = 0;
     $resultmatchArray[0] = 0;
     foreach ($dateArray as $date) {
         $resultmatchArray[$date] += $resultmatchArray[$temp];
         $data_1[] = $resultmatchArray[$date] + $base;
         $temp = $date;
     }
     //		Zend_Debug::Dump($data_1);
     $title = new title("Impressions of BugsLock by day");
     $y = new y_axis();
     $y->set_range(0, 40000, 10000);
     $x = new x_axis();
     $x_labels = new x_axis_labels();
     $x_labels->set_labels($dateArray);
     $x_labels->set_steps(2);
     $x_labels->rotate(40);
     $x->set_labels($x_labels);
     $line_1_default_dot = new dot();
     $line_1_default_dot->colour('#f00000')->tooltip('#x_label#: #val#');
     $line_1 = new line();
     $line_1->set_default_dot_style($line_1_default_dot);
     $line_1->set_values($data_1);
     $line_1->set_width(1);
     $line_1->set_key('Impression', 10);
     $this->view->chart = new open_flash_chart();
     $this->view->chart->set_title($title);
     $this->view->chart->add_element($line_1);
     $this->view->chart->set_y_axis($y);
     $this->view->chart->set_x_axis($x);
     $this->view->chart->set_bg_colour('#FFFFFF');
     //
     include 'ofc_sugar.php';
     $this->view->chart2 = new open_flash_chart();
     $this->view->chart2->set_title(new title('Generation Chart'));
     $line_1 = new line();
     $array_1 = array();
     $f = 1.5;
     for ($i = 0; $i <= 50; $i++) {
         array_push($array_1, $f);
     }
     $line_1->set_values($array_1);
     //		$line_1->set_default_dot_style( new s_hollow_dot('#FBB829', 4) );
     $line_1->set_width(1);
     $line_1->set_colour('#FF0000');
     $line_1->set_tooltip("Gen0");
     $line_1->set_key('Gen0', 10);
     $line_1->loop();
     $area = new area();
     // set the circle line width:
     $area->set_width(1);
     //		$area->set_default_dot_style( new s_hollow_dot('#45909F', 5) );
     $area->set_colour('#FF0000');
     //		$area->set_fill_colour( '#FF0000' );
     //		$area->set_fill_alpha( 0.4 );
     $area->set_loop();
     $area->set_values($array_1);
     $line_2 = new line();
     $array_2 = array();
     $f = 2.8;
     for ($i = 0; $i <= 50; $i++) {
         array_push($array_2, $f);
     }
     $line_2->set_values($array_2);
     //		$line_2->set_default_dot_style( new s_hollow_dot('#FBB829', 4) );
     $line_2->set_width(1);
     $line_2->set_colour('#FBB829');
     $line_2->set_tooltip("Gold<br>#val#");
     $line_2->set_key('Gen1', 10);
     $line_2->loop();
     $line_4 = new line();
     $array_4 = array();
     $f = 5;
     for ($i = 0; $i <= 50; $i++) {
         array_push($array_4, $f);
     }
     $line_4->set_values($array_4);
     //		$line_2->set_default_dot_style( new s_star('#8000FF', 4) );
     $line_4->set_width(1);
     $line_4->set_colour('#3030D0');
     $line_4->set_tooltip("Purple<br>#val#");
     $line_4->set_key('Gen2', 10);
     $line_4->loop();
     // add the area object to the chart:
     $this->view->chart2->add_element($line_1);
     $this->view->chart2->add_element($line_2);
     $this->view->chart2->add_element($line_4);
     $r = new radar_axis(5);
     $r->set_colour('#FFFFFF');
     $r->set_grid_colour('#FFFFFF');
     $labels = new radar_axis_labels(array('G0', '', 'G1', '', 'G2'));
     $labels->set_colour('#9F819F');
     $r->set_labels($labels);
     $this->view->chart2->set_radar_axis($r);
     $tooltip = new tooltip();
     $tooltip->set_proximity();
     $this->view->chart2->set_tooltip($tooltip);
     $this->view->chart2->set_bg_colour('#ffffff');
     //		echo $this->view->chart2->toPrettyString();
 }
 public function clientimpressionAction()
 {
     ini_set('display_errors', 1);
     $frontController = Zend_Controller_Front::getInstance();
     $frontController->throwExceptions(true);
     // filter!
     if (!$this->clientdashboardfilter()) {
         return;
     }
     $this->view->activeTab = 'clientimpression';
     include 'open-flash-chart.php';
     $request = $this->getRequest();
     if ($request->isPost()) {
         $formData = $request->getPost();
         $campaign_id = $formData['campaign_id'];
     } else {
         $campaign_id = $request->getParam('id');
     }
     $this->_helper->layout->setLayout($this->getCampaignTemplate($campaign_id));
     $this->view->campaign_id = $campaign_id;
     // get date from db
     $db = Zend_Registry::get('db');
     $select = $db->select();
     $select->from('report', array('left(create_date,10) as date', 'accesscode'))->where('report.campaign_id = ?', $campaign_id)->where('report.state = "APPROVED"')->order('date');
     $results = $db->fetchAll($select);
     $accesscodeDbMatchArray = array();
     foreach ($results as $result) {
         $accesscodeDbMatchArray[$result['accesscode']] = $result['date'];
     }
     $accesscodeArray = array_keys($accesscodeDbMatchArray);
     $campaignModel = new Campaign();
     $campaign = $campaignModel->fetchRow('id = ' . $campaign_id);
     // get impression value from ws
     $db = Zend_Registry::get('db');
     $select = $db->select();
     $select->from('dashboard_mapping');
     $select->where('survey_id = ?', $campaign->i2_survey_id);
     $select->where('mark="FRIENDS"');
     $mappings = $db->fetchRow($select);
     $indicate2Connect = new Indicate2_Connect();
     $response = $indicate2Connect->getAnswerSetForSurvey(array($campaign->i2_survey_id, $campaign->i2_survey_id_en), null, array(array('ContextIndex' => $mappings['context_index'], 'QuestionIndex' => $mappings['question_index'])), 0);
     //        Zend_Debug::dump($mappings);die;
     $optionArray = array();
     if (isset($response->QuestionType) && is_array($response->QuestionType)) {
         foreach ($response->QuestionType as $questionType) {
             foreach ($questionType->SelectionQuestionOptionType as $optionObject) {
                 //get min value, like '11-15' = 11
                 $optionArray[$optionObject->OptionId] = (int) $optionObject->OptionText;
             }
         }
     } else {
         if (isset($response->QuestionType->SelectionQuestionOptionType)) {
             foreach ($response->QuestionType->SelectionQuestionOptionType as $optionObject) {
                 //get min value, like '11-15' = 11
                 if ($optionObject->OptionText == '>=10') {
                     $optionArray[$optionObject->OptionId] = 10;
                 }
                 $optionArray[$optionObject->OptionId] = (int) $optionObject->OptionText;
             }
         }
     }
     $answerArray = array();
     $i = 0;
     if (isset($response->AnswerSetType)) {
         foreach ($response->AnswerSetType as $answerObject) {
             $answerArray[$i++] = array($answerObject->AccessCode, iconv("UTF-8", "gb18030", preg_replace('/[\\n\\r\\t]/', ' ', base64_decode($answerObject->AnswerType->AnswerText))));
         }
     }
     // create x axis date value (endDate = expireDate/now + 10 days)
     $this->view->startDate = $startDate = date("Y-m-d", strtotime($campaign->create_date));
     if (strtotime($campaign->expire_date) > strtotime(date("Y-m-d"))) {
         $this->view->xmax = $endDate = date("Y-m-d", strtotime("+10 days", strtotime(date("Y-m-d"))));
     } else {
         $this->view->xmax = $endDate = date("Y-m-d", strtotime("+10 days", strtotime($campaign->expire_date)));
     }
     if ($request->isPost()) {
         $formData = $request->getPost();
         $this->view->xmax = $endDate = $formData['x_max'];
     }
     $resultArray = array();
     $xDateArrayLength = 0;
     while (1) {
         $resultArray[$startDate] = 0;
         $startDate = date("Y-m-d", strtotime("+1 days", strtotime($startDate)));
         $xDateArrayLength++;
         if ($startDate == $endDate) {
             $resultArray[$startDate] = 0;
             $xDateArrayLength++;
             break;
         }
     }
     //var_dump($resultArray);die;
     // set sparks initial impressions for each campaign, it should be added if a new campaign is lanuched!
     switch ($campaign_id) {
         case '1':
             $staticsparks = array(50, 110);
             break;
         case '2':
             $staticsparks = array(50, 150, 250, 400, 450);
             break;
         case '3':
             $staticsparks = array(100, 350, 750, 1200, 1500);
             break;
         case '4':
             $staticsparks = array(50, 200, 250);
             break;
         case '5':
             $staticsparks = array(50, 150);
             break;
         case '6':
             $staticsparks = array(50, 150, 350, 500, 900, 1700, 2300, 2500);
             break;
         case '7':
             $staticsparks = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 150, 350, 500, 900, 1038);
             break;
         case '8':
             $staticsparks = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 300, 450, 600, 750, 900, 1000);
             break;
         case '9':
             $staticsparks = array(0, 0, 0, 150, 300, 450, 600, 750, 900, 1000);
             break;
         case '10':
             $staticsparks = array(0, 0, 0, 0, 0, 0, 0, 0, 150, 300, 450, 600, 750, 900, 1000);
             break;
         case '13':
             $staticsparks = array(0, 0, 0, 0, 0, 0, 50, 100, 150, 300, 450, 600, 750, 900, 1200);
             break;
         default:
             break;
     }
     for ($temp = count($staticsparks); $temp < $xDateArrayLength; $temp++) {
         $staticsparks[$temp] = $staticsparks[$temp - 1];
     }
     // set everyday impression by using ws data
     foreach ($answerArray as $answer) {
         if (!isset($accesscodeDbMatchArray[$answer[0]])) {
             continue;
         }
         if (date("Y-m-d", strtotime($accesscodeDbMatchArray[$answer[0]])) > date("Y-m-d", strtotime($this->view->xmax))) {
             continue;
         }
         if (!array_key_exists($accesscodeDbMatchArray[$answer[0]], $resultArray)) {
             $resultArray[$accesscodeDbMatchArray[$answer[0]]] = $optionArray[$answer[1]];
         } else {
             $resultArray[$accesscodeDbMatchArray[$answer[0]]] += $optionArray[$answer[1]];
         }
     }
     //Zend_Debug::dump($optionArray);
     //Zend_Debug::dump($resultArray);
     //Zend_Debug::dump($answerArray);
     //Zend_Debug::dump($accesscodeDbMatchArray);
     // set line value
     $sparks = 0;
     $data_1 = array();
     $data_2min = array();
     $data_2max = array();
     $data_3min = array();
     $data_3max = array();
     $i = 0;
     $data_1[0] = $data_2max[0] = $data_2min[0] = $data_3min[0] = $data_3max[0] = $accumulate = 0;
     $temp = 0;
     foreach ($resultArray as $result) {
         if ($result != 0) {
             $xTodayLength = $temp;
         }
         $temp++;
     }
     foreach ($resultArray as $result) {
         if ($i == 0) {
             $i++;
             continue;
         }
         $accumulate = $result + $accumulate;
         $data_1[$i] = $accumulate + $staticsparks[$i];
         $data_2min[$i] = floor($accumulate * 2.5 + $staticsparks[$i]);
         $data_2max[$i] = $accumulate * 5 + $staticsparks[$i];
         $data_2avg[$i] = $accumulate * 3.75;
         $data_3min[$i] = floor($data_2avg[$i] * 3) + $data_2min[$i];
         $data_3max[$i] = floor($data_2avg[$i] * 4) + $data_2max[$i];
         $max = $data_3max[$i];
         if ($i == $xTodayLength) {
             break;
         }
         $i++;
     }
     // set max y axis value
     $dateArray = array_keys($resultArray);
     $y = new y_axis();
     if ($request->isPost()) {
         $formData = $request->getPost();
         $max = $formData['y_max'];
     } else {
         if ($max < 10000) {
             $max = ceil($max / 100) * 100;
         } else {
             $max = ceil($max / 1000) * 1000;
         }
     }
     $y->set_range(0, $max, $max / 10);
     $this->view->ymax = $max;
     // draw lines
     $x = new x_axis();
     $x_labels = new x_axis_labels();
     $x_labels->set_labels($dateArray);
     $x_labels->set_steps(floor($xDateArrayLength / 42) + 1);
     $x_labels->rotate(40);
     $x->set_labels($x_labels);
     $line_1_default_dot = new dot();
     $line_1_default_dot->colour('#007DCD')->tooltip('#x_label#: #val#');
     $line_1 = new line();
     $line_1->set_default_dot_style($line_1_default_dot);
     $line_1->set_values($data_1);
     $line_1->set_colour("#007DCD");
     $line_1->set_width(1);
     $line_2min_default_dot = new dot();
     $line_2min_default_dot->colour('#81C909')->tooltip('#x_label#: #val#');
     $line_2min = new line();
     $line_2min->set_default_dot_style($line_2min_default_dot);
     $line_2min->set_values($data_2min);
     $line_2min->set_colour("#81C909");
     $line_2min->set_width(1);
     $line_2_default_dot = new dot();
     $line_2_default_dot->colour('#81C909')->tooltip('#x_label#: #val#');
     $line_2 = new line();
     $line_2->set_default_dot_style($line_2_default_dot);
     $line_2->set_values($data_2max);
     $line_2->set_colour("#81C909");
     $line_2->set_width(1);
     $line_3_default_dot = new dot();
     $line_3_default_dot->colour('#FF0000')->tooltip('#x_label#: #val#');
     $line_3 = new line();
     $line_3->set_default_dot_style($line_3_default_dot);
     $line_3->set_values($data_3min);
     $line_3->set_colour("#FF0000");
     $line_3->set_width(1);
     $line_3max_default_dot = new dot();
     $line_3max_default_dot->colour('#FF0000')->tooltip('#x_label#: #val#');
     $line_3max = new line();
     $line_3max->set_default_dot_style($line_3max_default_dot);
     $line_3max->set_values($data_3max);
     $line_3max->set_colour("#FF0000");
     $line_3max->set_width(1);
     //tags
     $tags = new ofc_tags();
     $tags->font("Verdana", 10)->colour("#2F2F2F")->align_x_right();
     $this->view->chart = new open_flash_chart();
     // create event
     $campaignEventModel = new CampaignEvent();
     $campaignEvents = $campaignEventModel->fetchAll('campaign_id = ' . $campaign_id, 'event_date');
     $eventTotal = count($campaignEvents);
     $eventTemp = 0;
     foreach ($campaignEvents as $campaignEvent) {
         $eventDate = floor((strtotime($campaignEvent->event_date) - strtotime($campaign->create_date)) / 86400);
         $eventDescription = $campaignEvent->event_name;
         // event line
         $eventline = new scatter_line('#C5BE97', 1);
         $def = new hollow_dot();
         $def->size(0)->halo_size(0);
         $eventline->set_default_dot_style($def);
         $v = array(new scatter_value($eventDate, 0), new scatter_value($eventDate, $this->view->ymax));
         $eventline->set_values($v);
         $this->view->chart->add_element($eventline);
         // event description
         $tagAndArrow_Yvalue = 1 - ($eventTotal - $eventTemp++) / 10;
         if ($tagAndArrow_Yvalue == 0) {
             $tagAndArrow_Yvalue = 0.1;
         }
         $tag_xvalue = $eventDate + 2;
         $t = new ofc_tag($tag_xvalue, $this->view->ymax * $tagAndArrow_Yvalue);
         $t->text($eventDescription)->style(false, false, false, 1.0)->padding(0, 0);
         $tags->append_tag($t);
         // event arrow
         $arrowStart_x = $tag_xvalue;
         $arrowStart_y = $this->view->ymax * $tagAndArrow_Yvalue;
         $arrowEnd_x = $tag_xvalue - 1.5;
         $arrowEnd_y = $this->view->ymax * $tagAndArrow_Yvalue;
         $arrowColor = '#000000';
         $arrowBarbLength = 7;
         $a = new ofc_arrow($arrowStart_x, $arrowStart_y, $arrowEnd_x, $arrowEnd_y, $arrowColor, $arrowBarbLength);
         $this->view->chart->add_element($a);
     }
     $this->view->chart->add_element($line_1);
     $this->view->chart->add_element($line_2min);
     $this->view->chart->add_element($line_2);
     $this->view->chart->add_element($line_3);
     $this->view->chart->add_element($line_3max);
     $this->view->chart->add_element($tags);
     $this->view->chart->set_y_axis($y);
     $this->view->chart->set_x_axis($x);
     $this->view->chart->set_bg_colour('#FFFFFF');
 }