function get_system_config($cfg_name, $default = false) { $v = fetch_one_value("select config_value from configs where config_name = '{$cfg_name}'"); if ($v === false || $v == false || !$v || empty($v)) { return $default; } else { return $v; } }
/** * Define your hook for specific SMS keyword. * Return true to mark SMS as processed and * will be passed on next processing. * Return false will cause the SMS to be * reprocessed infinitely until you return true. */ function my_hook_stok_function($keyword, $params) { global $app_name, $app_version, $nama_modem; // Sometime, you don't need to reply SMS from non-user number, // such as SMS from Service Center, message center, // or promotional SMS: if (strlen($params['sender']) <= 6) { return true; } else { // If the SMS requires reply, do it as follows: /* * return sms_send($params['sender'], * 'Thank your for texting us.', * $nama_modem); */ // or simply return true without replying it: /* * return true; */ $tersedia = fetch_one_value("select sum(stok_inkubator) from vw_inkubator_tersedia"); return sms_send($params['sender'], 'Inkubator tersedia: ' . $tersedia . ' buah.', $nama_modem); } }
</div> <!-- /.panel-heading --> <div class="panel-body"> <div class="row"> <div class="col-lg-6"> <label>Legenda Kode Pinjam:</label> <span class="label label-danger">Ditolak</span> <span class="label label-warning">Ditunda</span> <span class="label label-success">Disetujui</span> <!-- <span class="label label-default">Dikembalikan</span> --> </div> <div class="col-lg-6"> <?php $states = fetch_one_value(" SELECT replace(replace(replace(replace(COLUMN_TYPE,'''',''),'enum(',''),')',''),', ','')\n from information_schema.`COLUMNS` where table_schema = '" . DB_DATABASE . "' and table_name = 'inkubator_pinjam'\n and COLUMN_name = 'status_pinjam' ;"); $states = explode(',', $states); ?> <div class="col-lg-12"> <div class="btn-group pull-right"> <?php echo '<a href="#" class="btn disabled btn-default btn-sm"><strong>Status Peminjaman:</strong></a>'; echo '<a href="' . $_SERVER['PHP_SELF'] . '" class="btn btn-default btn-sm">Semua</a>'; foreach ($states as $state) { echo '<a href="' . $_SERVER['PHP_SELF'] . '?status=' . urlencode($state) . '" class="btn btn-default btn-sm">' . ucfirst($state) . '</a>'; } ?> </div> </div>
* Include hook files: */ // $f = fopen('D:/testtt.txt','w'); foreach ($_SMS_PROCESSOR_DAEMON_HOOKS as $keyword) { $keyword_file = str_replace("\\", "/", dirname(dirname(__FILE__))) . '/sms-daemon-hooks/' . basename($keyword['file_name']); // fputs($f, $keyword_file ."\n"); if (file_exists($keyword_file)) { include_once $keyword_file; // fputs($f, $keyword_file ."\n"); } } // fclose($f); $data_count_to_process = get_system_config('sms_to_process_per_minute', 10); // execute 10 data every minute - as this task run $nama_modem = fetch_one_value("select coalesce((select nama_modem from modem_gateway order by id desc limit 0,1),'')"); $last_id = fetch_one_value("select coalesce((select config_value from configs where config_name = '" . LAST_ID_CONFIG_NAME . "'),0)"); // create keyword state cache: $keyword_states = keyword_fetch_states_from_db(); $sms_query = "select sv.id from sms_valid sv where sv.id > {$last_id} and sv.diproses = 'Ditunda' \n order by sv.waktu_terima asc, sv.id asc limit 0, {$data_count_to_process}"; $smses = fetch_query($sms_query); $last_processed_id = $last_id; $all_ok = true; $cnt = 0; if (count($smses) == 0) { // No new message to process exit('No new message to process'); } else { echo 'Processing ' . count($smses) . ' SMS(es) : '; foreach ($smses as $sms) { $last_processed_id = $sms['id']; $sms_item = sms_fetch_item($last_processed_id);
/** * Define your hook for specific SMS keyword. * Return true to mark SMS as processed and * will be passed on next processing. * Return false will cause the SMS to be * reprocessed infinitely until you return true. * * AVOID HEAVY LONG PROCESS HERE. Database initializations are better be done on activation callback. */ function my_hook_monitor_function($keyword, $params) { global $app_name, $app_version, $nama_modem; global $my_kembali_sms_format, $my_kembali_sms_sample; // Sometime, you don't need to reply SMS from non-user number, // such as SMS from Service Center, message center, // or promotional SMS: $valid_param_count = 5; // pre( $params); // return true; if (strlen($params['sender']) <= 6) { return true; } else { if (count($params['params']) != $valid_param_count) { sms_send($params['sender'], '1/2. SMS tidak valid. Jumlah parameter data harus ' . $valid_param_count . '.', $nama_modem); sms_send($params['sender'], '2/2. Format SMS: ' . $my_monitor_sms_format, $nama_modem); sms_send($params['sender'], '3/2. Contoh SMS: ' . $my_monitor_sms_sample, $nama_modem); } else { $kode_pinjam = strtoupper($params['params'][1]); // cek kode pinjam, jika ID = 0, berarti kode pinjam tidak valid: $id_pinjam = fetch_one_value("select coalesce( (\n select UUID_SHORT() id from inkubator_pinjam p where upper(p.kode_pinjam) = '{$kode_pinjam}'\n and p.status_pinjam = 'Disetujui' \n ),0) as id"); if ($id_pinjam == 0) { sms_send($params['sender'], 'Kode Pinjam tidak ditemukan: ' . $kode_pinjam . '.', $nama_modem); } else { // proses SMS dan insert ke table `inkubator_kembali`: // Sample: KEMBALI*323431-353131-35*30*3.60*SEHAT; $p_pjg = trim($params['params'][2]); $p_berat = trim($params['params'][3]); $p_kondisi = strtoupper(trim($params['params'][4])); // cek tangal, panjang dan berat apakah formatnya sesuai atau tidak. // $p_validate_tgl = '/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/'; // dd/mm/yyyy $p_validate_pjg = '/^[0-9]{1,2}+([\\,\\.][0-9]{1,2})?$/'; // max2digits[.,]max2digits if (!preg_match($p_validate_pjg, $p_pjg)) { sms_send($params['sender'], 'Maaf. Panjang bayi saat kembali salah. Contoh panjang bayi: 31.5', $nama_modem); } else { if (!preg_match($p_validate_pjg, $p_berat)) { sms_send($params['sender'], 'Maaf. Berat bayi saat kembali salah. Contoh berat bayi: 3,12', $nama_modem); } else { if ($p_kondisi != 'SEHAT' && $p_kondisi != 'SAKIT') { sms_send($params['sender'], 'Maaf. Kondisi bayi salah. Harus SEHAT atau SAKIT.', $nama_modem); } else { // process tgl, berat & panjang: // xx/yy/xxxx $p_skor = $p_kondisi == 'SEHAT' ? 1 : 0; $p_berat = str_replace(',', '.', $p_berat); $p_pjg = str_replace(',', '.', $p_pjg); // all set! save it to database. $sub_mon_sql = "insert into inkubator_monitoring \n \t\t(id, kode_pinjam, tgl_input, panjang_bayi, berat_bayi, kondisi, skor, keterangan)\n \t values\n \t\t(UUID_SHORT(), '{$kode_pinjam}', CURRENT_TIMESTAMP(), {$p_pjg}, {$p_berat}, '{$p_kondisi}', {$p_skor},\n \t\tconcat('Data monitoring ', (select p.nama_bayi from inkubator_pinjam p where p.kode_pinjam = '{$kode_pinjam}'))\n \t );"; /* $f = fopen('d:/test-.txt','w'); fputs($f, $save_sql); fputs($f, $sub_mon_sql); fclose($f); */ if (exec_query($sub_mon_sql)) { sms_send($params['sender'], 'Data monitoring telah diterima.', $nama_modem); } else { sms_send($params['sender'], 'Maaf, server sedang sibuk. Cobalah beberapa saat lagi.', $nama_modem); } } } } } } return true; } }
error_reporting(E_ALL); /** * If this page is is being loaded using Ajax call, * fetch the requested data and skip the rest of the page: */ if ($ajax) { $sms_offset = post_var('sms_offset', 0); // default offset of first item to fetch. $sms_limit = post_var('sms_limit', 10); // default item count per page. $sms_keyword = post_var('sms_keyword', ''); // default SMS with this keyword to display. // pre($sms_keyword); $sms_sort_order = post_var('sms_sortorder', 'asc'); // default SMS will be sorted ascending way. Only SMS timestamp supported. $sms_count = fetch_one_value("select count(id) from sms_valid" . (!empty($sms_keyword) && $sms_keyword != '*' ? " where upper(jenis) = upper('{$sms_keyword}')" : "")); // $sms_count = 0; if ($sms_offset == -1) { $sms_offset = $sms_count - $sms_limit; if ($sms_offset < 0) { $sms_offset = 0; } } // $leftover_sql = "select max(id) from sms_valid sv order by sv.waktu_terima $sms_sort_order, sv.id $sms_sort_order limit $sms_offset,$sms_limit"; $sql = "select sv.id, sv.udh, sv.waktu_terima, sv.pengirim, sv.sms, sv.jenis, sv.param_count, sv.diproses\n from sms_valid sv" . (!empty($sms_keyword) && $sms_keyword != '*' ? " where upper(sv.jenis) = upper('{$sms_keyword}')" : "") . " order by sv.waktu_terima {$sms_sort_order}, sv.id {$sms_sort_order} limit {$sms_offset},{$sms_limit}"; /* echo $sql; echo '<hr>'.$sms_count; */ if ($sms_count == 0) { ?>
*/ break; case 'checkkeyword': $req_kw = post_var('reqkw'); if (keyword_hook_registered($req_kw) !== false) { echo 'ERKeyword telah digunakan sebelumnya.<br>Silahkan gunakan keyword lain.'; } else { echo 'OKKeyword dapat digunakan'; } break; case 'changestate': $req_id = post_var('reqid'); $req_state = post_var('reqstate'); try { exec_query("update sms_keywords set active = (case when active='Y' then 'N' else 'Y' end) where id = '{$req_id}';"); $state = fetch_one_value("select upper(active) from sms_keywords where id = '{$req_id}'"); echo 'OK' . ($state == 'Y' ? 'active' : 'disabled'); } catch (Exception $e) { echo 'ER' . $req_state; } break; case 'dropkeyword': $req_id = post_var('reqid'); try { $kw_data = fetch_query("select keyword, function_name, file_name from sms_keywords where id = '{$req_id}'"); /* $kw_file = fetch_one_value("select file_name from sms_keywords where id = '$req_id'"); $kw_keyword = fetch_one_value("select keyword from sms_keywords where id = '$req_id'"); */ $kw_keyword = $kw_data[0]['keyword']; $kw_function = $kw_data[0]['function_name'];
} require_once '../cores/db.php'; include_once '../cores/session.php'; // require_login('post.php?show/newest'); /** * If this page is is being loaded using Ajax call, * fetch the requested data and skip the rest of the page: */ if ($ajax) { $sms_offset = post_var('sms_offset', 0); // default offset of first item to fetch. $sms_limit = post_var('sms_limit', 10); // default item count per page. $sms_sort_order = post_var('sms_sortorder', 'asc'); // default SMS will be sorted ascending way. Only SMS timestamp supported. $sms_count = fetch_one_value("select count(id) from sentitems"); if ($sms_offset == -1) { $sms_offset = $sms_count - $sms_limit; if ($sms_offset < 0) { $sms_offset = 0; } } // $leftover_sql = "select max(id) from sms_valid sv order by sv.waktu_terima $sms_sort_order, sv.id $sms_sort_order limit $sms_offset,$sms_limit"; $sql = "select ss.ID id, ss.UDH udah, ss.SendingDateTime sent_time, ss.DestinationNumber no_tujuan, ss.TextDecoded sms,\n ss.Status status_kirim\n from sentitems ss order by ss.SendingDateTime {$sms_sort_order}, ss.id {$sms_sort_order} limit {$sms_offset},{$sms_limit}"; // echo $sql; if ($sms_count == 0) { ?> <li class="left clearfix"> <span class="chat-img pull-left"> <img class="img-circle" src="img/front-end/sms-data-sent.jpg" width="50" height="50" /> </span>
} require_once '../cores/db.php'; include_once '../cores/session.php'; // require_login('post.php?show/newest'); /** * If this page is is being loaded using Ajax call, * fetch the requested data and skip the rest of the page: */ if ($ajax) { $sms_offset = post_var('sms_offset', 0); // default offset of first item to fetch. $sms_limit = post_var('sms_limit', 10); // default item count per page. $sms_sort_order = post_var('sms_sortorder', 'asc'); // default SMS will be sorted ascending way. Only SMS timestamp supported. $sms_count = fetch_one_value("select count(id) from outbox"); if ($sms_offset == -1) { $sms_offset = $sms_count - $sms_limit; if ($sms_offset < 0) { $sms_offset = 0; } } // $leftover_sql = "select max(id) from sms_valid sv order by sv.waktu_terima $sms_sort_order, sv.id $sms_sort_order limit $sms_offset,$sms_limit"; $sql = "select ss.ID id, ss.UDH udah, ss.SendingDateTime send_time, ss.DestinationNumber no_tujuan, ss.TextDecoded sms\n from outbox ss order by ss.SendingDateTime {$sms_sort_order}, ss.id {$sms_sort_order} limit {$sms_offset},{$sms_limit}"; // echo $sql; if ($sms_count == 0) { ?> <li class="left clearfix"> <span class="chat-img pull-left"> <img class="img-circle" src="img/front-end/sms-data-outbox.jpg" width="50" height="50" /> </span>