/** * 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')); } } }