Modifikasi Kartu Anggota SLIMS (Senayan versi 3.14)

Secara default SLIMS memberikan fasilitas kartu anggota dengan gambar yang terkesan biasa. Agar tampilan kartu anggota lebih baik, caranya adalah sebagai berikut:

1. Modifikasi file member_card_generator.php (file ini berada di folder \admin\modules\membership\)

2. Edit file tersebut dengan source di bawah ini:

<?php
/**
 * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/

/* Member card print */

// main system configuration
require ‘../../../sysconfig.inc.php’;
// start the session
require SENAYAN_BASE_DIR.’admin/default/session.inc.php’;
require SENAYAN_BASE_DIR.’admin/default/session_check.inc.php’;
require SIMBIO_BASE_DIR.’simbio_GUI/table/simbio_table.inc.php’;
require SIMBIO_BASE_DIR.’simbio_GUI/form_maker/simbio_form_table_AJAX.inc.php’;
require SIMBIO_BASE_DIR.’simbio_GUI/paging/simbio_paging.inc.php’;
require SIMBIO_BASE_DIR.’simbio_DB/datagrid/simbio_dbgrid.inc.php’;
require SIMBIO_BASE_DIR.’simbio_DB/simbio_dbop.inc.php’;

// privileges checking
$can_read = utility::havePrivilege(‘membership’, ‘r’);

if (!$can_read) {
die(‘<div class=”errorBox”>You dont have enough privileges to view this section</div>’);
}

// local settings
$max_print = 10;

// clean print queue
if (isset($_GET[‘action’]) AND $_GET[‘action’] == ‘clear’) {
// update print queue count object
echo ‘<script type=”text/javascript”>parent.$(\’queueCount\’).update(\’0\’);</script>’;
utility::jsAlert(__(‘Print queue cleared!’));
unset($_SESSION[‘card’]);
exit();
}

if (isset($_POST[‘itemID’]) AND !empty($_POST[‘itemID’]) AND isset($_POST[‘itemAction’])) {
if (!$can_read) {
die();
}
if (!is_array($_POST[‘itemID’])) {
// make an array
$_POST[‘itemID’] = array($_POST[‘itemID’]);
}
// loop array
if (isset($_SESSION[‘card’])) {
$print_count = count($_SESSION[‘card’]);
} else {
$print_count = 0;
}
// card size
$size = 2;
// create AJAX request
echo ‘<script type=”text/javascript” src=”‘.JS_WEB_ROOT_DIR.’prototype.js”></script>’;
echo ‘<script type=”text/javascript”>’;
// loop array
foreach ($_POST[‘itemID’] as $itemID) {
if ($print_count == $max_print) {
$limit_reach = true;
break;
}
if (isset($_SESSION[‘card’][$itemID])) {
continue;
}
if (!empty($itemID)) {
$card_text = trim($itemID);
echo ‘new Ajax.Request(\”.SENAYAN_WEB_ROOT_DIR.’lib/phpbarcode/barcode.php?code=’.$card_text.’&encoding=’.$sysconf[‘barcode_encoding’].’&scale=’.$size.’&mode=png\’, { method: \’get\’, onFailure: function(sendAlert) { alert(\’Error creating card!\’); } });’.”\n”;
// add to sessions
$_SESSION[‘card’][$itemID] = $itemID;
$print_count++;
}
}
echo ‘</script>’;
if (isset($limit_reach)) {
$msg = str_replace(‘{max_print}’, $max_print, __(‘Selected items NOT ADDED to print queue. Only {max_print} can be printed at once’)); //mfc
utility::jsAlert($msg);
} else {
// update print queue count object
echo ‘<script type=”text/javascript”>parent.$(\’queueCount\’).update(\”.$print_count.’\’);</script>’;
utility::jsAlert(__(‘Selected items added to print queue’));
}
exit();
}

