/**
  * excel download page
  */
 function dispPurplebookExcelDownload()
 {
     $download_fields = Context::get('download_fields');
     if (!$download_fields) {
         $download_fields = "user_id,user_name,cellphone";
     }
     $download_fields_arr = explode(',', $download_fields);
     // check permission
     $allowed = false;
     $allow_group = Context::get('allow_group');
     $group_srls = explode(',', $allow_group);
     $logged_info = Context::get('logged_info');
     if (!$logged_info) {
         return new Object(-1, 'msg_invalid_request');
     }
     $oMemberModel =& getModel('member');
     foreach ($group_srls as $group_srl) {
         $group = $oMemberModel->getGroup($group_srl);
         if (in_array($group->title, $logged_info->group_list)) {
             $allowed = true;
         }
     }
     if (!$allowed && $logged_info->is_admin != 'Y') {
         return new Object(-1, 'msg_invalid_request');
     }
     header("Content-Type: Application/octet-stream;");
     header("Content-Disposition: attachment; filename=\"members-" . date('Ymd') . ".xls\"");
     echo '<html>';
     echo '<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>';
     echo '<body>';
     echo '<table>';
     // header
     echo '<tr>';
     foreach ($download_fields_arr as $field) {
         echo "<th>{$field}</th>";
     }
     echo "</tr>\n";
     // arguments
     $args = new Object();
     $this->makeArgs($args);
     // include utility
     require_once 'purplebook.utility.php';
     // only mysql
     $db_info = Context::getDBInfo();
     if ($args->group_srl) {
         $query = "SELECT * FROM {$db_info->db_table_prefix}_member member" . " JOIN {$db_info->db_table_prefix}_member_group_member member_group" . " ON  member_group.member_srl = member.member_srl" . " WHERE member_group.group_srl = {$args->group_srl}";
         $oDB =& DB::getInstance();
         $result = $oDB->_query($query);
         require_once 'zMigration.class.php';
         $dbtool = new zMigration();
         $dbtool->setDBInfo($db_info);
         while ($row = $dbtool->fetch($result)) {
             $obj = $this->getResponseObject($row, $download_fields_arr);
             $obj->cellphone = CSUtility::getDashTel(str_replace('|@|', '', $obj->cellphone));
             // skip if no phone number.
             if (Context::get('nonphone_skip') && !$obj->cellphone) {
                 continue;
             }
             echo '<tr>';
             foreach ($download_fields_arr as $field) {
                 if (isset($obj->{$field})) {
                     echo '<td style="mso-number-format:\\@\\">' . $obj->{$field} . '</td>';
                 }
             }
             echo "</tr>\n";
             unset($obj);
             unset($row);
         }
     } else {
         // memory limit problem
         $query_id = 'purplebook.getMembers';
         $output = executeQueryArray($query_id, $args);
         foreach ($output->data as $no => $row) {
             $obj = $this->getResponseObject($row, $download_fields_arr);
             $obj->cellphone = CSUtility::getDashTel(str_replace('|@|', '', $obj->cellphone));
             // skip if no phone number.
             if (Context::get('nonphone_skip') && !$obj->cellphone) {
                 continue;
             }
             echo '<tr>';
             foreach ($download_fields_arr as $field) {
                 if (isset($obj->{$field})) {
                     echo '<td style="mso-number-format:\\@\\">' . $obj->{$field} . '</td>';
                 }
             }
             echo "</tr>\n";
             unset($obj);
             unset($row);
         }
     }
     // tail
     echo '</table>';
     echo '</body>';
     echo '</html>';
     exit(0);
 }
 /**
  * send messages
  */
 function procPurplebookSendMsg($args = FALSE)
 {
     $all_args = Context::getRequestVars();
     if (!$this->grant->send) {
         return new Object(-1, 'msg_not_permitted');
     }
     $module_srl = Context::get('module_srl');
     $oPurplebookModel =& getModel('purplebook');
     $module_info = $oPurplebookModel->getModuleInstConfig($module_srl);
     if ($module_info->module != 'purplebook') {
         return new Object(-1, 'msg_invalid_request');
     }
     if ($args && $args->basecamp) {
         $basecamp = $args->basecamp;
     }
     $encode_utf16 = Context::get('encode_utf16');
     $decoded = $this->getJSON('data');
     $error_count = 0;
     if (!is_array($decoded)) {
         $decoded = array($decoded);
     }
     $calc_point = 0;
     $msg_arr = array();
     $args = new StdClass();
     $extension = array();
     $delimiter = $oPurplebookModel->getDelimiter();
     $logged_info = Context::get('logged_info');
     if (!$logged_info) {
         Context::set('message', Context::getLang('msg_login_required'));
         return;
     }
     foreach ($decoded as $k => $v) {
         $node_route[] = $v->node_route;
     }
     // 받는사람목록에 폴더가 들어있을 경우 풀어서 decoded에 집어넣는다
     foreach ($decoded as $k => $v) {
         if ($v->node_route) {
             $vars->node_route = $node_route;
             $vars->member_srl = $logged_info->member_srl;
             $vars->page = $v->page;
             $vars->list_count = $v->list_count;
             $output = executeQueryArray("purplebook.getPurplebookListByNodeRoute", $vars);
             if (!$output->toBool()) {
                 return $output;
             }
             if (!$output->data) {
                 return;
             }
             foreach ($output->data as $k2 => $v2) {
                 $decoded[$v2->node_id]->msgtype = $decoded[$k]->msgtype;
                 $decoded[$v2->node_id]->recipient = $v2->phone_num;
                 $decoded[$v2->node_id]->callback = $decoded[$k]->callback;
                 $decoded[$v2->node_id]->text = $decoded[$k]->text;
                 $decoded[$v2->node_id]->splitlimit = $decoded[$k]->splitlimit;
                 $decoded[$v2->node_id]->refname = $v2->node_name;
                 $decoded[$v2->node_id]->refid = $decoded[$k]->refid;
                 $decoded[$v2->node_id]->delay_count = $decoded[$k]->delay_count;
                 $decoded[$v2->node_id]->node_id = $v2->node_id;
                 $decoded[$v2->node_id]->file_srl = $decoded[$k]->file_srl;
                 $decoded[$v2->node_id]->reservdate = $v->reservdate;
             }
             unset($decoded[$k]);
             unset($vars);
         }
     }
     // 문자 세팅
     foreach ($decoded as $key => $row) {
         $msg_obj = new stdClass();
         // 국가코드 체크
         if (substr($row->recipient, 0, 1) == '+' || substr($row->recipient, 0, 2) == '00') {
             require_once 'purplebook.utility.php';
             $csutil = new CSUtility();
             // 시작위치 설정
             $startPos = 1;
             if (substr($row->recipient, 0, 2) == '00') {
                 $startPos = 2;
             }
             // 뒷자리부터 국가코드 체크
             for ($i = 6; $i > 0; $i--) {
                 $country_code = $csutil->checkCountryCode(substr($row->recipient, $startPos, $i));
                 if ($country_code > 0) {
                     $msg_obj->country = $country_code;
                     $row->recipient = '0' . substr($row->recipient, $startPos + $i);
                     break;
                 }
             }
         }
         // 머지기능
         if ($row->node_id) {
             // 창이 여러개일때 체크
             if ($first_num != $row->recipient) {
                 $vars->member_srl = $logged_info->member_srl;
                 $vars->node_id = $row->node_id;
                 $output = executeQuery('purplebook.getPurplebook', $vars);
                 if (!$output->toBool()) {
                     return $output;
                 }
                 $merge_memo1 = $output->data->memo1;
                 $merge_memo2 = $output->data->memo2;
                 $merge_memo3 = $output->data->memo3;
             }
             $merge = array('{memo1}', '{memo2}', '{memo3}');
             $change_string = array($merge_memo1, $merge_memo2, $merge_memo3);
             $row->text = str_replace($merge, $change_string, $row->text);
         }
         // 이름 같은 경우는 항상 들어가기 때문에 text안에 {name}이 있을경우 바꿔준다.
         if (strpos($row->text, '{name}') !== false) {
             $row->text = str_replace('{name}', $row->refname, $row->text);
         }
         // set arggument
         $args->type = $row->msgtype;
         $args->sender_no = $row->callback;
         $args->subject = $row->subject;
         $args->country_code = $row->country;
         $args->reservdate = $row->reservdate;
         $args->attachment = $row->file_srl;
         $msg_obj->text = $row->text;
         $msg_obj->to = $row->recipient;
         if ($args->type == 'sms') {
             $calc_point += $module_info->sms_point;
         }
         if ($args->type == 'lms') {
             $calc_point += $module_info->lms_point;
         }
         if ($args->type == 'mms') {
             $calc_point += $module_info->mms_point;
         }
         if (!$first_num) {
             $first_num = $row->recipient;
         }
         $extension[] = $msg_obj;
     }
     // minus point
     if ($module_info->use_point == 'Y') {
         $output = $this->minusPoint($calc_point);
         if (!$output->toBool()) {
             return $output;
         }
     }
     // 발송루트 추가
     $args->route = "Purplebook";
     $args->app_version = "Purplebook 4.3";
     // 메시지 갯수가 limit을 넘긴다면
     if (count($extension) > 1000) {
         $index = 0;
         foreach ($extension as $key => $val) {
             if ($key % 1000 == 0) {
                 $index++;
             }
             $new_extension[$index][] = $val;
         }
         foreach ($new_extension as $val) {
             $args->extension = json_encode($val);
             // send messages
             $oTextmessageController =& getController('textmessage');
             $output = $oTextmessageController->sendMessage($args, $basecamp);
             $success_count += $output->get('success_count');
             $failure_count += $output->get('failure_count');
             $alert_message = $output->getMessage();
             if ($output->get('error_code')) {
                 $error_code = $output->get('error_code');
             }
         }
         $this->add('success_count', $success_count);
         $this->add('failure_count', $failure_count);
         $this->add('alert_message', $alert_message);
         if ($error_code) {
             $this->add('error_code', $error_code);
         }
     } else {
         $args->extension = json_encode($extension);
         // send messages
         $oTextmessageController =& getController('textmessage');
         $output = $oTextmessageController->sendMessage($args, $basecamp);
         //$this->add('data', $output->get('data'));
         $this->add('success_count', $output->get('success_count'));
         $this->add('failure_count', $output->get('failure_count'));
         $this->add('alert_message', $output->getMessage());
         if ($output->get('error_code')) {
             $this->add('error_code', $output->get('error_code'));
         }
     }
 }