// card pdf download
if (isset($_GET[‘action’]) AND $_GET[‘action’] == ‘print’) {
// check if label session array is available
if (!isset($_SESSION[‘card’])) {
utility::jsAlert(__(‘There is no data to print!’));
die();
}
if (count($_SESSION[‘card’]) < 1) {
utility::jsAlert(__(‘There is no data to print!’));
die();
}
// concat all ID together
$member_ids = ”;
foreach ($_SESSION[‘card’] as $id) {
$member_ids .= ‘\”.$id.’\’,’;
}
// strip the last comma
$member_ids = substr_replace($member_ids, ”, -1);
// send query to database
$member_q = $dbs->query(‘SELECT m.member_name, m.member_id, m.birth_date, m.member_image, mt.member_type_name FROM member AS m
LEFT JOIN mst_member_type AS mt ON m.member_type_id=mt.member_type_id
WHERE m.member_id IN(‘.$member_ids.’)’);
$member_datas = array();
while ($member_d = $member_q->fetch_assoc()) {
if ($member_d[‘member_id’]) {
$member_datas[] = $member_d;
}
}

// include printed settings configuration file
include SENAYAN_BASE_DIR.’admin’.DIRECTORY_SEPARATOR.’admin_template’.DIRECTORY_SEPARATOR.’printed_settings.inc.php’;
// check for custom template settings
$custom_settings = SENAYAN_BASE_DIR.’admin’.DIRECTORY_SEPARATOR.$sysconf[‘admin_template’][‘dir’].DIRECTORY_SEPARATOR.$sysconf[‘template’][‘theme’].DIRECTORY_SEPARATOR.’printed_settings.inc.php’;
if (file_exists($custom_settings)) {
include $custom_settings;
}
// chunk cards array
$chunked_card_arrays = array_chunk($member_datas, $card_items_per_row);
// create html ouput
$html_str = ‘<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>&#8217;.”\n”;
$html_str .= ‘<html xmlns=”http://www.w3.org/1999/xhtml”><head><title>Member card Label Print Result</title>’.”\n”;
$html_str .= ‘<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />’;
$html_str .= ‘<meta http-equiv=”Pragma” content=”no-cache” /><meta http-equiv=”Cache-Control” content=”no-store, no-cache, must-revalidate, post-check=0, pre-check=0″ /><meta http-equiv=”Expires” content=”Sat, 26 Jul 1997 05:00:00 GMT” />’;
$html_str .= ‘<style type=”text/css”>’.”\n”;
$html_str .= ‘body { padding: 0; margin: 1cm; font-size: 9pt; font-family: ‘.$card_fonts.’; background: #fff; }’.”\n”;
// $html_str .= ‘body { padding: 0; margin: 1cm; font-size: ‘.$card_font_size.’pt; font-family: ‘.$card_fonts.’; background: #fff; }’.”\n”;
$html_str .= ‘.labelStyle { width: ‘.$card_box_width.’cm; height: ‘.$card_box_height.’cm; text-align: center; margin: ‘.$card_items_margin.’cm; border: ‘.$card_border_size.’px solid #666666; background:#bcf48b url(card.png)no-repeat; background-align: bottom; padding: 5px; overflow: hidden;}’.”\n”;
// $html_str .= ‘.labelHeaderStyle { background-color: #CCCCCC; font-weight: bold; padding: 5px; margin-bottom: 5px; }’.”\n”;
$html_str .= ‘#photo { border: 1px solid #666666; float: left; width: ‘.$card_photo_width.’cm; height: ‘.$card_photo_height.’cm; overflow: hidden; }’.”\n”;
$html_str .= ‘#photo img { width: 100%; }’.”\n”;
$html_str .= ‘#bio { float: left; padding-left: 5px; text-align: left; overflow: hidden; width: ‘.($card_box_width-$card_photo_width-0.3).’cm; }’.”\n”;
$html_str .= ‘</style>’.”\n”;
$html_str .= ‘</head>’.”\n”;
$html_str .= ‘<body>’.”\n”;
$html_str .= ‘<a href=”#” onclick=”window.print()”>Print Again</a>’.”\n”;
$html_str .= ‘<table style=”margin: 0; padding: 0;” cellspacing=”0″ cellpadding=”0″>’.”\n”;
// loop the chunked arrays to row
foreach ($chunked_card_arrays as $card_rows) {
$html_str .= ‘<tr>’.”\n”;
foreach ($card_rows as $card) {
$html_str .= ‘<td valign=”top”>’;
$html_str .= ‘<div class=”labelStyle”>’;
if (trim($card_header_text) != ”) { $html_str .= ‘<div class=”labelHeaderStyle”></div>’; }
// if (trim($card_header_text) != ”) { $html_str .= ‘<div class=”labelHeaderStyle”>’.$card_header_text.'</div>’; }
$html_str .= ‘<br>&nbsp;</br>’;
$html_str .= ‘<br>&nbsp;</br>’;
$html_str .= ‘<div id=”photo”>’;
$html_str .= ‘<div style=”text-align: center;”><img src=”‘.SENAYAN_WEB_ROOT_DIR.IMAGES_DIR.’/persons/’.$card[‘member_image’].'” border=”0″ /></div>’;
// $html_str .= ‘<img src=”‘.SENAYAN_WEB_ROOT_DIR.IMAGES_DIR.’/persons/’.$card[‘member_image’].'” border=”0″ />’;
$html_str .= ‘</div>’;
$html_str .= ‘<div id=”bio”>’;
$html_str .= ‘<div>’.( $card_include_field_label?__(‘Member ID’).’ : ‘:” ).'<strong>’.$card[‘member_id’].'</strong></div>’;
$html_str .= ‘<div>’.( $card_include_field_label?__(‘Member Name’).’ : ‘:” ).'<strong>’.$card[‘member_name’].'</strong></div>’;
$html_str .= ‘<div>’.( $card_include_field_label?__(‘Membership Type’).’ : ‘:” ).'<strong>’.$card[‘member_type_name’].'</strong></div>’;

$html_str .= ‘<div style=”text-align: left;”><img src=”‘.SENAYAN_WEB_ROOT_DIR.IMAGES_DIR.’/barcodes/’.str_replace(array(‘ ‘), ‘_’, $card[‘member_id’]).’.png” style=”width: 40%; margin-top: 10px;” border=”0″ /></div>’;
// $html_str .= ‘<div style=”text-align: center;”><img src=”‘.SENAYAN_WEB_ROOT_DIR.IMAGES_DIR.’/barcodes/’.str_replace(array(‘ ‘), ‘_’, $card[‘member_id’]).’.png” style=”width: ‘.$card_barcode_scale.’%; margin-top: 10px;” border=”0″ /></div>’;
$html_str .= ‘</div>’;
$html_str .= ‘</div>’;
$html_str .= ‘</td>’;
}
$html_str .= ‘<tr>’.”\n”;
}
$html_str .= ‘</table>’.”\n”;
$html_str .= ‘<script type=”text/javascript”>self.print();</script>’.”\n”;
$html_str .= ‘</body></html>’.”\n”;
// unset the session
unset($_SESSION[‘card’]);
// write to file
$print_file_name = ‘member_card_gen_print_result_’.strtolower(str_replace(‘ ‘, ‘_’, $_SESSION[‘uname’])).’.html’;
$file_write = @file_put_contents(FILES_UPLOAD_DIR.$print_file_name, $html_str);
if ($file_write) {
// update print queue count object
echo ‘<script type=”text/javascript”>parent.$(\’queueCount\’).update(\’0\’);</script>’;
// open result in window
echo ‘<script type=”text/javascript”>top.openHTMLpop(\”.SENAYAN_WEB_ROOT_DIR.FILES_DIR.’/’.$print_file_name.’\’, 800, 500, \”.__(‘Member Card Printing’).’\’)</script>’;
} else { utility::jsAlert(‘ERROR! Cards failed to generate, possibly because ‘.SENAYAN_BASE_DIR.FILES_DIR.’ directory is not writable’); }
exit();
}

?>
<fieldset class=”menuBox”>
<div class=”menuBoxInner printIcon”>
<?php echo __(‘Member Card Printing’); ?> – <a target=”blindSubmit” href=”<?php echo MODULES_WEB_ROOT_DIR; ?>membership/member_card_generator.php?action=print” class=”notAJAX headerText2″><?php echo __(‘Print Member Cards for Selected Data’); ?></a>
&nbsp;<a target=”blindSubmit” href=”<?php echo MODULES_WEB_ROOT_DIR; ?>membership/member_card_generator.php?action=clear” class=”notAJAX headerText2″ style=”color: #FF0000;”><?php echo __(‘Clear Print Queue’); ?></a>
<hr />
<form name=”search” action=”<?php echo MODULES_WEB_ROOT_DIR; ?>membership/member_card_generator.php” id=”search” method=”get” style=”display: inline;”><?php echo __(‘Search’); ?>:
<input type=”text” name=”keywords” size=”30″ />
<input type=”submit” id=”doSearch” value=”<?php echo __(‘Search’); ?>” class=”button” />
</form>
<div style=”margin-top: 3px;”>
<?php
echo __(‘Maximum’).’ <font style=”color: #FF0000″>’.$max_print.'</font> ‘.__(‘records can be printed at once. Currently there is’).’ ‘; //mfc
if (isset($_SESSION[‘card’])) {
echo ‘<font id=”queueCount” style=”color: #FF0000″>’.count($_SESSION[‘card’]).'</font>’;
} else { echo ‘<font id=”queueCount” style=”color: #FF0000″>0</font>’; }
echo ‘ ‘.__(‘in queue waiting to be printed.’); //mfc
?>
</div>
</div>
</fieldset>
<?php
/* search form end */
/* ITEM LIST */
// table spec
$table_spec = ‘member AS m
LEFT JOIN mst_member_type AS mt ON m.member_type_id=mt.member_type_id’;
// create datagrid
$datagrid = new simbio_datagrid();
$datagrid->setSQLColumn(‘m.member_id’,
‘m.member_id AS \”.__(‘Member ID’).’\”,
‘m.member_name AS \”.__(‘Member Name’).’\”,
‘mt.member_type_name AS \”.__(‘Membership Type’).’\”);
$datagrid->setSQLorder(‘m.last_update DESC’);
// is there any search
if (isset($_GET[‘keywords’]) AND $_GET[‘keywords’]) {
$keyword = $dbs->escape_string(trim($_GET[‘keywords’]));
$words = explode(‘ ‘, $keyword);
if (count($words) > 1) {
$concat_sql = ‘ (‘;
foreach ($words as $word) {
$concat_sql .= ” (m.member_id LIKE ‘%$word%’ OR m.member_name LIKE ‘%$word%'”;
}
// remove the last AND
$concat_sql = substr_replace($concat_sql, ”, -3);
$concat_sql .= ‘) ‘;
$datagrid->setSQLCriteria($concat_sql);
} else {
$datagrid->setSQLCriteria(“m.member_id LIKE ‘%$keyword%’ OR m.member_name LIKE ‘%$keyword%'”);
}
}
// set table and table header attributes
$datagrid->table_attr = ‘align=”center” id=”dataList” cellpadding=”5″ cellspacing=”0″‘;
$datagrid->table_header_attr = ‘class=”dataListHeader” style=”font-weight: bold;”‘;
// edit and checkbox property
$datagrid->edit_property = false;
$datagrid->chbox_property = array(‘itemID’, __(‘Add’));
$datagrid->chbox_action_button = __(‘Add To Print Queue’);
$datagrid->chbox_confirm_msg = __(‘Add to print queue?’);
$datagrid->column_width = array(‘10%’, ‘70%’, ‘15%’);
// set checkbox action URL
$datagrid->chbox_form_URL = $_SERVER[‘PHP_SELF’];
// put the result into variables
$datagrid_result = $datagrid->createDataGrid($dbs, $table_spec, 20, $can_read);
if (isset($_GET[‘keywords’]) AND $_GET[‘keywords’]) {
echo ‘<div class=”infoBox”>’.__(‘Found’).’ ‘.$datagrid->num_rows.’ ‘.__(‘from your search with keyword’).’: “‘.$_GET[‘keywords’].'”</div>’; //mfc
}
echo $datagrid_result;
/* main content end */

?>

3. Buat desain kartu anggota berukuran 468×237 px menggunakan corel draw, adobe photoshop atau yang lainnya, kemudian save dengan nama card.png (ingat, format file harus *.png untuk menyesuaikan script di atas).

4. Simpan file card.png tersebut di folder files.

5. Semoga berhasil.

17 responses to this post.

  1. […] Modifikasi Kartu Anggota SLIMS (Senayan versi 3.14) Posted by Komunitas SLiMS On February 28, 2012 Categories: Kegiatan Share Tweet sumber: di sini […]

    Reply

  2. bisa minta file langsung gak???

    Reply

  3. gan, makasih scriptnya, saya coba bisa jalan. namun pas mau di print, yang muncul cuma foto nya aja. mohon pencerahannya.

    terima kasih.

    Reply

    • kalau sudah bisa muncul di tampilan seharusnya hasil yang diprint sesuai dengan yang ditampilkan. Kecuali kalau ada masalah di printernya…

      Reply

  4. Posted by luthfisurrahLuthfi on 08/03/2012 at 7:58 am

    kalo lewat windows gmna caranya mas….

    Reply

  5. Mas, kalo yang versi 3.15 (Matoa) bisa ga? saya coba kodenya, trus bikin image png-nya, tapi pas diprint to file, hasil pdfnya ga tampil image png-nya, cuma seperti kertas putih.. klo dipreview sih keliatan png-nya.. apa ada kode yang harus dimodif lagi?

    Reply

  6. oh ya, satu lagi, kalo ukuran kartu mau disesuaikan dengan ukuran atm (8.8 x 5.5 cm – 311.81 x 194.88 px) bagian kode yang mana yang harus dirubah? terima kasih.

    Reply

    • edit script menjadi di bawah ini:
      $html_str .= ‘.labelStyle { width: 8,8cm; height: 5,5cm; text-align: center; margin: ‘.$card_items_margin.’cm; border: ‘.

      setelah diprint sesuaikan ukuran yang diinginkan…

      Reply

  7. tanya mas, saya sudah berhasil mengubah nya, tetapi saat dicetak background tidak bisa tampil. trims.

    Reply

  8. Posted by ayo maca on 16/10/2012 at 10:16 am

    saya sudah edit member_card_generator.php nya. saat buka kartu anggota muncul

    Parse error: syntax error, unexpected ‘.’ in C:\xampp\htdocs\senayan\admin\modules\membership\member_card_generator.php on line 20

    mohon bantuannya. terimakasih

    Reply

    • – Buat desain kartu anggota berukuran 468×237 px menggunakan corel draw, adobe photoshop atau yang lainnya, kemudian save dengan nama card.png (ingat, format file harus *.png untuk menyesuaikan script di atas).

      – Simpan file card.png tersebut di folder files.

      – Semoga berhasil.

      Reply

      • Posted by ayo maca on 20/10/2012 at 9:48 am

        sudah saya coba belum berhasil. masih tertulis
        Parse error: syntax error, unexpected ‘.’ in C:\xampp\htdocs\senayan\admin\modules\membership\member_card_generator.php on line 20

        saat melakukan sirkulasi tiba tiba listrik padam. setelah hidup kemudian muncul

        Warning: mysqli::query() [mysqli.query]: (HY000/1194): Table ‘loan’ is marked as crashed and should be repaired in C:\xampp\htdocs\senayan\admin\modules\circulation\loan_list.php on line 75

        Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\senayan\admin\modules\circulation\loan_list.php on line 87

        di sejarah peminjaman juga tertulis

        ERROR
        MySQL Server said : Table ‘loan’ is marked as crashed and should be repaired

        saya buta masalah teknologi. mohon bantuannya. terima kasih banyak
        oh ya saya saat ini pakai seulanga senayan 3 stable 14

Leave a comment