ÿØÿà JFIF    ÿÛ „  ( %!1"%)+...383-7(-.+  -%%--------+------------/----------------------------ÿÀ  ¶" ÿÄ     ÿÄ @    !1AQaq‘¡"±ÁÑð2’BRráS‚ñ3b¢CT²Ò #cÿÄ    ÿÄ '   1!AQ2a"‘±#ÿÚ   ? ò(/p‘—–¢·,M|¯G»R£üešT. ôŸEoCFñ‡ 4ÔkåóxR|µÁ¨ÓDà!Ç´µ˜‡p ÍQ‹§!þž^õWsŒy  åÁ§$á«%ºq˜™JyyË0y«^Ϗ -3ÃÏËÈ£Æ\P’ä„s&•‹Üs üô'àWt¹pñCp$bÚF`·7.^)¾!)ÒÙ˜–ÅÏš^h¾ø³·ìe±ŒaeÖ—Í,e=B}Jéߦ$$½—šÙÜCC¯¶è8β–Åkèwx LÉngT±æ¹£Ócœ¿Í/©Éÿ ‰ÚCÒ­mq;Tt¶–}0"zÖPcd1š­¤tˆ„ÐÓâqú[™öUCŠ2޿د­É(¸ßúçšmW,Ò ºf‹Ån™ÄLêÁ8üÁkÁ€L¥ÍuJ1œôrÂSŒÓöt!7EUíïb)AËi¬â-ÙHk8òÁiXYwÅ)O^"ÇØriÛô{»wRUKÙÏÚlÓ¬€‚’שT ] ªb—ÊîKC^×M“xùäñz¬zJ× {4[¹M'IÆeH1LCWÕ]œûº WDæà°OÅ‚¹c²ÞuA–rL`HšpCez‡V’— Ž‚Ë„–ñ­'µR0ÕÖ=À:±G»C\nÆÉ5*¢ †3šhQ4ýÒi$Õ1"Ü]¢p-q3zcQ$ªö¨¥æf›‘»´ÝÚHá„e²JÇ–iÊ:·à¬Øc5Åk»Laª*wi [0Ówk ¦a¦0Õ²ÅÅ‚T¸’³q:Æ<¹ú Ò˜Æ}2VE•Ѐp¡Ô3Úº …h³^LJºçì¥Ánó|˜ÖˆÎˆ+« ¦dø‘Mº–d\ªDðÛ„Ì×LÝ——Ð9Ç|•FèçVm™¨€™3õS–9Äå¢<̉Ìm¢±`·º˜&Z²ž Ë®D«¶»6™‰©­HÈ Àá«h­i³04æ’hxœi3ï¨(ÓL·†‹¶ËpŒ ƒÜÒ? :õdsÀ –3æÓ·Üjâ¬9—]8n¼&]I F£¼…ì–—Œ0v°LǐÅfÛ2TÖ’aµ˜N@ÖBSÏ^à´4-±°b×nÈÈœÆD=KdŒø…ÄÈK,›ÖR§fjü$^ÔÎ!„6^ s:Üun\ôkCÞò÷<—Lúl Í›G¹ÀPá¼Nc¡šÒ…ÙWͳœ±vÊáЄ×9‹P‰cEØ‘™›µŸP<×g1 º©Ø¬wiÁ^l5× I/';Ë+´Z‡ÓÄFÕp[Èð’ HÄ ó 9¬Dl4“é±Ï”V=^Hð;žLädÉa‚°Ë,#/Ž~²BÔÛ QãñQtIeórVB,ÏÂf‹4#Μc‹É3ZIÖ Œ¢¥·üxa‡Ãçè„jŠ[5 Ä!U?,3žÎ×…ðdÓ÷háŠA‰ìÄ4÷ÃÜZÃE{‰®+W\ZÍE[‰»µk»MÝ­`¢©†˜ÃV‹-f¢¡†¢a«eŠ%«Y¨©q%jâd,Ôq`) ¤¦…šˆ ¦E>0Ùb²t–Ÿ  ÷jsςҒKÈcø(é›;k(’#ôŒQ ™C> õ³M9óºÆµ¤çâ;uÀ)5>RÔ¸fÓ~Ȧ—’-$fe«"FâUˆÊwµPÏu w+"åÉó¨6s™Û9(À¨ù©hE°½†n`m~“@©›p!Vkhµ Á1šbEqqÊ@ºèl›2 –Yã%‘‚hÛ{a¶‡ÅÞM²¬çL34®Çl]®‹ŽØŒm'RÜe35æöˆ­Á­ cP9šeÁköo´L³Ì=p8]”‡B¶,šº|ɏdzXˆØk*ÇÚ{#ñ‰pã(€¶‡9ý'šÜ³½¯kƒ†Â’ëSOƒ•Å®H6+a¢µˆ‹Y¨b˜b+XˆÖ!°u!¢"µˆˆn2ˆ Å0Ä`Å Ô®c(ÓÜGº•Ä»Œ âWî%q.áÐÄ÷î%umÍ£+ÜQ,Vn¦-GphU¸¢X­&,Gt ·K¢ÅÅ·¥RÄÊÉbKn N­R2g$VµÕó Qr#–ÓZUÏð0ÎtÙÀœz ëöo“Îk¯n„T°"SÞ+³/…€½"ižãO%Í%&Δâ‘ËØ´IˆÓ°Ë‰ÞM3.™yçÁzit›`4C`k¢¼á!álÄï sÂ[×!¤l¾æo"ƒIÔ'@ªu)3›ô®“@Z à¾] üœ'‡4¸PÞkÁ-qÄH‰ÓÍBd´ÿ —¹°ÄA&ÊUC„öz‚‚RæŠtf¬>˜ÑidšEçÑL÷áý¡V±h§­c¿¥¨ƒ@g¼…Ýö^ÞËc.ž„æ“I[ ª+·zÐÒÚ,½Ð»¶€C›7jk$๖€Ž¾ÅÙpp¶ÍþéΤ ½ØÎŒq ñpæžÅ¥#Øâ49ÃÂK^MYV“,¶Éz_òæ:…;Õ«¦I3âJ£¤û5$7Èxün\â]Êe¯(Ÿ&Ž‹¶2<6Ćf× æ¢ƱqWı[(ÙÂŽç‚T7¨@ÈÉÍß‚ïÙ"&3TYlGށ†)†#5ŠA©^T2ÆÁ†)©†©†¤yGXÁ†©"†)©¼ÅV WS†#©]R–r‹q5ÕbâWþBh¯u+ªÅÄ×ü„nÑ^êkªÁj‰jeœWˆÕÕ`µDµ2Ì+Ä µDµµ5Ô{¤Þ0RF’H÷AÛ<ÊÁ§ ƈæ0Ñ£ê4 öÚµ[¬/1²€â<-¬šö²r×0o×w ´xÐÒË„ g01¬„åEM蛇Ã\6µE›‘fÙO k÷CºnÓ1`iîÒ² áÂ!ÑLÄÿ ³¬\õ*:M=Ç»c‹2[‰ØsÕLò\ŒK L^™üÄN\¶#» Ç\……ßïIœÉ$¸ÎñÍ®ÔHÇ Ûí/´>Li”„†g^$ 7NÍÑÑ2M2ªNg=k½Ð}Ÿl6‡ —JWˆ”ÞéT·+µ¦üÂFè¢Vs6ýÆ4»2+2IÝ9ô9®ÇGÙÇ1+Ä8;*Õ§ž½D*îÑWÚçá3Ma¤·ˆ¥t}š²Ü…Q+Æüµ8HíS”üxGéÁˆ¦Ël„éÈ 5 µÄƒ6äÜ(kIš¯S†fÖ&¸®×v|Äyˆ*禌Éù@7-®Ä[]ÎÖ¿ê`º…=:…žJVnݳvðÖKE¼‚ »mà ÷f®:Ë ™–4rð¡4` ܹçž~‹C=œ…¾Ïj|VDtK.ƒ"9 Ï ­–éXá³6WÒïIL-Ї Ç PKM*\cժreference/educations.phpnu[load->view('backend/grid_index');?> PKM*\ڵreference/special_needs.phpnu[load->view('backend/grid_index');?> PKM*\ϔfddfeed.phpnu[ ' . "\n"; ?> <?=$feed_name; ?> Copyright result() as $row) { ?> <?=xml_convert($row->post_title); ?> id.'/'.$row->post_slug)?> id.'/'.$row->post_slug)?> post_content), 200); ?> ]]> created_at; ?> PKM*\scholarships.phpnu[load->view('backend/grid_index');?> PKM*\Q#F backend/index.phpnu[ <?=__session('school_name')?>
load->view($content);?>
PKM*\?ǧ##backend/grid_index.phpnu[

'.$sub_title.'' : ''?>
PKM*\FSSbackend/sidebar.phpnu[ PKM*\1DDposts_create.phpnu[

'.$sub_title.'' : ''?>

Kategori

uri->segment(3) ? explode(',', str_replace('+', '', $query->post_categories)) : []; foreach($option_categories->result() as $row) { $checked = $this->uri->segment(3) ? (in_array($row->id, $post_categories) ? 'checked="checked"' : '') : ''; echo '
'; echo ''; echo '
'; } ?>

Publikasi

id="preview" width="293px" style="margin-top: 50px; " class="img-responsive" title="Double klik untuk menghapus gambar">
PKM*\5]  achievements.phpnu[load->view('backend/grid_index');?> PKM*\!Dv$themes/sky_light/polling-results.phpnu[
load->view('themes/sky_light/sidebar')?> PKM*\N themes/sky_light/contact-us.phpnu[
load->view('themes/sky_light/sidebar')?> PKM*\==#themes/sky_light/loop-employees.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/employees/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
NIK
nik?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Jenis GTK
employment_type?>
PKM*\2:#themes/sky_light/opening-speech.phpnu[
SAMBUTAN

num_rows() > 0) { ?>
Baca Juga
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/sky_light/sidebar')?> PKM*\oEJh h themes/sky_light/home.phpnu[
num_rows() > 0) { ?>
Tulisan Terbaru
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
num_rows() > 0) { ?>
Foto Terbaru
result() as $row) { ?>
album_title?>

album_description?>

num_rows() > 0) { ?>
Video Terbaru
result() as $row) { ?>
load->view('themes/sky_light/sidebar')?> PKM*\ccthemes/sky_light/loop-posts.phpnu[
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/sky_light/sidebar')?> PKM*\b%g  *themes/sky_light/admission-search-form.phpnu[
load->view('themes/sky_light/sidebar')?> PKM*\p_ssthemes/sky_light/error_lognu[[30-Dec-2024 19:46:28 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/sky_light/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/sky_light/index.php on line 4 [30-Dec-2024 19:53:44 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/sky_light/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/sky_light/index.php on line 4 [01-Aug-2025 03:31:33 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/sky_light/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/sky_light/index.php on line 4 [31-Aug-2025 18:48:36 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/sky_light/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/sky_light/index.php on line 4 [29-Mar-2026 01:33:52 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/sky_light/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/sky_light/index.php on line 4 PKM*\:   themes/sky_light/loop-videos.phpnu[
result() as $row) { ?>
PKM*\ٶ//themes/sky_light/index.phpnu[ <?=isset($page_title) ? $page_title . ' | ' : ''?><?=__session('school_name')?>
uri->segment(1)) { ?> num_rows() > 0) { ?>
num_rows() > 0) { ?>
KUTIPAN
    result() as $row) { ?>
  • quote?>. quote_by?>
load->view($content)?>
PKM*\he9ii#themes/sky_light/admission-form.phpnu[
Registrasi
'Pilih :', 'false' => 'Baru', 'true' => 'Pindahan'], set_value('is_transfer'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="is_transfer"')?>
0) { ?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('paud'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="paud"')?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('tk'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="tk"')?>
Data Pribadi
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
Data Ayah Kandung
Data Ibu Kandung
Data Wali
Data Periodik
Pernyataan dan Keamanan
PKM*\=#themes/sky_light/search-results.phpnu[
num_rows() > 0) { ?> result() as $row) { ?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/sky_light/sidebar')?> PKM*\ 0%themes/sky_light/sidebar.phpnu[ PKM*\BpNqq themes/sky_light/loop-alumni.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/students/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
identity_number?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Tahun Masuk
start_date?>
Tahun Keluar
end_date?>
PKM*\:S themes/sky_light/loop-albums.phpnu[
result() as $row) { ?>
album_title?>

album_description?>

PKM*\9l} themes/sky_light/single-post.phpnu[
post_image)) { ?>

post_title?>

post_content?>

num_rows() > 0) { ?>
Komentar
result() as $row) { ?>

comment_content)?>

comment_reply)) { ?>

comment_reply)?>

post_comment_status == 'open' && filter_var(__session((string) 'comment_registration'), FILTER_VALIDATE_BOOLEAN) && $this->auth->hasLogin() ) || ( $query->post_comment_status == 'open' && __session('comment_registration') == 'false' ) ) { ?>
Komentari Tulisan Ini
post_categories, _toInteger($this->uri->segment(2))) : get_another_pages(_toInteger($this->uri->segment(2)), 5); if ($query->num_rows() > 0) { ?>
Lainnya
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/sky_light/sidebar')?> PKM*\J   themes/sky_light/alumni-form.phpnu[
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
PKM*\mF“themes/sky_light/style.cssnu[body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; background-color: #eaf3ff; } body a { color: #202020; } body a:hover { color: gray; text-decoration: none; } /* TOP BAR */ .top-bar { background-color: #014585; color: #ffffff; font-size: 14px; padding: 16px 0 0; } .top-bar a { color: #ffffff; } .top-bar a:hover { color: #0f6fc7; } .top-bar i { margin-right: 5px; } /* MENU BAR */ .menu-bar { text-transform: uppercase; font-weight: bold; background-color: #0f6fc7; border-bottom: 1px solid #014585; } .sticky.is-sticky { position: fixed; left: 0; right: 0; top: 0; z-index: 1000; width: 100%; } .sm-clean { background: #0f6fc7; } .sm-clean ul { background: #014585; } .sm-clean ul a { color: #fff; } /* Dropdown hover background Menu */ .sm-clean ul a:hover, .sm-clean ul a:focus, .sm-clean ul a:active, .sm-clean ul a.highlighted { background: #0f6fc7; color: #fff; } /* CAROUSEL */ .carousel-caption { border-top: 1px solid #fff; color: #fff; background: #014585; opacity: 0.7; right: 0; left: 0; bottom: 0; text-align: left; padding: 30px; } .carousel-caption h2 { color: #fff; } .carousel-indicators li { background-color: #fff; } .carousel-indicators .active { background-color: #fbbc05; } /* LOGO */ .brand { font-family: Arial, sans-serif, "Helvetica Neue", Helvetica; font-weight: bold; text-transform: uppercase; color: #fbbc05; } /* PAGE TITLE */ .page-title { font-weight: bold; border-bottom: 2px solid #fbbc05; margin-bottom: 15px; padding-bottom: 10px; margin-top: 0px; } .page-title:after { border-bottom: 2px solid #0f6fc7; width: 30%; display: block; position: absolute; content: ''; padding-bottom: 10px; } footer .page-title:after { border-bottom: 2px solid #fff; } /* TESTIMONI */ .quote { overflow: hidden; background-color: #014585; } .quote-title { font-size: 14px; font-weight: bold; text-transform: uppercase; display: inline-block; padding: 15px 15px; color: #FFF; float: left; background-color: #fbbc05; left: 0px; top: 0px; height: 50px; } ul.quote { display: block; padding: 0; margin: 0; list-style: none; line-height: 1; position: relative; overflow: hidden; height: 50px; background-color: transparent; } ul.quote li { color: #fff; position: absolute; top: -950em; left: 0; display: block; white-space: nowrap; font: 14px Helvetica, Arial, sans-serif; padding: 17px 15px 15px 15px; } ul.quote li span { color: #fbbc05; font-weight: bold; } /* Conten */ h5.card-title { font-size: 16px; font-weight: bold; } /* Sidebar */ .sidebar .list-group-item { border: 1px solid #6c757d; } /* Footer */ footer { color: #fff; font-size: 14px; } footer .primary-footer { background-color: #014585; padding: 30px 0; } footer .secondary-footer { border-top: 1px solid #fff; background-color: #0f6fc7; padding: 10px 0; } footer .copyright { color: #fff; /* border-top: 1px solid #fff; */ } footer a { color: #ffffff; } footer a:hover { color: yellow; } footer .page-title { color: #ffffff; } .social-icon { width: 40px; height: 40px; font-size: 15px; background-color: blue; color: #fff; text-align: center; margin-right: 10px; padding-top: 12px; border-radius: 50%; } .linked-in{ background-color:#007bb6; } .facebook{ background-color:#3b5998; } .twitter{ background-color:#1da1f2; } .instagram { background-color:#fbbc05; } .youtube { background-color:#ef4e17; } .primary-footer nav ol.breadcrumb { background-color: transparent; } /* Tags */ .tag-content-block { display:block; } .tag a { border: 1px solid #fff; padding:12px 10px 8px 10px; color:#fff; display:inline-block; font-size:12px; text-transform:uppercase; line-height:11px; margin-bottom:5px; margin-right:2px; text-decoration:none; } .tag a:hover { border: 1px solid #fbbc05; color: #fff; } /* Fullscreen Search */ #search_form { z-index: 999999; position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; -webkit-transform: translate(0px, -100%) scale(0, 0); -moz-transform: translate(0px, -100%) scale(0, 0); -o-transform: translate(0px, -100%) scale(0, 0); -ms-transform: translate(0px, -100%) scale(0, 0); transform: translate(0px, -100%) scale(0, 0); opacity: 0; } #search_form.open { -webkit-transform: translate(0px, 0px) scale(1, 1); -moz-transform: translate(0px, 0px) scale(1, 1); -o-transform: translate(0px, 0px) scale(1, 1); -ms-transform: translate(0px, 0px) scale(1, 1); transform: translate(0px, 0px) scale(1, 1); opacity: 1; } #search_form input[type="search_form"] { position: absolute; top: 50%; width: 100%; color: rgb(255, 255, 255); background: rgba(0, 0, 0, 0); font-size: 60px; font-weight: 300; text-align: center; border: 0px; margin: 0px auto; margin-top: -51px; padding-left: 30px; padding-right: 30px; outline: none; } #search_form .btn { position: absolute; top: 50%; left: 50%; margin-top: 61px; margin-left: -45px; } .action-button { background-color: #0f6fc7; color: #fff; } .action-button:hover { background-color: #014585; color: #fff; } /* Responsive */ /* Extra small devices (portrait phones, less than 576px) */ @media (max-width: 575.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Small devices (landscape phones, 576px and up) */ @media (min-width: 576px) and (max-width: 767.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Medium devices (tablets, 768px and up) */ @media (min-width: 768px) and (max-width: 991.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Overide Toastr color */ .toast { background-color: #030303; } /* custom toastr success */ .toast-success { background-color: #00cb18; } /* custom toastr error */ .toast-error { background-color: #ef5137; } /* custom toastr info */ .toast-info { background-color: #4b8df8; } /* custom toastr warning */ .toast-warning { background-color: #ffb848; } .toast-title, .toast-message { text-align: left; } .top-header { display: flex; align-items: center/* vertical alignment */ } /* return to top */ #return-to-top { opacity: 0.7; z-index: 10000; position: fixed; bottom: 15px; right: 15px; background: #fbbc05; width: 30px; height: 30px; display: block; text-decoration: none; display: none; -webkit-transition: all 0.3s linear; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top i { color: #fff; margin: 0; position: relative; left: 9px; top: 5px; font-size: 19px; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top:hover { background: #000; } #return-to-top:hover i { color: #fff; } PKM*\ "themes/sky_light/loop-students.phpnu[
PKM*\ ; themes/sky_light/loop-files.phpnu[
result() as $row) { ?>
NO NAMA FILE UKURAN TIPE DIUNDUH
file_title?> file_size * 1024)?> file_ext?> file_counter?> Kali
PKM*\#themes/blue_sky/polling-results.phpnu[
load->view('themes/blue_sky/sidebar')?> PKM*\B themes/blue_sky/contact-us.phpnu[
load->view('themes/blue_sky/sidebar')?> PKM*\=="themes/blue_sky/loop-employees.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/employees/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
NIK
nik?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Jenis GTK
employment_type?>
PKM*\"themes/blue_sky/opening-speech.phpnu[
SAMBUTAN

num_rows() > 0) { ?>
Baca Juga
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/blue_sky/sidebar')?> PKM*\v@f f themes/blue_sky/home.phpnu[
num_rows() > 0) { ?>
Tulisan Terbaru
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
num_rows() > 0) { ?>
Foto Terbaru
result() as $row) { ?>
album_title?>

album_description?>

num_rows() > 0) { ?>
Video Terbaru
result() as $row) { ?>
load->view('themes/blue_sky/sidebar')?> PKM*\ *4bbthemes/blue_sky/loop-posts.phpnu[
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/blue_sky/sidebar')?> PKM*\̲Q  )themes/blue_sky/admission-search-form.phpnu[
load->view('themes/blue_sky/sidebar')?> PKM*\q**themes/blue_sky/error_lognu[[01-Aug-2025 03:31:36 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/blue_sky/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/blue_sky/index.php on line 4 [29-Mar-2026 01:33:54 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/blue_sky/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/blue_sky/index.php on line 4 PKM*\:  themes/blue_sky/loop-videos.phpnu[
result() as $row) { ?>
PKM*\K,//themes/blue_sky/index.phpnu[ <?=isset($page_title) ? $page_title . ' | ' : ''?><?=__session('school_name')?>
uri->segment(1)) { ?> num_rows() > 0) { ?>
num_rows() > 0) { ?>
KUTIPAN
    result() as $row) { ?>
  • quote?>. quote_by?>
load->view($content)?>
PKM*\he9ii"themes/blue_sky/admission-form.phpnu[
Registrasi
'Pilih :', 'false' => 'Baru', 'true' => 'Pindahan'], set_value('is_transfer'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="is_transfer"')?>
0) { ?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('paud'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="paud"')?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('tk'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="tk"')?>
Data Pribadi
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
Data Ayah Kandung
Data Ibu Kandung
Data Wali
Data Periodik
Pernyataan dan Keamanan
PKM*\G"themes/blue_sky/search-results.phpnu[
num_rows() > 0) { ?> result() as $row) { ?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/blue_sky/sidebar')?> PKM*\ 0%themes/blue_sky/sidebar.phpnu[ PKM*\ ppthemes/blue_sky/loop-alumni.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/students/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
identity_number?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Tahun Masuk
start_date?>
Tahun Keluar
end_date?>
PKM*\:S themes/blue_sky/loop-albums.phpnu[
result() as $row) { ?>
album_title?>

album_description?>

PKM*\6%%themes/blue_sky/single-post.phpnu[
post_image)) { ?>

post_title?>

post_content?>

num_rows() > 0) { ?>
num_rows()?> Komentar
result() as $row) { ?>

comment_content)?>

comment_reply)) { ?>

comment_reply)?>

post_comment_status == 'open' && filter_var(__session((string) 'comment_registration'), FILTER_VALIDATE_BOOLEAN) && $this->auth->hasLogin() ) || ( $query->post_comment_status == 'open' && __session('comment_registration') == 'false' ) ) { ?>
Komentari Tulisan Ini
post_categories, _toInteger($this->uri->segment(2))) : get_another_pages(_toInteger($this->uri->segment(2)), 5); if ($query->num_rows() > 0) { ?>
Lainnya
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/blue_sky/sidebar')?> PKM*\J  themes/blue_sky/alumni-form.phpnu[
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
PKM*\a)themes/blue_sky/style.cssnu[body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; background-color: #eaf3ff; } body a { color: #202020; } body a:hover { color: gray; text-decoration: none; } /* TOP BAR */ .top-bar { background-color: #111b51; color: #ffffff; font-size: 14px; padding: 16px 0 0; } .top-bar a { color: #ffffff; } .top-bar a:hover { color: #ff5a2c; } .top-bar i { margin-right: 5px; } /* MENU BAR */ .menu-bar { text-transform: uppercase; font-weight: bold; background-color: #ff5a2c; border-bottom: 1px solid #111b51; } .sticky.is-sticky { position: fixed; left: 0; right: 0; top: 0; z-index: 1000; width: 100%; } .sm-clean { background: #ff5a2c; } .sm-clean ul { background: #111b51; } .sm-clean ul a { color: #fff; } /* Dropdown hover background Menu */ .sm-clean ul a:hover, .sm-clean ul a:focus, .sm-clean ul a:active, .sm-clean ul a.highlighted { background: #ff5a2c; color: #fff; } /* CAROUSEL */ .carousel-caption { border-top: 1px solid #fff; color: #fff; background: #111b51; opacity: 0.7; right: 0; left: 0; bottom: 0; text-align: left; padding: 30px; } .carousel-caption h2 { color: #fff; } .carousel-indicators li { background-color: #fff; } .carousel-indicators .active { background-color: #ff5a2c; } /* LOGO */ .brand { font-family: Arial, sans-serif, "Helvetica Neue", Helvetica; font-weight: bold; text-transform: uppercase; color: #fff; } /* PAGE TITLE */ .page-title { font-weight: bold; border-bottom: 2px solid #ff5a2c; margin-bottom: 15px; padding-bottom: 10px; margin-top: 0px; } .page-title:after { border-bottom: 2px solid #111b51; width: 30%; display: block; position: absolute; content: ''; padding-bottom: 10px; } footer .page-title:after { border-bottom: 2px solid #fff; } /* TESTIMONI */ .quote { overflow: hidden; background-color: #111b51; } .quote-title { font-size: 14px; font-weight: bold; text-transform: uppercase; display: inline-block; padding: 15px 15px; color: #FFF; float: left; background-color: #ff5a2c; left: 0px; top: 0px; height: 50px; } ul.quote { display: block; padding: 0; margin: 0; list-style: none; line-height: 1; position: relative; overflow: hidden; height: 50px; background-color: transparent; } ul.quote li { color: #fff; position: absolute; top: -950em; left: 0; display: block; white-space: nowrap; font: 14px Helvetica, Arial, sans-serif; padding: 17px 15px 15px 15px; } ul.quote li span { color: #ff5a2c; font-weight: bold; } /* Conten */ h5.card-title { font-size: 16px; font-weight: bold; } /* Sidebar */ .sidebar .list-group-item { border: 1px solid #6c757d; } /* Footer */ footer { color: #fff; font-size: 14px; } footer .primary-footer { background-color: #111b51; padding: 30px 0; } footer .secondary-footer { border-top: 1px solid #fff; background-color: #ff5a2c; padding: 10px 0; } footer .copyright { color: #fff; /* border-top: 1px solid #fff; */ } footer a { color: #ffffff; } footer a:hover { color: yellow; } footer .page-title { color: #ffffff; } .social-icon { width: 40px; height: 40px; font-size: 15px; background-color: blue; color: #fff; text-align: center; margin-right: 10px; padding-top: 12px; border-radius: 50%; } .linked-in{ background-color:#007bb6; } .facebook{ background-color:#3b5998; } .twitter{ background-color:#1da1f2; } .instagram { background-color:#fbbc05; } .youtube { background-color:#ef4e17; } .primary-footer nav ol.breadcrumb { background-color: transparent; } /* Tags */ .tag-content-block { display:block; } .tag a { border: 1px solid #fff; padding:12px 10px 8px 10px; color:#fff; display:inline-block; font-size:12px; text-transform:uppercase; line-height:11px; margin-bottom:5px; margin-right:2px; text-decoration:none; } .tag a:hover { border: 1px solid #ff5a2c; color: #fff; } /* Fullscreen Search */ #search_form { z-index: 999999; position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; -webkit-transform: translate(0px, -100%) scale(0, 0); -moz-transform: translate(0px, -100%) scale(0, 0); -o-transform: translate(0px, -100%) scale(0, 0); -ms-transform: translate(0px, -100%) scale(0, 0); transform: translate(0px, -100%) scale(0, 0); opacity: 0; } #search_form.open { -webkit-transform: translate(0px, 0px) scale(1, 1); -moz-transform: translate(0px, 0px) scale(1, 1); -o-transform: translate(0px, 0px) scale(1, 1); -ms-transform: translate(0px, 0px) scale(1, 1); transform: translate(0px, 0px) scale(1, 1); opacity: 1; } #search_form input[type="search_form"] { position: absolute; top: 50%; width: 100%; color: rgb(255, 255, 255); background: rgba(0, 0, 0, 0); font-size: 60px; font-weight: 300; text-align: center; border: 0px; margin: 0px auto; margin-top: -51px; padding-left: 30px; padding-right: 30px; outline: none; } #search_form .btn { position: absolute; top: 50%; left: 50%; margin-top: 61px; margin-left: -45px; } .action-button { background-color: #ff5a2c; color: #fff; } .action-button:hover { background-color: #111b51; color: #fff; } /* Responsive */ /* Extra small devices (portrait phones, less than 576px) */ @media (max-width: 575.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Small devices (landscape phones, 576px and up) */ @media (min-width: 576px) and (max-width: 767.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Medium devices (tablets, 768px and up) */ @media (min-width: 768px) and (max-width: 991.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Overide Toastr color */ .toast { background-color: #030303; } /* custom toastr success */ .toast-success { background-color: #00cb18; } /* custom toastr error */ .toast-error { background-color: #ef5137; } /* custom toastr info */ .toast-info { background-color: #4b8df8; } /* custom toastr warning */ .toast-warning { background-color: #ffb848; } .toast-title, .toast-message { text-align: left; } .top-header { display: flex; align-items: center/* vertical alignment */ } /* return to top */ #return-to-top { opacity: 0.7; z-index: 10000; position: fixed; bottom: 15px; right: 15px; background: #fbbc05; width: 30px; height: 30px; display: block; text-decoration: none; display: none; -webkit-transition: all 0.3s linear; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top i { color: #fff; margin: 0; position: relative; left: 9px; top: 5px; font-size: 19px; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top:hover { background: #000; } #return-to-top:hover i { color: #fff; } PKM*\ !themes/blue_sky/loop-students.phpnu[
PKM*\ ; themes/blue_sky/loop-files.phpnu[
result() as $row) { ?>
NO NAMA FILE UKURAN TIPE DIUNDUH
file_title?> file_size * 1024)?> file_ext?> file_counter?> Kali
PKM*\y$%themes/green_land/polling-results.phpnu[
load->view('themes/green_land/sidebar')?> PKM*\r themes/green_land/contact-us.phpnu[
load->view('themes/green_land/sidebar')?> PKM*\==$themes/green_land/loop-employees.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/employees/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
NIK
nik?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Jenis GTK
employment_type?>
PKM*\ .$themes/green_land/opening-speech.phpnu[
SAMBUTAN

num_rows() > 0) { ?>
Baca Juga
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/green_land/sidebar')?> PKM*\xRh h themes/green_land/home.phpnu[
num_rows() > 0) { ?>
Tulisan Terbaru
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
num_rows() > 0) { ?>
Foto Terbaru
result() as $row) { ?>
album_title?>

album_description?>

num_rows() > 0) { ?>
Video Terbaru
result() as $row) { ?>
load->view('themes/green_land/sidebar')?> PKM*\AHQdd themes/green_land/loop-posts.phpnu[
result() as $row) { ?>
<?=$row->post_title?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/green_land/sidebar')?> PKM*\  +themes/green_land/admission-search-form.phpnu[
load->view('themes/green_land/sidebar')?> PKM*\ Tthemes/green_land/error_lognu[[01-Aug-2025 03:31:34 Asia/Jakarta] PHP Fatal error: Uncaught Error: Call to undefined function __session() in /home/smkb8269/public_html/views/themes/green_land/index.php:4 Stack trace: #0 {main} thrown in /home/smkb8269/public_html/views/themes/green_land/index.php on line 4 PKM*\:  !themes/green_land/loop-videos.phpnu[
result() as $row) { ?>
PKM*\ث//themes/green_land/index.phpnu[ <?=isset($page_title) ? $page_title . ' | ' : ''?><?=__session('school_name')?>
uri->segment(1)) { ?> num_rows() > 0) { ?>
num_rows() > 0) { ?>
KUTIPAN
    result() as $row) { ?>
  • quote?>. quote_by?>
load->view($content)?>
PKM*\he9ii$themes/green_land/admission-form.phpnu[
Registrasi
'Pilih :', 'false' => 'Baru', 'true' => 'Pindahan'], set_value('is_transfer'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="is_transfer"')?>
0) { ?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('paud'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="paud"')?>
'Pilih :', 'false' => 'Tidak', 'true' => 'Ya'], set_value('tk'), 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="tk"')?>
Data Pribadi
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
Data Ayah Kandung
Data Ibu Kandung
Data Wali
Data Periodik
Pernyataan dan Keamanan
PKM*\K3$themes/green_land/search-results.phpnu[
num_rows() > 0) { ?> result() as $row) { ?>
post_title?>

post_content), 0, 165)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/green_land/sidebar')?> PKM*\ 0%themes/green_land/sidebar.phpnu[ PKM*\ pp!themes/green_land/loop-alumni.phpnu[
result() as $row) { ?>
photo && file_exists($_SERVER['DOCUMENT_ROOT'] . '/media_library/students/'.$row->photo)) { $photo = $row->photo; } echo ''; ?>
Nama Lengkap
full_name?>
identity_number?>
Jenis Kelamin
gender?>
Tempat Lahir
birth_place?>
Tanggal Lahir
birth_date)?>
Tahun Masuk
start_date?>
Tahun Keluar
end_date?>
PKM*\:S !themes/green_land/loop-albums.phpnu[
result() as $row) { ?>
album_title?>

album_description?>

PKM*\=|!themes/green_land/single-post.phpnu[
post_image)) { ?>

post_title?>

post_content?>

num_rows() > 0) { ?>
Komentar
result() as $row) { ?>

comment_content)?>

comment_reply)) { ?>

comment_reply)?>

post_comment_status == 'open' && filter_var(__session((string) 'comment_registration'), FILTER_VALIDATE_BOOLEAN) && $this->auth->hasLogin() ) || ( $query->post_comment_status == 'open' && __session('comment_registration') == 'false' ) ) { ?>
Komentari Tulisan Ini
post_categories, _toInteger($this->uri->segment(2))) : get_another_pages(_toInteger($this->uri->segment(2)), 5); if ($query->num_rows() > 0) { ?>
Lainnya
result() as $row) { ?>
post_title?>

post_content), 0, 185)?>

created_at))?> - Oleh post_author?> - Dilihat post_counter?> kali
load->view('themes/green_land/sidebar')?> PKM*\J  !themes/green_land/alumni-form.phpnu[
'Pilih :', 'M' => 'Laki-laki', 'F' => 'Perempuan'], '', 'class="custom-select custom-select-sm rounded-0 border border-secondary" id="gender"')?>
Foto harus JPG dan ukuran file maksimal 1 Mb
PKM*\themes/green_land/style.cssnu[body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; background-color: #fbfaf8; } body a { color: #202020; } body a:hover { color: gray; text-decoration: none; } /* TOP BAR */ .top-bar { background-color: #32642d; color: #ffffff; font-size: 14px; padding: 16px 0 0; } .top-bar a { color: #ffffff; } .top-bar a:hover { color: #224820; } .top-bar i { margin-right: 5px; } /* MENU BAR */ .menu-bar { text-transform: uppercase; font-weight: bold; background-color: #224820; border-bottom: 1px solid #32642d; } .sticky.is-sticky { position: fixed; left: 0; right: 0; top: 0; z-index: 1000; width: 100%; } .sm-clean { background: #224820; } .sm-clean ul { background: #32642d; } .sm-clean ul a { color: #fff; } /* Dropdown hover background Menu */ .sm-clean ul a:hover, .sm-clean ul a:focus, .sm-clean ul a:active, .sm-clean ul a.highlighted { background: #224820; color: #fff; } /* CAROUSEL */ .carousel-caption { border-top: 1px solid #fff; color: #fff; background: #32642d; opacity: 0.7; right: 0; left: 0; bottom: 0; text-align: left; padding: 30px; } .carousel-caption h2 { color: #fff; } .carousel-indicators li { background-color: #fff; } .carousel-indicators .active { background-color: #fbbc05; } /* LOGO */ .brand { font-family: Arial, sans-serif, "Helvetica Neue", Helvetica; font-weight: bold; text-transform: uppercase; color: #fbbc05; } /* PAGE TITLE */ .page-title { font-weight: bold; border-bottom: 2px solid #fbbc05; margin-bottom: 15px; padding-bottom: 10px; margin-top: 0px; } .page-title:after { border-bottom: 2px solid #224820; width: 30%; display: block; position: absolute; content: ''; padding-bottom: 10px; } footer .page-title:after { border-bottom: 2px solid #fff; } /* TESTIMONI */ .quote { overflow: hidden; background-color: #32642d; } .quote-title { font-size: 14px; font-weight: bold; text-transform: uppercase; display: inline-block; padding: 15px 15px; color: #FFF; float: left; background-color: #fbbc05; left: 0px; top: 0px; height: 50px; } ul.quote { display: block; padding: 0; margin: 0; list-style: none; line-height: 1; position: relative; overflow: hidden; height: 50px; background-color: transparent; } ul.quote li { color: #fff; position: absolute; top: -950em; left: 0; display: block; white-space: nowrap; font: 14px Helvetica, Arial, sans-serif; padding: 17px 15px 15px 15px; } ul.quote li span { color: #fbbc05; font-weight: bold; } /* Conten */ h5.card-title { font-size: 16px; font-weight: bold; } /* Sidebar */ .sidebar .list-group-item { border: 1px solid #6c757d; } /* Footer */ footer { color: #fff; font-size: 14px; } footer .primary-footer { background-color: #32642d; padding: 30px 0; } footer .secondary-footer { border-top: 1px solid #fff; background-color: #224820; padding: 10px 0; } footer .copyright { color: #fff; /* border-top: 1px solid #fff; */ } footer a { color: #ffffff; } footer a:hover { color: yellow; } footer .page-title { color: #ffffff; } .social-icon { width: 40px; height: 40px; font-size: 15px; background-color: blue; color: #fff; text-align: center; margin-right: 10px; padding-top: 12px; border-radius: 50%; } .linked-in{ background-color:#007bb6; } .facebook{ background-color:#3b5998; } .twitter{ background-color:#1da1f2; } .instagram { background-color:#fbbc05; } .youtube { background-color:#ef4e17; } .primary-footer nav ol.breadcrumb { background-color: transparent; } /* Tags */ .tag-content-block { display:block; } .tag a { border: 1px solid #fff; padding:12px 10px 8px 10px; color:#fff; display:inline-block; font-size:12px; text-transform:uppercase; line-height:11px; margin-bottom:5px; margin-right:2px; text-decoration:none; } .tag a:hover { border: 1px solid #fbbc05; color: #fff; } /* Fullscreen Search */ #search_form { z-index: 999999; position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); -webkit-transition: all 0.5s ease-in-out; -moz-transition: all 0.5s ease-in-out; -o-transition: all 0.5s ease-in-out; -ms-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; -webkit-transform: translate(0px, -100%) scale(0, 0); -moz-transform: translate(0px, -100%) scale(0, 0); -o-transform: translate(0px, -100%) scale(0, 0); -ms-transform: translate(0px, -100%) scale(0, 0); transform: translate(0px, -100%) scale(0, 0); opacity: 0; } #search_form.open { -webkit-transform: translate(0px, 0px) scale(1, 1); -moz-transform: translate(0px, 0px) scale(1, 1); -o-transform: translate(0px, 0px) scale(1, 1); -ms-transform: translate(0px, 0px) scale(1, 1); transform: translate(0px, 0px) scale(1, 1); opacity: 1; } #search_form input[type="search_form"] { position: absolute; top: 50%; width: 100%; color: rgb(255, 255, 255); background: rgba(0, 0, 0, 0); font-size: 60px; font-weight: 300; text-align: center; border: 0px; margin: 0px auto; margin-top: -51px; padding-left: 30px; padding-right: 30px; outline: none; } #search_form .btn { position: absolute; top: 50%; left: 50%; margin-top: 61px; margin-left: -45px; } .action-button { background-color: #224820; color: #fff; } .action-button:hover { background-color: #32642d; color: #fff; } /* Responsive */ /* Extra small devices (portrait phones, less than 576px) */ @media (max-width: 575.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Small devices (landscape phones, 576px and up) */ @media (min-width: 576px) and (max-width: 767.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Medium devices (tablets, 768px and up) */ @media (min-width: 768px) and (max-width: 991.98px) { .top-left{ text-align: center !important; } .top-right { display: none; } } /* Overide Toastr color */ .toast { background-color: #030303; } /* custom toastr success */ .toast-success { background-color: #00cb18; } /* custom toastr error */ .toast-error { background-color: #ef5137; } /* custom toastr info */ .toast-info { background-color: #4b8df8; } /* custom toastr warning */ .toast-warning { background-color: #ffb848; } .toast-title, .toast-message { text-align: left; } .top-header { display: flex; align-items: center/* vertical alignment */ } /* return to top */ #return-to-top { opacity: 0.7; z-index: 10000; position: fixed; bottom: 15px; right: 15px; background: #fbbc05; width: 30px; height: 30px; display: block; text-decoration: none; display: none; -webkit-transition: all 0.3s linear; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top i { color: #fff; margin: 0; position: relative; left: 9px; top: 5px; font-size: 19px; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease; } #return-to-top:hover { background: #000; } #return-to-top:hover i { color: #fff; } PKM*\ #themes/green_land/loop-students.phpnu[
PKM*\ ; themes/green_land/loop-files.phpnu[
result() as $row) { ?>
NO NAMA FILE UKURAN TIPE DIUNDUH
file_title?> file_size * 1024)?> file_ext?> file_counter?> Kali
PKM*\=kemployees/employments.phpnu[load->view('backend/grid_index');?> PKM*\ employees/laboratory_skills.phpnu[load->view('backend/grid_index');?> PKM*\AP{!employees/institution_lifters.phpnu[load->view('backend/grid_index');?> PKM*\b2employees/salary_sources.phpnu[load->view('backend/grid_index');?> PKM*\TXG(employees/employment_types.phpnu[load->view('backend/grid_index');?> PKM*\iRVemployees/import.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

  1. Buka Aplikasi Microsoft Excel untuk pengguna Windows atau Libre Office Calc untuk pengguna Linux
  2. Isikan data dengan urutan [NIK] [NAMA LENGKAP] [JENIS KELAMIN] [ALAMAT JALAN] [TEMPAT LAHIR] [TANGGAL LAHIR]
  3. Copy data yang sudah diketik tersebut tanpa judul kolom (Point 2) kemudian paste didalam form textarea dibawah.
  4. Kolom JENIS KELAMIN diisi huruf "L" jika Laki-laki dan "P" jika Perempuan.
  5. Kolom TANGGAL LAHIR diisi dengan format "YYYY-MM-DD". Contoh : 1991-03-15
PKM*\ ؾNNemployees/employee_profile.phpnu[

'.$sub_title.'

' : ''?>
alt="User profile picture">

full_name?>

street_address?>

PKM*\C)**employees/employees.phpnu[ load->view('backend/grid_index');?> PKM*\ε%employees/employment_status.phpnu[load->view('backend/grid_index');?> PKM*\xemployees/ranks.phpnu[load->view('backend/grid_index');?> PKM*\ YY dashboard.phpnu[
total; ?>
title; ?>
Detail
JADWAL HARI INI
0 && count($kbms) > 0):?>
$kelas) : $arrIst = []; if (isset($kbms[$ky]->istirahat)) { foreach ($kbms[$ky]->istirahat as $istirahat) { array_push($arrIst, $istirahat['ist']); $arrDur[$istirahat['ist']] = $istirahat['dur']; } } $active = $no == 1 ? 'active' : ''; ?>
kbm_jam_mulai); $jamSampai = new DateTime($kbms[$ky]->kbm_jam_mulai); for ($i = 0; $i < $kbms[$ky]->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbms[$ky]->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $kbms[$ky]->kbm_jam_pel . 'M')); endif; endfor; ?>
format('H:i') ?> - format('H:i') ?> ISTIRAHAT
format('H:i') ?> - format('H:i') ?> kode != null ? $jadwals[$ky][$jamke]->kode : '--' ?>
Jadwal untuk kelas belum dibuat
Tidak ada jadwal hari ini
Aktifitas

Penilaian


PENILAIAN HARI INI
'; //var_dump($kelas_ujian); //echo ''; $no = 1; $jadwal_ujian = $jadwals_ujian[date('Y-m-d')] ?? []; if (count($jadwal_ujian) > 0) : ?> $sesis) : foreach ($sesis as $sesi) : foreach ($jadwal_ujian as $jadwal) : $id_guru = isset($pengawas[$jadwal[0]->id_jadwal]) && isset($pengawas[$jadwal[0]->id_jadwal][$ruang]) && isset($pengawas[$jadwal[0]->id_jadwal][$ruang][$sesi->sesi_id]) ? explode(',', $pengawas[$jadwal[0]->id_jadwal][$ruang][$sesi->sesi_id]->id_guru ?? '') : []; $badge_kelas = ''; $total_peserta = 0; foreach ($jadwal as $jdw) { $bank_kelass = $jdw->bank_kelas; foreach ($bank_kelass as $bank_kelas) { foreach ($jdw->peserta as $peserta) { $cnt = isset($peserta[$ruang]) && isset($peserta[$ruang][$sesi->sesi_id]) ? count($peserta[$ruang][$sesi->sesi_id]) : 0; if ($bank_kelas['kelas_id'] != null && $cnt > 0) { $total_peserta += $cnt; //$badge_kelas .= ' ' . $kelases[$bank_kelas['kelas_id']] . ' ' . $cnt . ' siswa'; $nama_kls = isset($kelases[$bank_kelas['kelas_id']]) ? $kelases[$bank_kelas['kelas_id']] : '- -'; $badge_kelas .= ' ' . $nama_kls . ' ' . $cnt . ' siswa'; } } } } if ($total_peserta > 0) : ?>
NO RUANG SESI MATA PELAJARAN PENGAWAS
nama_ruang ?> nama_sesi ?> kode ?> ' . $gurus[$ig] . '

' : ''; } ?>
Tidak ada jadwal penilaian
INFO/PENGUMUMAN


Loading....

Muat Pengumuman lainnya ...
PKM*\YS+`+`students_profile.phpnu[
PKM*\TTblog/image_sliders.phpnu[ load->view('backend/grid_index');?> PKM*\wIablog/pages_create.phpnu[

'.$sub_title.'' : ''?>

Publikasi

'Diterbitkan', 'draft' => 'Konsep'], ($query ? $query->post_status : ''), 'class="form-control select2 input-sm" id="post_status"');?>
'Publik', 'private' => 'Private'], ($query ? $query->post_visibility : ''), 'class="form-control select2 input-sm" id="post_visibility"');?>
'Diizinkan', 'close' => 'Tidak Diizinkan'], ($query ? $query->post_comment_status : ''), 'class="form-control select2 input-sm" id="post_comment_status"');?>
PKM*\jq|b.b.blog/posts_create.phpnu[

'.$sub_title.'' : ''?>

Kategori

uri->segment(4) ? explode(',', str_replace('+', '', $query->post_categories)) : []; foreach($option_categories->result() as $row) { $checked = $this->uri->segment(3) ? (in_array($row->id, $post_categories) ? 'checked="checked"' : '') : ''; echo '
'; echo ''; echo '
'; } ?>

Publikasi

'Diterbitkan', 'draft' => 'Konsep'], ($query ? $query->post_status : ''), 'class="form-control input-sm" id="post_status"');?>
'Publik', 'private' => 'Private'], ($query ? $query->post_visibility : ''), 'class="form-control input-sm" id="post_visibility"');?>
'Diizinkan', 'close' => 'Tidak Diizinkan'], ($query ? $query->post_comment_status : ''), 'class="form-control input-sm" id="post_comment_status"');?>
id="preview" width="293px" style="margin-top: 50px; " class="img-responsive" title="Double klik untuk menghapus gambar">

Tags

PKM*\`blog/quotes.phpnu[load->view('backend/grid_index');?> PKM*\8 blog/tags.phpnu[load->view('backend/grid_index');?> PKM*\ blog/post_comments.phpnu[load->view('backend/grid_index');?> PKM*\Țblog/links.phpnu[load->view('backend/grid_index');?> PKM*\iCBblog/opening_speech.phpnu[

'.$sub_title.'' : ''?>
PKM*\8load->view('backend/grid_index');?> PKM*\jblog/post_categories.phpnu[load->view('backend/grid_index');?> PKM*\ blog/pages_read.phpnu[load->view('backend/grid_index');?> PKM*\a,blog/messages.phpnu[load->view('backend/grid_index');?> PKM*\s08Bblog/posts_read.phpnu[load->view('backend/grid_index');?> PKM*\سU˵&&settings/media.phpnu[load->view('backend/grid_index');?> PKM*\^jjsettings/reading.phpnu[load->view('backend/grid_index');?> PKM*\2W7settings/mail_server.phpnu[load->view('backend/grid_index');?> PKM*\)settings/general.phpnu[ load->view('backend/grid_index');?> PKM*\ءsettings/writing.phpnu[load->view('backend/grid_index');?> PKM*\&% % settings/social_account.phpnu[load->view('backend/grid_index');?> PKM*\~Ƀ;y+y+settings/school_profile.phpnu[ load->view('backend/grid_index');?> PKM*\ settings/discussion.phpnu[load->view('backend/grid_index');?> PKM*\{xxmedia/upload_photos.phpnu[

'.$sub_title.'

' : ''?>
KEMBALI
PKM*\ PBllmedia/file_categories.phpnu[load->view('backend/grid_index');?> PKM*\as  media/files.phpnu[load->view('backend/grid_index');?> PKM*\$media/videos.phpnu[load->view('backend/grid_index');?> PKM*\˼1,,media/photos.phpnu[load->view('backend/grid_index');?> PKM*\ۓ media/albums.phpnu[ load->view('backend/grid_index');?> PKM*\w= = change_password.phpnu[
UBAH KATA SANDI
PKM*\ under_construction.phpnu[ <?=__session('school_name')?>

We’ll be back soon!

Sorry for the inconvenience but we’re performing some maintenance at the moment.

— IT Team

PKM*\z  index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PKM*\>CQCQemployee_profile.phpnu[
PKM*\}users/user_privileges.phpnu[load->view('backend/grid_index');?> PKM*\ jvusers/login.phpnu[ <?=__session('school_name')?> PKM*\k,users/user_groups.phpnu[load->view('backend/grid_index');?> PKM*\O%users/lost-password.phpnu[ <?=__session('school_name')?> PKM*\!.users/students.phpnu[load->view('backend/grid_index');?> PKM*\Gusers/employees.phpnu[load->view('backend/grid_index');?> PKM*\_Phyyusers/modules.phpnu[load->view('backend/grid_index');?> PKM*\+ + users/profile.phpnu[
Ubah Profil
Nama pengguna tidak dapat diubah
PKM*\users/administrator.phpnu[load->view('backend/grid_index');?> PKM*\Busers/reset-password.phpnu[ <?=__session('school_name')?> PKM*\$admission/registrants_unapproved.phpnu[load->view('backend/grid_index');?> PKM*\RT))admission/selection_process.phpnu[

'.$sub_title.'

' : ''?>
0) { ?>

Petunjuk Singkat

  • yang dipilih akan merujuk pada Pilihan I dari data Calon Baru.
0) { ?>
PKM*\A 'admission/admission_quotas.phpnu[load->view('backend/grid_index');?> PKM*\22admission/registrants.phpnu[ load->view('backend/grid_index');?> PKM*\7"admission/registrants_approved.phpnu[load->view('backend/grid_index');?> PKM*\admission/admission_types.phpnu[load->view('backend/grid_index');?> PKM*\a  admission/admission_phases.phpnu[load->view('backend/grid_index');?> PKM*\!%admission/pdf_admission_template.htmlnu[

[SCHOOL_NAME]

[SCHOOL_STREET_ADDRESS]
Telp : [SCHOOL_PHONE] ⋅ Fax : [SCHOOL_FAX] ⋅ Kode Pos : [SCHOOL_POSTAL_CODE]
Email : [SCHOOL_EMAIL] ⋅ Website : [SCHOOL_WEBSITE]

[TITLE]

Registrasi [STUDENT_TYPE]

Jenis Pendaftaran : [IS_TRANSFER]
Jalur Pendaftaran : [ADMISSION_TYPE]
Nomor Pendaftaran : [REGISTRATION_NUMBER]
Tanggal Pendaftaran : [CREATED_AT]
Pilihan I:[FIRST_CHOICE]
Pilihan II:[SECOND_CHOICE]
Nama Sekolah Asal:[PREV_SCHOOL_NAME]
Alamat Sekolah Asal:[PREV_SCHOOL_ADDRESS]

Biodata [STUDENT_TYPE]

Nama Lengkap : [FULL_NAME]
Jenis Kelamin : [GENDER]
NISN:[NISN]
NIK:[NIK]
Tempat Lahir : [BIRTH_PLACE]
Tanggal Lahir : [BIRTH_DATE]
Agama : [RELIGION]
Kebutuhan Khusus : [SPECIAL_NEEDS]

Alamat

Alamat Jalan : [STREET_ADDRESS]
RT : [RT]
RW : [RW]
Dusun : [SUB_VILLAGE]
Kelurahan / Desa : [VILLAGE]
Kecamatan : [SUB_DISTRICT]
Kota/Kabupaten : [DISTRICT]
Kode Pos : [POSTAL_CODE]
Email : [EMAIL]
Saya yang bertandatangan dibawah ini menyatakan bahwa data yang tertera diatas adalah yang sebenarnya.
[FOOTER_DATE]
[FOOTER_FULL_NAME]
PKM*\hlL admission/admission_settings.phpnu[load->view('backend/grid_index');?> PKM*\ aappearance/themes.phpnu[load->view('backend/grid_index');?> PKM*\i:@5PPappearance/menus.phpnu[

'.$sub_title.'' : ''?>

TAUTAN

HALAMAN

KATEGORI TULISAN

KATEGORI FILE

MODUL

$value) { echo '
'; echo ''; echo '
'; } ?>
PKM*\IN^errors/html/error_404.phpnu[ 404 Page Not Found

PKM*\Ҁerrors/html/error_db.phpnu[ Database Error

PKM*\̝wwerrors/html/error_general.phpnu[ Error

PKM*\@hnerrors/html/error_exception.phpnu[

An uncaught Exception was encountered

Type:

Message:

Filename: getFile(); ?>

Line Number: getLine(); ?>

Backtrace:

getTrace() as $error): ?>

File:
Line:
Function:

PKM*\0errors/html/error_php.phpnu[

A PHP Error was encountered

Severity:

Message:

Filename:

Line Number:

Backtrace:

File:
Line:
Function:

PKM*\"errors/html/index.htmlnu[ 403 Forbidden

Directory access is forbidden.

PKM*\z errors/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PKM*\||errors/cli/error_404.phpnu[ An uncaught Exception was encountered Type: Message: Filename: getFile(), "\n"; ?> Line Number: getLine(); ?> Backtrace: getTrace() as $error): ?> File: Line: Function: PKM*\]Yerrors/cli/error_php.phpnu[ A PHP Error was encountered Severity: Message: Filename: Line Number: Backtrace: File: Line: Function: PKM*\"errors/cli/index.htmlnu[ 403 Forbidden

Directory access is forbidden.

PKM*\:  plugins/banners.phpnu[ load->view('backend/grid_index');?> PKM*\ Dplugins/questions.phpnu[load->view('backend/grid_index');?> PKM*\+^kTTplugins/answers.phpnu[load->view('backend/grid_index');?> PKM*\8###academic/alumni.phpnu[ load->view('backend/grid_index');?> PKM*\Q8CCacademic/by_end_date.phpnu[

PKM*\F#academic/monthly_incomes.phpnu[load->view('backend/grid_index');?> PKM*\sc{{academic/student_profile.phpnu[

'.$sub_title.'

' : ''?>
alt="User profile picture">

full_name?>

street_address?>

PKM*\ָ__!academic/class_group_settings.phpnu[load->view('backend/grid_index');?> PKM*\ONO3O3academic/set_course_classes.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

Menu ini digunakan untuk mengatur daftar pada tiap semester. Pastikan sebelum proses pembelajaran dimulai sudah mengatur daftar yang akan diajarkan dengan cara sebagai berikut :

  1. Pilih dengan cara menceklis daftar pada tabel disebelah kiri.
  2. Pilih , Semester, dan Kelas pada tabel di sebelah kanan sebagai target penyimpanan yang terpilih / terceklis.
  3. Klik tombol "SIMPAN KE DAFTAR = 5 ? 'MATA KULIAH' : 'MATA PELAJARAN');?>".

Jika ingin menduplikasi pada , semester, dan kelas sebelumnya, pada bagian "Copy Data" silahkan pilih Ya, kemudian pilih/ceklis dari , Semester, dan Kelas yang akan diduplikasi.

PILIH

'Tidak', 'true' => 'Ya'], '', 'class="form-control select2" id="copy_data" onchange="filterSubjects()"');?>

PENGATURAN

'Ganjil', 'even' => 'Genap'], '', 'class="form-control select2" id="to_semester" onchange="getCourseClasses()"');?>
PKM*\^academic/student_status.phpnu[load->view('backend/grid_index');?> PKM*\Iάacademic/residences.phpnu[load->view('backend/grid_index');?> PKM*\0h academic/import_students.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

  1. Buka Aplikasi Microsoft Excel untuk pengguna Windows atau Libre Office Calc untuk pengguna Linux
  2. Isikan data dengan urutan [] [NAMA LENGKAP] [JENIS KELAMIN] [ALAMAT JALAN] [TEMPAT LAHIR] [TANGGAL LAHIR]
  3. Copy data yang sudah diketik tersebut tanpa judul kolom (Point 2) kemudian paste didalam form textarea dibawah.
  4. Kolom JENIS KELAMIN diisi huruf "L" jika Laki-laki dan "P" jika Perempuan.
  5. Kolom TANGGAL LAHIR diisi dengan format "YYYY-MM-DD". Contoh : 1991-03-15
  6. yang diimport akan otomatis statusnya menjadi "Aktif". Pastikan Data Induk Status "Aktif" tersedia. Klik disini untuk melihat Daftar Status = 5 ? 'Mahasiswa':'Peserta Didik'?>
PKM*\[ Z00academic/students.phpnu[ load->view('backend/grid_index');?> PKM*\o..!academic/class_group_students.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

  • Untuk mengatur rombongan belajar, silahkan pilih KELAS ASAL pada tabel sebelah kiri.
  • Peserta Didik yang ditampilkan hanya peserta didik dengan status "Aktif"
  • Jika kelas asal yang dipilih yaitu "BELUM DIATUR" maka akan menampilkan semua peserta didik yang belum pernah diatur kelasnya. Biasanya digunakan untuk menampilkan peserta didik baru.
  • Jika yang dipilih "TAMPILKAN SEMUA", maka akan menampilkan semua peserta didik yang aktif, termasuk peserta didik baru yang belum pernah diatur kelasnya.
  • Jika yang dipilih "NAMA KELASNYA", maka akan diminta untuk memilih ""
  • Setelah data peserta didik tampil, silahkan "CEKLIS" peserta didik yang akan diatur kelasnya
  • Setelah selesai memilih peserta didik yang akan dipindah kelasnya, silahkan pilih "KELAS TUJUAN" dan "" pada tabel sebelah kanan.
  • Terakhir klik tombol "PINDAH KE KELAS TUJUAN"
  • Jika terjadi kelasahan penginputan data, silahkan pilih "KELAS TUJUAN" dan "" pada tabel sebelah kanan, kemudian ceklis peserta didik yang akan dihapus dari kelas tersebut dan terakhir klik tombol "HAPUS"
'Belum Diatur', 'show_all' => 'Tampilkan Semua'] + $class_group_dropdown, '', 'class="form-control select2" id="from_class_group_id" onchange="showAcademicYear()"');?>
PKM*\Mt>/**academic/academic_years.phpnu[load->view('backend/grid_index');?> PKM*\4Dacademic/class_groups.phpnu[load->view('backend/grid_index');?> PKM*\}DDacademic/student_groups.phpnu[load->view('backend/grid_index');?> PKM*\o..%academic/set_class_group_students.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

  • Untuk mengatur rombongan belajar, silahkan pilih KELAS ASAL pada tabel sebelah kiri.
  • Peserta Didik yang ditampilkan hanya peserta didik dengan status "Aktif"
  • Jika kelas asal yang dipilih yaitu "BELUM DIATUR" maka akan menampilkan semua peserta didik yang belum pernah diatur kelasnya. Biasanya digunakan untuk menampilkan peserta didik baru.
  • Jika yang dipilih "TAMPILKAN SEMUA", maka akan menampilkan semua peserta didik yang aktif, termasuk peserta didik baru yang belum pernah diatur kelasnya.
  • Jika yang dipilih "NAMA KELASNYA", maka akan diminta untuk memilih ""
  • Setelah data peserta didik tampil, silahkan "CEKLIS" peserta didik yang akan diatur kelasnya
  • Setelah selesai memilih peserta didik yang akan dipindah kelasnya, silahkan pilih "KELAS TUJUAN" dan "" pada tabel sebelah kanan.
  • Terakhir klik tombol "PINDAH KE KELAS TUJUAN"
  • Jika terjadi kelasahan penginputan data, silahkan pilih "KELAS TUJUAN" dan "" pada tabel sebelah kanan, kemudian ceklis peserta didik yang akan dihapus dari kelas tersebut dan terakhir klik tombol "HAPUS"
'Belum Diatur', 'show_all' => 'Tampilkan Semua'] + $class_group_dropdown, '', 'class="form-control select2" id="from_class_group_id" onchange="showAcademicYear()"');?>
PKM*\;academic/majors.phpnu[load->view('backend/grid_index');?> PKM*\=;academic/transportations.phpnu[load->view('backend/grid_index');?> PKM*\iaacademic/by_class_groups.phpnu[

PKM*\h4=academic/by_student_status.phpnu[

PKM*\B,++academic/import_alumni.phpnu[

'.$sub_title.'

' : ''?>

Petunjuk Singkat

  1. Buka Aplikasi Microsoft Excel untuk pengguna Windows atau Libre Office Calc untuk pengguna Linux
  2. Isikan data dengan urutan [] [NAMA LENGKAP] [JENIS KELAMIN] [TANGGAL MASUK] [TANGGAL KELUAR] [HANDPHONE] [ALAMAT JALAN]
  3. Copy data yang sudah diketik tersebut tanpa judul kolom (Point 2) kemudian paste didalam form textarea dibawah.
  4. Kolom JENIS KELAMIN diisi huruf "L" jika Laki-laki dan "P" jika Perempuan.
  5. Kolom TANGGAL MASUK dan TANGGAL KELUAR diisi dengan format YYYY-MM-DD.
PKM*\2%Yposts_read.phpnu[load->view('backend/grid_index');?> PKo\ƕzz secondary.phpnu[. namespace core\navigation\views; use navigation_node; use url_select; use settings_navigation; /** * Class secondary_navigation_view. * * The secondary navigation view is a stripped down tweaked version of the * settings_navigation/navigation * * @package core * @category navigation * @copyright 2021 onwards Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class secondary extends view { /** @var string $headertitle The header for this particular menu*/ public $headertitle; /** @var int The maximum limit of navigation nodes displayed in the secondary navigation */ const MAX_DISPLAYED_NAV_NODES = 5; /** @var navigation_node The course overflow node. */ protected $courseoverflownode = null; /** @var string The key of the node to set as selected in the course overflow menu, if explicitly set by a page. */ protected $overflowselected = null; /** * Defines the default structure for the secondary nav in a course context. * * In a course context, we are curating nodes from the settingsnav and navigation objects. * The following mapping construct specifies which object we are fetching it from, the type of the node, the key * and in what order we want the node - defined as per the mockups. * * @return array */ protected function get_default_course_mapping(): array { $nodes = []; $nodes['settings'] = [ self::TYPE_CONTAINER => [ 'coursereports' => 4, 'questionbank' => 5, ], self::TYPE_SETTING => [ 'editsettings' => 0, 'review' => 1.1, 'manageinstances' => 1.2, 'groups' => 1.3, 'override' => 1.4, 'roles' => 1.5, 'permissions' => 1.6, 'otherusers' => 1.7, 'gradebooksetup' => 2.1, 'outcomes' => 2.2, 'coursecompletion' => 7, 'coursebadges' => 8.1, 'newbadge' => 8.2, 'filtermanagement' => 10, 'unenrolself' => 11, 'coursetags' => 12, 'download' => 13, 'contextlocking' => 14, ], ]; $nodes['navigation'] = [ self::TYPE_CONTAINER => [ 'participants' => 1, 'courseoverview' => 3, ], self::TYPE_SETTING => [ 'grades' => 2, 'badgesview' => 8, 'competencies' => 9, 'communication' => 15, ], self::TYPE_CUSTOM => [ 'contentbank' => 6, 'participants' => 1, // In site home, 'participants' is classified differently. ], ]; return $nodes; } /** * Defines the default structure for the secondary nav in a module context. * * In a module context, we are curating nodes from the settingsnav object. * The following mapping construct specifies the type of the node, the key * and in what order we want the node - defined as per the mockups. * * @return array */ protected function get_default_module_mapping(): array { return [ self::TYPE_SETTING => [ 'modedit' => 1, "mod_{$this->page->activityname}_useroverrides" => 3, // Overrides are module specific. "mod_{$this->page->activityname}_groupoverrides" => 4, 'roleassign' => 7.2, 'filtermanage' => 6, 'roleoverride' => 7, 'rolecheck' => 7.1, 'logreport' => 8, 'backup' => 9, 'restore' => 10, 'competencybreakdown' => 11, 'sendtomoodlenet' => 16, ], self::TYPE_CUSTOM => [ 'advgrading' => 2, 'contentbank' => 12, ], ]; } /** * Defines the default structure for the secondary nav in a category context. * * In a category context, we are curating nodes from the settingsnav object. * The following mapping construct specifies the type of the node, the key * and in what order we want the node - defined as per the mockups. * * @return array */ protected function get_default_category_mapping(): array { return [ self::TYPE_SETTING => [ 'edit' => 1, 'permissions' => 2, 'roles' => 2.1, 'rolecheck' => 2.2, ] ]; } /** * Define the keys of the course secondary nav nodes that should be forced into the "more" menu by default. * * @return array */ protected function get_default_category_more_menu_nodes(): array { return ['addsubcat', 'roles', 'permissions', 'contentbank', 'cohort', 'filters', 'restorecourse']; } /** * Define the keys of the course secondary nav nodes that should be forced into the "more" menu by default. * * @return array */ protected function get_default_course_more_menu_nodes(): array { return []; } /** * Define the keys of the module secondary nav nodes that should be forced into the "more" menu by default. * * @return array */ protected function get_default_module_more_menu_nodes(): array { return ['roleoverride', 'rolecheck', 'logreport', 'roleassign', 'filtermanage', 'backup', 'restore', 'competencybreakdown', "mod_{$this->page->activityname}_useroverrides", "mod_{$this->page->activityname}_groupoverrides"]; } /** * Define the keys of the admin secondary nav nodes that should be forced into the "more" menu by default. * * @return array */ protected function get_default_admin_more_menu_nodes(): array { return []; } /** * Initialise the view based navigation based on the current context. * * As part of the initial restructure, the secondary nav is only considered for the following pages: * 1 - Site admin settings * 2 - Course page - Does not include front_page which has the same context. * 3 - Module page */ public function initialise(): void { global $SITE; if (during_initial_install() || $this->initialised) { return; } $this->id = 'secondary_navigation'; $context = $this->context; $this->headertitle = get_string('menu'); $defaultmoremenunodes = []; $maxdisplayednodes = self::MAX_DISPLAYED_NAV_NODES; switch ($context->contextlevel) { case CONTEXT_COURSE: $this->headertitle = get_string('courseheader'); if ($this->page->course->format === 'singleactivity') { $this->load_single_activity_course_navigation(); } else { $this->load_course_navigation(); $defaultmoremenunodes = $this->get_default_course_more_menu_nodes(); } break; case CONTEXT_MODULE: $this->headertitle = get_string('activityheader'); if ($this->page->course->format === 'singleactivity') { $this->load_single_activity_course_navigation(); } else { $this->load_module_navigation($this->page->settingsnav); $defaultmoremenunodes = $this->get_default_module_more_menu_nodes(); } break; case CONTEXT_COURSECAT: $this->headertitle = get_string('categoryheader'); $this->load_category_navigation(); $defaultmoremenunodes = $this->get_default_category_more_menu_nodes(); break; case CONTEXT_SYSTEM: $this->headertitle = get_string('homeheader'); $this->load_admin_navigation(); // If the site administration navigation was generated after load_admin_navigation(). if ($this->has_children()) { // Do not explicitly limit the number of navigation nodes displayed in the site administration // navigation menu. $maxdisplayednodes = null; } $defaultmoremenunodes = $this->get_default_admin_more_menu_nodes(); break; } $this->remove_unwanted_nodes($this); // Don't need to show anything if only the view node is available. Remove it. if ($this->children->count() == 1) { $this->children->remove('modulepage'); } // Force certain navigation nodes to be displayed in the "more" menu. $this->force_nodes_into_more_menu($defaultmoremenunodes, $maxdisplayednodes); // Search and set the active node. $this->scan_for_active_node($this); $this->initialised = true; } /** * Returns a node with the action being from the first found child node that has an action (Recursive). * * @param navigation_node $node The part of the node tree we are checking. * @param navigation_node $basenode The very first node to be used for the return. * @return navigation_node|null */ protected function get_node_with_first_action(navigation_node $node, navigation_node $basenode): ?navigation_node { $newnode = null; if (!$node->has_children()) { return null; } // Find the first child with an action and update the main node. foreach ($node->children as $child) { if ($child->has_action()) { $newnode = $basenode; $newnode->action = $child->action; return $newnode; } } if (is_null($newnode)) { // Check for children and go again. foreach ($node->children as $child) { if ($child->has_children()) { $newnode = $this->get_node_with_first_action($child, $basenode); if (!is_null($newnode)) { return $newnode; } } } } return null; } /** * Some nodes are containers only with no action. If this container has an action then nothing is done. If it does not have * an action then a search is done through the children looking for the first node that has an action. This action is then given * to the parent node that is initially provided as a parameter. * * @param navigation_node $node The navigation node that we want to ensure has an action tied to it. * @return navigation_node The node intact with an action to use. */ protected function get_first_action_for_node(navigation_node $node): ?navigation_node { // If the node does not have children and has no action then no further processing is needed. $newnode = null; if ($node->has_children() && !$node->has_action()) { // We want to find the first child with an action. // We want to check all children on this level before going further down. // Note that new node gets changed here. $newnode = $this->get_node_with_first_action($node, $node); } else if ($node->has_action()) { $newnode = $node; } return $newnode; } /** * Recursive call to add all custom navigation nodes to secondary * * @param navigation_node $node The node which should be added to secondary * @param navigation_node $basenode The original parent node * @param navigation_node|null $root The parent node nodes are to be added/removed to. * @param bool $forceadd Whether or not to bypass the external action check and force add all nodes */ protected function add_external_nodes_to_secondary(navigation_node $node, navigation_node $basenode, ?navigation_node $root = null, bool $forceadd = false) { $root = $root ?? $this; // Add the first node. if ($node->has_action() && !$this->get($node->key)) { $root->add_node(clone $node); } // If the node has an external action add all children to the secondary navigation. if (!$node->has_internal_action() || $forceadd) { if ($node->has_children()) { foreach ($node->children as $child) { if ($child->has_children()) { $this->add_external_nodes_to_secondary($child, $basenode, $root, true); } else if ($child->has_action() && !$this->get($child->key)) { // Check whether the basenode matches a child's url. // This would have happened in get_first_action_for_node. // In these cases, we prefer the specific child content. if ($basenode->has_action() && $basenode->action()->compare($child->action())) { $root->children->remove($basenode->key, $basenode->type); } $root->add_node(clone $child); } } } } } /** * Returns a list of all expected nodes in the course administration. * * @return array An array of keys for navigation nodes in the course administration. */ protected function get_expected_course_admin_nodes(): array { $expectednodes = []; foreach ($this->get_default_course_mapping()['settings'] as $value) { foreach ($value as $nodekey => $notused) { $expectednodes[] = $nodekey; } } foreach ($this->get_default_course_mapping()['navigation'] as $value) { foreach ($value as $nodekey => $notused) { $expectednodes[] = $nodekey; } } $othernodes = ['users', 'gradeadmin', 'coursereports', 'coursebadges']; $leftovercourseadminnodes = ['backup', 'restore', 'import', 'copy', 'reset']; $expectednodes = array_merge($expectednodes, $othernodes); $expectednodes = array_merge($expectednodes, $leftovercourseadminnodes); return $expectednodes; } /** * Load the course secondary navigation. Since we are sourcing all the info from existing objects that already do * the relevant checks, we don't do it again here. * * @param navigation_node|null $rootnode The node where the course navigation nodes should be added into as children. * If not explicitly defined, the nodes will be added to the secondary root * node by default. */ protected function load_course_navigation(?navigation_node $rootnode = null): void { global $SITE; $rootnode = $rootnode ?? $this; $course = $this->page->course; // Initialise the main navigation and settings nav. // It is important that this is done before we try anything. $settingsnav = $this->page->settingsnav; $navigation = $this->page->navigation; if ($course->id == $SITE->id) { $firstnodeidentifier = get_string('home'); // The first node in the site course nav is called 'Home'. $frontpage = $settingsnav->get('frontpage'); // The site course nodes are children of a dedicated 'frontpage' node. $settingsnav = $frontpage ?: $settingsnav; $courseadminnode = $frontpage ?: null; // Custom nodes for the site course are also children of the 'frontpage' node. } else { $firstnodeidentifier = get_string('course'); // Regular courses have a first node called 'Course'. $courseadminnode = $settingsnav->get('courseadmin'); // Custom nodes for regular courses live under 'courseadmin'. } // Add the known nodes from settings and navigation. $nodes = $this->get_default_course_mapping(); $nodesordered = $this->get_leaf_nodes($settingsnav, $nodes['settings'] ?? []); $nodesordered += $this->get_leaf_nodes($navigation, $nodes['navigation'] ?? []); $this->add_ordered_nodes($nodesordered, $rootnode); // Try to get any custom nodes defined by plugins, which may include containers. if ($courseadminnode) { $expectedcourseadmin = $this->get_expected_course_admin_nodes(); foreach ($courseadminnode->children as $other) { if (array_search($other->key, $expectedcourseadmin, true) === false) { $othernode = $this->get_first_action_for_node($other); $recursivenode = $othernode && !$rootnode->get($othernode->key) ? $othernode : $other; // Get the first node and check whether it's been added already. // Also check if the first node is an external link. If it is, add all children. $this->add_external_nodes_to_secondary($recursivenode, $recursivenode, $rootnode); } } } // Add the respective first node, provided there are other nodes included. if (!empty($nodekeys = $rootnode->children->get_key_list())) { $rootnode->add_node( navigation_node::create($firstnodeidentifier, new \moodle_url('/course/view.php', ['id' => $course->id]), self::TYPE_COURSE, null, 'coursehome'), reset($nodekeys) ); } // Allow plugins to add nodes to the secondary navigation. $hook = new \core\hook\navigation\secondary_extend($this); \core\di::get(\core\hook\manager::class)->dispatch($hook); } /** * Gets the overflow navigation nodes for the course administration category. * * @param navigation_node|null $rootnode The node from where the course overflow nodes should be obtained. * If not explicitly defined, the nodes will be obtained from the secondary root * node by default. * @return navigation_node The course overflow nodes. */ protected function get_course_overflow_nodes(?navigation_node $rootnode = null): ?navigation_node { global $SITE; $rootnode = $rootnode ?? $this; // This gets called twice on some pages, and so trying to create this navigation node twice results in no children being // present the second time this is called. if (isset($this->courseoverflownode)) { return $this->courseoverflownode; } // Start with getting the base node for the front page or the course. $node = null; if ($this->page->course->id == $SITE->id) { $node = $this->page->settingsnav->find('frontpage', navigation_node::TYPE_SETTING); } else { $node = $this->page->settingsnav->find('courseadmin', navigation_node::TYPE_COURSE); } $coursesettings = $node ? $node->get_children_key_list() : []; $thissettings = $rootnode->get_children_key_list(); $diff = array_diff($coursesettings, $thissettings); // Remove our specific created elements (user - participants, badges - coursebadges, grades - gradebooksetup, // grades - outcomes). $shortdiff = array_filter($diff, function($value) { return !($value == 'users' || $value == 'coursebadges' || $value == 'gradebooksetup' || $value == 'outcomes'); }); // Permissions may be in play here that ultimately will show no overflow. if (empty($shortdiff)) { return null; } $firstitem = array_shift($shortdiff); $navnode = $node->get($firstitem); foreach ($shortdiff as $key) { $courseadminnodes = $node->get($key); if ($courseadminnodes) { if ($courseadminnodes->parent->key == $node->key) { $navnode->add_node($courseadminnodes); } } } $this->courseoverflownode = $navnode; return $navnode; } /** * Recursively looks for a match to the current page url. * * @param navigation_node $node The node to look through. * @return navigation_node|null The node that matches this page's url. */ protected function nodes_match_current_url(navigation_node $node): ?navigation_node { $pagenode = $this->page->url; if ($node->has_action()) { // Check this node first. if ($node->action->compare($pagenode)) { return $node; } } if ($node->has_children()) { foreach ($node->children as $child) { $result = $this->nodes_match_current_url($child); if ($result) { return $result; } } } return null; } /** * Recursively search a node and its children for a node matching the key string $key. * * @param navigation_node $node the navigation node to check. * @param string $key the key of the node to match. * @return navigation_node|null node if found, otherwise null. */ protected function node_matches_key_string(navigation_node $node, string $key): ?navigation_node { if ($node->has_action()) { // Check this node first. if ($node->key == $key) { return $node; } } if ($node->has_children()) { foreach ($node->children as $child) { $result = $this->node_matches_key_string($child, $key); if ($result) { return $result; } } } return null; } /** * Force a specific node in the 'coursereuse' course overflow to be selected, based on the provided node key. * * Normally, the selected node is determined by matching the page URL to the node URL. E.g. The page 'backup/restorefile.php' * will match the "Restore" node which has a registered URL of 'backup/restorefile.php' because the URLs match. * * This method allows a page to choose a specific node to match, which is useful in cases where the page knows its URL won't * match the node it needs to reside under. I.e. this permits several pages to 'share' the same overflow node. When the page * knows the PAGE->url won't match the node URL, the page can simply say "I want to match the 'XXX' node". * * E.g. * - The $PAGE->url is 'backup/restore.php' (this page is used during restores but isn't the main landing page for a restore) * - The 'Restore' node in the overflow has a key of 'restore' and will only match 'backup/restorefile.php' by default (the * main restore landing page). * - The backup/restore.php page calls: * $PAGE->secondarynav->set_overflow_selected_node(new moodle_url('restore'); * and when the page is loaded, the 'Restore' node be presented as the selected node. * * @param string $nodekey The string key of the overflow node to match. */ public function set_overflow_selected_node(string $nodekey): void { $this->overflowselected = $nodekey; } /** * Returns a url_select object with overflow navigation nodes. * This looks to see if the current page is within the course administration, or some other page that requires an overflow * select object. * * @return url_select|null The overflow menu data. */ public function get_overflow_menu_data(): ?url_select { if (!$this->page->get_navigation_overflow_state()) { return null; } $issingleactivitycourse = $this->page->course->format === 'singleactivity'; $rootnode = $issingleactivitycourse ? $this->find('course', self::TYPE_COURSE) : $this; $activenode = $this->find_active_node(); $incourseadmin = false; $activeleafnode = $this->page->settingsnav->find_active_node(); $parentnode = $activeleafnode->parent ?? null; if ($issingleactivitycourse && $parentnode && $parentnode->key === 'quiz_report') { $activenode = $parentnode; } if (!$activenode || ($issingleactivitycourse && $activenode->key === 'course')) { // Could be in the course admin section. $courseadmin = $this->page->settingsnav->find('courseadmin', navigation_node::TYPE_COURSE); if (!$courseadmin) { return null; } $activenode = $courseadmin->find_active_node(); if (!$activenode) { return null; } $incourseadmin = true; } if ($activenode->key === 'coursereuse' || $incourseadmin) { $courseoverflownode = $this->get_course_overflow_nodes($rootnode); if (is_null($courseoverflownode)) { return null; } if ($incourseadmin) { // Validate whether the active node is part of the expected course overflow nodes. if (($activenode->key !== $courseoverflownode->key) && !$courseoverflownode->find($activenode->key, $activenode->type)) { return null; } } $menuarray = static::create_menu_element([$courseoverflownode]); if ($activenode->key != 'coursereuse') { $inmenu = false; foreach ($menuarray as $key => $value) { if ($this->page->url->out(false) == $key) { $inmenu = true; } } if (!$inmenu) { return null; } } // If the page has explicitly set the overflow node it would like selected, find and use that node. if ($this->overflowselected) { $selectedoverflownode = $this->node_matches_key_string($courseoverflownode, $this->overflowselected); $selectedoverflownodeurl = $selectedoverflownode ? $selectedoverflownode->action->out(false) : null; } $menuselect = new url_select($menuarray, $selectedoverflownodeurl ?? $this->page->url, null); $menuselect->set_label(get_string('browsecourseadminindex', 'course'), ['class' => 'visually-hidden']); return $menuselect; } else { return $this->get_other_overflow_menu_data($activenode); } } /** * Gets overflow menu data for third party plugin settings. * * @param navigation_node $activenode The node to gather the children for to put into the overflow menu. * @return url_select|null The overflow menu in a url_select object. */ protected function get_other_overflow_menu_data(navigation_node $activenode): ?url_select { if (!$activenode->has_action()) { return null; } if (!$activenode->has_children()) { return null; } // If the setting is extending the course navigation then the page being redirected to should be in the course context. // It was decided on the issue that put this code here that plugins that extend the course navigation should have the pages // that are redirected to, be in the course context or module context depending on which callback was used. // Third part plugins were checked to see if any existing plugins had settings in a system context and none were found. // The request of third party developers is to keep their settings within the specified context. if ($this->page->context->contextlevel != CONTEXT_COURSE && $this->page->context->contextlevel != CONTEXT_MODULE && $this->page->context->contextlevel != CONTEXT_COURSECAT) { return null; } // These areas have their own code to retrieve added plugin navigation nodes. if ($activenode->key == 'coursehome' || $activenode->key == 'questionbank' || $activenode->key == 'coursereports') { return null; } $menunode = $this->page->settingsnav->find($activenode->key, null); if (!$menunode instanceof navigation_node) { return null; } // Loop through all children and try and find a match to the current url. $matchednode = $this->nodes_match_current_url($menunode); if (is_null($matchednode)) { return null; } if (!isset($menunode) || !$menunode->has_children()) { return null; } $selectdata = static::create_menu_element([$menunode], false); $urlselect = new url_select($selectdata, $matchednode->action->out(false), null); $urlselect->set_label(get_string('browsesettingindex', 'course'), ['class' => 'visually-hidden']); return $urlselect; } /** * Get the module's secondary navigation. This is based on settings_nav and would include plugin nodes added via * '_extend_settings_navigation'. * It populates the tree based on the nav mockup * * If nodes change, we will have to explicitly call the callback again. * * @param settings_navigation $settingsnav The settings navigation object related to the module page * @param navigation_node|null $rootnode The node where the module navigation nodes should be added into as children. * If not explicitly defined, the nodes will be added to the secondary root * node by default. */ protected function load_module_navigation(settings_navigation $settingsnav, ?navigation_node $rootnode = null): void { $rootnode = $rootnode ?? $this; $mainnode = $settingsnav->find('modulesettings', self::TYPE_SETTING); $nodes = $this->get_default_module_mapping(); if ($mainnode) { $url = new \moodle_url('/mod/' . $settingsnav->get_page()->activityname . '/view.php', ['id' => $settingsnav->get_page()->cm->id]); $setactive = $url->compare($settingsnav->get_page()->url, URL_MATCH_BASE); $node = $rootnode->add(get_string('modulename', $settingsnav->get_page()->activityname), $url, null, null, 'modulepage'); if ($setactive) { $node->make_active(); } // Add the initial nodes. $nodesordered = $this->get_leaf_nodes($mainnode, $nodes); $this->add_ordered_nodes($nodesordered, $rootnode); // We have finished inserting the initial structure. // Populate the menu with the rest of the nodes available. $this->load_remaining_nodes($mainnode, $nodes, $rootnode); } } /** * Load the course category navigation. */ protected function load_category_navigation(): void { $settingsnav = $this->page->settingsnav; $mainnode = $settingsnav->find('categorysettings', self::TYPE_CONTAINER); $nodes = $this->get_default_category_mapping(); if ($mainnode) { $url = new \moodle_url('/course/index.php', ['categoryid' => $this->context->instanceid]); $this->add(get_string('category'), $url, self::TYPE_CONTAINER, null, 'categorymain'); // Add the initial nodes. $nodesordered = $this->get_leaf_nodes($mainnode, $nodes); $this->add_ordered_nodes($nodesordered); // We have finished inserting the initial structure. // Populate the menu with the rest of the nodes available. $this->load_remaining_nodes($mainnode, $nodes); } } /** * Load the site admin navigation */ protected function load_admin_navigation(): void { global $PAGE, $SITE; $settingsnav = $this->page->settingsnav; $node = $settingsnav->find('root', self::TYPE_SITE_ADMIN); // We need to know if we are on the main site admin search page. Here the navigation between tabs are done via // anchors and page reload doesn't happen. On every nested admin settings page, the secondary nav needs to // exist as links with anchors appended in order to redirect back to the admin search page and the corresponding // tab. Note this value refers to being present on the page itself, before a search has been performed. $isadminsearchpage = $PAGE->url->compare(new \moodle_url('/admin/search.php', ['query' => '']), URL_MATCH_PARAMS); if ($node) { $siteadminnode = $this->add(get_string('general'), "#link$node->key", null, null, 'siteadminnode'); if ($isadminsearchpage) { $siteadminnode->action = false; $siteadminnode->tab = "#link$node->key"; } else { $siteadminnode->action = new \moodle_url("/admin/search.php", [], "link$node->key"); } foreach ($node->children as $child) { if ($child->display && !$child->is_short_branch()) { // Mimic the current boost behaviour and pass down anchors for the tabs. if ($isadminsearchpage) { $child->action = false; $child->tab = "#link$child->key"; } else { $child->action = new \moodle_url("/admin/search.php", [], "link$child->key"); } $this->add_node(clone $child); } else { $siteadminnode->add_node(clone $child); } } } } /** * Adds the indexed nodes to the current view or a given node. The key should indicate it's position in the tree. * Any sub nodes needs to be numbered appropriately, e.g. 3.1 would make the identified node be listed under #3 node. * * @param array $nodes An array of navigation nodes to be added. * @param navigation_node|null $rootnode The node where the nodes should be added into as children. If not explicitly * defined, the nodes will be added to the secondary root node by default. */ protected function add_ordered_nodes(array $nodes, ?navigation_node $rootnode = null): void { $rootnode = $rootnode ?? $this; ksort($nodes); foreach ($nodes as $key => $node) { // If the key is a string then we are assuming this is a nested element. if (is_string($key)) { $parentnode = $nodes[floor($key)] ?? null; if ($parentnode) { $parentnode->add_node(clone $node); } } else { $rootnode->add_node(clone $node); } } } /** * Find the remaining nodes that need to be loaded into secondary based on the current context or a given node. * * @param navigation_node $completenode The original node that we are sourcing information from * @param array $nodesmap The map used to populate secondary nav in the given context * @param navigation_node|null $rootnode The node where the remaining nodes should be added into as children. If not * explicitly defined, the nodes will be added to the secondary root node by * default. */ protected function load_remaining_nodes(navigation_node $completenode, array $nodesmap, ?navigation_node $rootnode = null): void { $flattenednodes = []; $rootnode = $rootnode ?? $this; foreach ($nodesmap as $nodecontainer) { $flattenednodes = array_merge(array_keys($nodecontainer), $flattenednodes); } $populatedkeys = $this->get_children_key_list(); $existingkeys = $completenode->get_children_key_list(); $leftover = array_diff($existingkeys, $populatedkeys); foreach ($leftover as $key) { if (!in_array($key, $flattenednodes, true) && $leftovernode = $completenode->get($key)) { // Check for nodes with children and potentially no action to direct to. if ($leftovernode->has_children()) { $leftovernode = $this->get_first_action_for_node($leftovernode); } // We have found the first node with an action. if ($leftovernode) { $this->add_external_nodes_to_secondary($leftovernode, $leftovernode, $rootnode); } } } } /** * Force certain secondary navigation nodes to be displayed in the "more" menu. * * @param array $defaultmoremenunodes Array with navigation node keys of the pre-defined nodes that * should be added into the "more" menu by default * @param int|null $maxdisplayednodes The maximum limit of navigation nodes displayed in the secondary navigation */ protected function force_nodes_into_more_menu(array $defaultmoremenunodes = [], ?int $maxdisplayednodes = null) { // Counter of the navigation nodes that are initially displayed in the secondary nav // (excludes the nodes from the "more" menu). $displayednodescount = 0; foreach ($this->children as $child) { // Skip if the navigation node has been already forced into the "more" menu. if ($child->forceintomoremenu) { continue; } // If the navigation node is in the pre-defined list of nodes that should be added by default in the // "more" menu or the maximum limit of displayed navigation nodes has been reached (if defined). if (in_array($child->key, $defaultmoremenunodes) || (!is_null($maxdisplayednodes) && $displayednodescount >= $maxdisplayednodes)) { // Force the node and its children into the "more" menu. $child->set_force_into_more_menu(true); continue; } $displayednodescount++; } } /** * Recursively remove navigation nodes that should not be displayed in the secondary navigation. * * @param navigation_node $node The starting navigation node. */ protected function remove_unwanted_nodes(navigation_node $node) { foreach ($node->children as $child) { if (!$child->showinsecondarynavigation) { $child->remove(); continue; } if (!empty($child->children)) { $this->remove_unwanted_nodes($child); } } } /** * Takes the given navigation nodes and searches for children and formats it all into an array in a format to be used by a * url_select element. * * @param navigation_node[] $navigationnodes Navigation nodes to format into a menu. * @param bool $forceheadings Whether the returned array should be forced to use headings. * @return array|null A url select element for navigating through the navigation nodes. */ public static function create_menu_element(array $navigationnodes, bool $forceheadings = false): ?array { if (empty($navigationnodes)) { return null; } // If one item, do we put this into a url_select? if (count($navigationnodes) < 2) { // Check if there are children. $navnode = array_shift($navigationnodes); $menudata = []; if (!$navnode->has_children()) { // Just one item. if (!$navnode->has_action()) { return null; } $menudata[$navnode->action->out(false)] = static::format_node_text($navnode); } else { if (static::does_menu_need_headings($navnode) || $forceheadings) { // Let's do headings. $menudata = static::get_headings_nav_array($navnode); } else { // Simple flat nav. $menudata = static::get_flat_nav_array($navnode); } } return $menudata; } else { // We have more than one navigation node to handle. Put each node in it's own heading. $menudata = []; $titledata = []; foreach ($navigationnodes as $navigationnode) { if ($navigationnode->has_children()) { $menuarray = []; // Add a heading and flatten out everything else. if ($navigationnode->has_action()) { $menuarray[static::format_node_text($navigationnode)][$navigationnode->action->out(false)] = static::format_node_text($navigationnode); $menuarray[static::format_node_text($navigationnode)] += static::get_whole_tree_flat($navigationnode); } else { $menuarray[static::format_node_text($navigationnode)] = static::get_whole_tree_flat($navigationnode); } $titledata += $menuarray; } else { // Add with no heading. if (!$navigationnode->has_action()) { return null; } $menudata[$navigationnode->action->out(false)] = static::format_node_text($navigationnode); } } $menudata += [$titledata]; return $menudata; } } /** * Recursively goes through the provided navigation node and returns a flat version. * * @param navigation_node $navigationnode The navigationnode. * @return array The whole tree flat. */ protected static function get_whole_tree_flat(navigation_node $navigationnode): array { $nodes = []; foreach ($navigationnode->children as $child) { if ($child->has_action()) { $nodes[$child->action->out()] = $child->text; } if ($child->has_children()) { $childnodes = static::get_whole_tree_flat($child); $nodes = array_merge($nodes, $childnodes); } } return $nodes; } /** * Checks to see if the provided navigation node has children and determines if we want headings for a url select element. * * @param navigation_node $navigationnode The navigation node we are checking. * @return bool Whether we want headings or not. */ protected static function does_menu_need_headings(navigation_node $navigationnode): bool { if (!$navigationnode->has_children()) { return false; } foreach ($navigationnode->children as $child) { if ($child->has_children()) { return true; } } return false; } /** * Takes the navigation node and returns it in a flat fashion. This is not recursive. * * @param navigation_node $navigationnode The navigation node that we want to format into an array in a flat structure. * @return array The flat navigation array. */ protected static function get_flat_nav_array(navigation_node $navigationnode): array { $menuarray = []; if ($navigationnode->has_action()) { $menuarray[$navigationnode->action->out(false)] = static::format_node_text($navigationnode); } foreach ($navigationnode->children as $child) { if ($child->has_action()) { $menuarray[$child->action->out(false)] = static::format_node_text($child); } } return $menuarray; } /** * For any navigation node that we have determined needs headings we return a more tree like array structure. * * @param navigation_node $navigationnode The navigation node to use for the formatted array structure. * @return array The headings navigation array structure. */ protected static function get_headings_nav_array(navigation_node $navigationnode): array { $menublock = []; // We know that this single node has headings, so grab this for the first heading. $firstheading = []; if ($navigationnode->has_action()) { $firstheading[static::format_node_text($navigationnode)][$navigationnode->action->out(false)] = static::format_node_text($navigationnode); $firstheading[static::format_node_text($navigationnode)] += static::get_more_child_nodes($navigationnode, $menublock); } else { $firstheading[static::format_node_text($navigationnode)] = static::get_more_child_nodes($navigationnode, $menublock); } return [$firstheading + $menublock]; } /** * Recursively goes and gets all children nodes. * * @param navigation_node $node The node to get the children of. * @param array $menublock Used to put all child nodes in its own container. * @return array The additional child nodes. */ protected static function get_more_child_nodes(navigation_node $node, array &$menublock): array { $nodes = []; foreach ($node->children as $child) { if (!$child->has_children()) { if (!$child->has_action()) { continue; } $nodes[$child->action->out(false)] = static::format_node_text($child); } else { $newarray = []; if ($child->has_action()) { $newarray[static::format_node_text($child)][$child->action->out(false)] = static::format_node_text($child); $newarray[static::format_node_text($child)] += static::get_more_child_nodes($child, $menublock); } else { $newarray[static::format_node_text($child)] = static::get_more_child_nodes($child, $menublock); } $menublock += $newarray; } } return $nodes; } /** * Returns the navigation node text in a string. * * @param navigation_node $navigationnode The navigationnode to return the text string of. * @return string The navigation node text string. */ protected static function format_node_text(navigation_node $navigationnode): string { return (is_a($navigationnode->text, 'lang_string')) ? $navigationnode->text->out() : $navigationnode->text; } /** * Load the single activity course secondary navigation. */ protected function load_single_activity_course_navigation(): void { $page = $this->page; $course = $page->course; // Create 'Course' navigation node. $coursesecondarynode = navigation_node::create(get_string('course'), null, self::TYPE_COURSE, null, 'course'); $this->load_course_navigation($coursesecondarynode); // Remove the unnecessary 'Course' child node generated in load_course_navigation(). $coursehomenode = $coursesecondarynode->find('coursehome', self::TYPE_COURSE); if (!empty($coursehomenode)) { $coursehomenode->remove(); } // Add the 'Course' node to the secondary navigation only if this node has children nodes. if (count($coursesecondarynode->children) > 0) { $this->add_node($coursesecondarynode); // Once all the items have been added to the 'Course' secondary navigation node, set the 'showchildreninsubmenu' // property to true. This is required to force the template to output these items within a dropdown menu. $coursesecondarynode->showchildreninsubmenu = true; } // Create 'Activity' navigation node. $activitysecondarynode = navigation_node::create(get_string('activity'), null, self::TYPE_ACTIVITY, null, 'activity'); // We should display the module related navigation in the course context as well. Therefore, we need to // re-initialize the page object and manually set the course module to the one that it is currently visible in // the course in order to obtain the required module settings navigation. if ($page->context instanceof \context_course) { $this->page->set_secondary_active_tab($coursesecondarynode->key); // Get the currently used module in the single activity course. $module = current(array_filter(get_course_mods($course->id), function ($module) { return $module->visible == 1; })); // If the default module for the single course format has not been set yet, skip displaying the module // related navigation in the secondary navigation. if (!$module) { return; } $page = new \moodle_page(); $page->set_cm($module, $course); $page->set_url(new \moodle_url('/mod/' . $page->activityname . '/view.php', ['id' => $page->cm->id])); } $this->load_module_navigation($page->settingsnav, $activitysecondarynode); // Add the 'Activity' node to the secondary navigation only if this node has more that one child node. if (count($activitysecondarynode->children) > 1) { // Set the 'showchildreninsubmenu' property to true to later output the the module navigation items within // a dropdown menu. $activitysecondarynode->showchildreninsubmenu = true; $this->add_node($activitysecondarynode); if ($this->context instanceof \context_module) { $this->page->set_secondary_active_tab($activitysecondarynode->key); } } else { // Otherwise, add the 'View activity' node to the secondary navigation. $viewactivityurl = new \moodle_url('/mod/' . $page->activityname . '/view.php', ['id' => $page->cm->id]); $this->add(get_string('modulename', $page->activityname), $viewactivityurl, null, null, 'modulepage'); if ($this->context instanceof \context_module) { $this->page->set_secondary_active_tab('modulepage'); } } } } PK\C$0p!! primary.phpnu[. namespace core\navigation\views; use navigation_node; /** * Class primary. * * The primary navigation view is a combination of few components - navigation, output->navbar, * * @package core * @category navigation * @copyright 2021 onwards Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class primary extends view { /** * Initialise the primary navigation node */ public function initialise(): void { global $CFG; if (during_initial_install() || $this->initialised) { return; } $this->id = 'primary_navigation'; $showhomenode = empty($this->page->theme->removedprimarynavitems) || !in_array('home', $this->page->theme->removedprimarynavitems); // We do not need to change the text for the home/dashboard depending on the set homepage. if ($showhomenode) { $sitehome = $this->add(get_string('home'), new \moodle_url('/'), self::TYPE_SYSTEM, null, 'home', new \pix_icon('i/home', '')); } if (isloggedin() && !isguestuser()) { $homepage = get_home_page(); if ($homepage == HOMEPAGE_MY || $homepage == HOMEPAGE_MYCOURSES) { // We need to stop automatic redirection. if ($showhomenode) { $sitehome->action->param('redirect', '0'); } } // Add the dashboard link. $showmyhomenode = !empty($CFG->enabledashboard) && (empty($this->page->theme->removedprimarynavitems) || !in_array('myhome', $this->page->theme->removedprimarynavitems)); if ($showmyhomenode) { $this->add(get_string('myhome'), new \moodle_url('/my/'), self::TYPE_SETTING, null, 'myhome', new \pix_icon('i/dashboard', '')); } // Add the mycourses link. $showcoursesnode = empty($this->page->theme->removedprimarynavitems) || !in_array('courses', $this->page->theme->removedprimarynavitems); if ($showcoursesnode) { $this->add(get_string('mycourses'), new \moodle_url('/my/courses.php'), self::TYPE_ROOTNODE, null, 'mycourses'); } } // Add the calendar link only for guest users. if (isguestuser()) { $this->add(get_string('calendar', 'calendar'), new \moodle_url('/calendar/view.php?view=month'), self::TYPE_ROOTNODE, null, 'calendar'); } $showsiteadminnode = empty($this->page->theme->removedprimarynavitems) || !in_array('siteadminnode', $this->page->theme->removedprimarynavitems); if ($showsiteadminnode && $node = $this->get_site_admin_node()) { // We don't need everything from the node just the initial link. $this->add($node->text, $node->action(), self::TYPE_SITE_ADMIN, null, 'siteadminnode', $node->icon); } // Allow plugins to add nodes to the primary navigation. $hook = new \core\hook\navigation\primary_extend($this); \core\di::get(\core\hook\manager::class)->dispatch($hook); // Search and set the active node. $this->set_active_node(); $this->initialised = true; } /** * Get the site admin node if available. * * @return navigation_node|null */ private function get_site_admin_node(): ?navigation_node { // Add the site admin node. We are using the settingsnav so as to avoid rechecking permissions again. $settingsnav = $this->page->settingsnav; $node = $settingsnav->find('siteadministration', self::TYPE_SITE_ADMIN); if (!$node) { // Try again. This node can exist with 2 different keys. $node = $settingsnav->find('root', self::TYPE_SITE_ADMIN); } return $node ?: null; } /** * Find and set the active node. Initially searches based on URL/explicitly set active node. * If nothing is found, it checks the following: * - If the node is a site page, set 'Home' as active * - If within a course context, set 'My courses' as active * - If within a course category context, set 'Site Admin' (if available) else set 'Home' * - Else if available set site admin as active * - Fallback, set 'Home' as active */ private function set_active_node(): void { global $SITE; $activenode = $this->search_and_set_active_node($this); // If we haven't found an active node based on the standard search. Follow the criteria above. if (!$activenode) { $children = $this->get_children_key_list(); $navactivenode = $this->page->navigation->find_active_node(); $activekey = 'home'; if (isset($navactivenode->parent) && $navactivenode->parent->text == get_string('sitepages')) { $activekey = 'home'; } else if (in_array($this->context->contextlevel, [CONTEXT_COURSE, CONTEXT_MODULE])) { if ($this->page->course->id != $SITE->id) { $activekey = 'courses'; } } else if (in_array('siteadminnode', $children) && $node = $this->get_site_admin_node()) { if ($this->context->contextlevel == CONTEXT_COURSECAT || $node->search_for_active_node(URL_MATCH_EXACT)) { $activekey = 'siteadminnode'; } } else if (in_array('calendar', $children) && $node = $this->find('calendar', self::TYPE_ROOTNODE)) { if ($node->search_for_active_node(URL_MATCH_BASE)) { $activekey = 'calendar'; } } if ($activekey && $activenode = $this->find($activekey, null)) { $activenode->make_active(); } } } /** * Searches all children for the matching active node * * This method recursively traverse through the node tree to * find the node to activate/highlight: * 1. If the user had set primary node key to highlight, it * tries to match this key with the node(s). Hence it would * travel all the nodes. * 2. If no primary key is provided by the dev, then it would * check for the active node set in the tree. * * @param navigation_node $node * @param array $actionnodes navigation nodes array to set active and inactive. * @return navigation_node|null */ private function search_and_set_active_node(navigation_node $node, array &$actionnodes = []): ?navigation_node { global $PAGE; $activekey = $PAGE->get_primary_activate_tab(); if ($activekey) { if ($node->key && ($activekey === $node->key)) { return $node; } } else if ($node->check_if_active()) { return $node; } foreach ($node->children as $child) { $outcome = $this->search_and_set_active_node($child, $actionnodes); if ($outcome !== null) { $outcome->make_active(); $actionnodes['active'] = $outcome; if ($activekey === null) { return $actionnodes['active']; } } else { // If the child is active then make it inactive. if ($child->isactive) { $actionnodes['set_inactive'][] = $child; } } } // If we have successfully found an active node then reset any other nodes to inactive. if (isset($actionnodes['set_inactive']) && isset($actionnodes['active'])) { foreach ($actionnodes['set_inactive'] as $inactivenode) { $inactivenode->make_inactive(); } $actionnodes['set_inactive'] = []; } return ($actionnodes['active'] ?? null); } } PK\VDBBview.phpnu[. namespace core\navigation\views; use navigation_node; use navigation_node_collection; /** * Class view. * * The base view class which expands on the navigation_node, * * @package core * @category navigation * @copyright 2021 onwards Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ abstract class view extends navigation_node { /** @var \stdClass $context the current context */ protected $context; /** @var \moodle_page $page the moodle page that the navigation belongs to */ protected $page; /** @var bool $initialised A switch to see if the navigation node is initialised */ protected $initialised = false; /** @var navigation_node $activenode A string identifier for the active node*/ public $activenode; /** * Function to initialise the respective view * @return void */ abstract public function initialise(): void; /** * navigation constructor. * @param \moodle_page $page */ public function __construct(\moodle_page $page) { global $FULLME; if (during_initial_install()) { return false; } $this->page = $page; $this->context = $this->page->context; $this->children = new navigation_node_collection(); } /** * Get the leaf nodes for the nav view * * @param navigation_node $source The settingsnav OR navigation object * @param array $nodes An array of nodes to fetch from the source which specifies the node type and final order * @return array $nodesordered The fetched nodes ordered based on final specification. */ protected function get_leaf_nodes(navigation_node $source, array $nodes): array { $nodesordered = []; foreach ($nodes as $type => $leaves) { foreach ($leaves as $leaf => $location) { if ($node = $source->find($leaf, $type)) { $nodesordered["$location"] = $nodesordered["$location"] ?? $node; } } } return $nodesordered; } /** * Scan the given node for the active node. It starts first with a strict search and then switches to a base search if * required. * * @param navigation_node $node The node to scan. * @return navigation_node|null The active node or null. */ protected function scan_for_active_node(navigation_node $node): ?navigation_node { $result = $this->active_node_scan($node); if (!is_null($result)) { return $result; } else { return $this->active_node_scan($node, URL_MATCH_BASE); } } /** * This function recursively scans nodes until it finds the active node or there * are no more nodes. We are using a custom implementation here to adjust the strictness * and also because we need the parent node and not the specific child node in the new views. * e.g. Structure for site admin, * SecondaryNav * - Site Admin * - Users * - User policies * - Courses * In the above example, if we are on the 'User Policies' page, the active node should be 'Users' * * @param navigation_node $node * @param int $strictness How stict to be with the scan for the active node. * @return navigation_node|null */ protected function active_node_scan(navigation_node $node, int $strictness = URL_MATCH_EXACT): ?navigation_node { $result = null; $activekey = $this->page->get_secondary_active_tab(); if ($activekey) { if ($node->key && $activekey === $node->key) { return $node; } } else if ($node->check_if_active($strictness)) { return $node; // No need to continue, exit function. } foreach ($node->children as $child) { if ($this->active_node_scan($child, $strictness)) { // If node is one of the new views then set the active node to the child. if (!$node instanceof view) { $node->make_active(); $result = $node; } else { $child->make_active(); $this->activenode = $child; $result = $child; } // If the secondary active tab not set then just return the result (fallback). if ($activekey === null) { return $result; } } else { // Make sure to reset the active state. $child->make_inactive(); } } return $result; } } PK\έOOprimary_test.phpnu[. namespace core\navigation\views; use navigation_node; use ReflectionMethod; /** * Class core_primary_testcase * * Unit test for the primary nav view. * * @package core * @category navigation * @copyright 2021 onwards Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class primary_test extends \advanced_testcase { /** * Test the initialise in different contexts * * @param string $usertype The user to setup for - admin, guest, regular user * @param string $expected The expected nodes * @dataProvider setting_initialise_provider */ public function test_setting_initialise($usertype, $expected): void { global $PAGE; $PAGE->set_url("/"); $this->resetAfterTest(); if ($usertype == 'admin') { $this->setAdminUser(); } else if ($usertype == 'guest') { $this->setGuestUser(); } else { $user = $this->getDataGenerator()->create_user(); $this->setUser($user); } $node = new primary($PAGE); $node->initialise(); $children = $node->get_children_key_list(); $this->assertEquals($expected, $children); } /** * Data provider for the test_setting_initialise function */ public static function setting_initialise_provider(): array { return [ 'Testing as a guest user' => ['guest', ['home', 'calendar']], 'Testing as an admin' => ['admin', ['home', 'myhome', 'mycourses', 'siteadminnode']], 'Testing as a regular user' => ['user', ['home', 'myhome', 'mycourses']] ]; } /** * Get the nav tree initialised to test search_and_set_active_node. * * @param string|null $seturl The url set for $PAGE. * @return navigation_node The initialised nav tree. */ private function get_tree_initilised_to_set_activate(?string $seturl = null): navigation_node { $node = new navigation_node('My test node'); $node->type = navigation_node::TYPE_SYSTEM; $node->add('first child', null, navigation_node::TYPE_CUSTOM, 'firstchld', 'firstchild'); $child2 = $node->add('second child', null, navigation_node::TYPE_COURSE, 'secondchld', 'secondchild'); $child3 = $node->add('third child', null, navigation_node::TYPE_CONTAINER, 'thirdchld', 'thirdchild'); $node->add('fourth child', null, navigation_node::TYPE_ACTIVITY, 'fourthchld', 'fourthchld'); $node->add('fifth child', '/my', navigation_node::TYPE_CATEGORY, 'fifthchld', 'fifthchild'); // If seturl is null then set actionurl of child6 to '/'. if ($seturl === null) { $child6actionurl = new \moodle_url('/'); } else { // If seturl is provided then set actionurl of child6 to '/foo'. $child6actionurl = new \moodle_url('/foo'); } $child6 = $child2->add('sixth child', $child6actionurl, navigation_node::TYPE_COURSE, 'sixthchld', 'sixthchild'); // Activate the sixthchild node. $child6->make_active(); $child2->add('seventh child', null, navigation_node::TYPE_COURSE, 'seventhchld', 'seventhchild'); $child8 = $child2->add('eighth child', null, navigation_node::TYPE_CUSTOM, 'eighthchld', 'eighthchild'); $child8->add('nineth child', null, navigation_node::TYPE_CUSTOM, 'ninethchld', 'ninethchild'); $child3->add('tenth child', null, navigation_node::TYPE_CUSTOM, 'tenthchld', 'tenthchild'); return $node; } /** * Testing search_and_set_active_node. * * @param string $expectedkey Expected key of the node, if set. * @param string|null $key The key of the node to activate. * @param string|null $seturl Set the url for $PAGE. * @return void * @dataProvider search_and_set_active_node_provider */ public function test_search_and_set_active_node(string $expectedkey, ?string $key = null, ?string $seturl = null): void { global $PAGE; if ($seturl !== null) { navigation_node::override_active_url(new \moodle_url($seturl)); } else { $PAGE->set_url('/'); navigation_node::override_active_url(new \moodle_url('/')); } if ($key !== null) { $PAGE->set_primary_active_tab($key); } $node = $this->get_tree_initilised_to_set_activate($seturl); $primary = new primary($PAGE); $method = new ReflectionMethod('core\navigation\views\primary', 'search_and_set_active_node'); $result = $method->invoke($primary, $node); $sixthchildnode = $node->find('sixthchild', navigation_node::TYPE_COURSE); if ($expectedkey !== '') { $this->assertInstanceOf('navigation_node', $result); $this->assertEquals($result->isactive, true); $this->assertEquals($result->key, $expectedkey); // Test the state of sixthchild, based on $expectedkey. if ($expectedkey !== 'sixthchild') { $this->assertFalse($sixthchildnode->isactive); } else { $this->assertTrue($sixthchildnode->isactive); } } else { $this->assertNull($result); $this->assertTrue($sixthchildnode->isactive); } } /** * Data provider for test_search_and_set_active_node * * @return array */ public static function search_and_set_active_node_provider(): array { return [ 'Test by activating node which is part of the tree' => ['tenthchild', 'tenthchild'], 'Do not change the state of any nodes of the tree' => ['sixthchild'], 'Test by setting an empty string as node key to activate' => ['sixthchild', ''], 'Activate a node which does not exist in the tree' => ['', 'foobar'], 'Activate the leaf node of the tree' => ['ninethchild', 'ninethchild'], 'Test by changing the $PAGE url which is different from action url of child6' => ['', null, '/foobar'], 'Test by having $PAGE url and child6 action url same' => ['sixthchild', null, '/foo'], ]; } } PK\t"GGsecondary_test.phpnu[. namespace core\navigation\views; use booktool_print\output\renderer; use navigation_node; use ReflectionMethod; use moodle_url; /** * Class core_secondary_testcase * * Unit test for the secondary nav view. * * @package core * @category navigation * @copyright 2021 onwards Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class secondary_test extends \advanced_testcase { /** * Test the get_leaf_nodes function * @param float $siteorder The order for the siteadmin node * @param float $courseorder The order for the course node * @param float $moduleorder The order for the module node * @dataProvider leaf_nodes_order_provider */ public function test_get_leaf_nodes(float $siteorder, float $courseorder, float $moduleorder): void { global $PAGE; // Create a secondary navigation and populate with some dummy nodes. $secondary = new secondary($PAGE); $secondary->add('Site Admin', '#', secondary::TYPE_SETTING, null, 'siteadmin'); $secondary->add('Course Admin', '#', secondary::TYPE_CUSTOM, null, 'courseadmin'); $secondary->add('Module Admin', '#', secondary::TYPE_SETTING, null, 'moduleadmin'); $nodes = [ navigation_node::TYPE_SETTING => [ 'siteadmin' => $siteorder, 'moduleadmin' => $courseorder, ], navigation_node::TYPE_CUSTOM => [ 'courseadmin' => $moduleorder, ] ]; $expectednodes = [ "$siteorder" => 'siteadmin', "$courseorder" => 'moduleadmin', "$moduleorder" => 'courseadmin', ]; $method = new ReflectionMethod('core\navigation\views\secondary', 'get_leaf_nodes'); $sortednodes = $method->invoke($secondary, $secondary, $nodes); foreach ($sortednodes as $order => $node) { $this->assertEquals($expectednodes[$order], $node->key); } } /** * Data provider for test_get_leaf_nodes * @return array */ public static function leaf_nodes_order_provider(): array { return [ 'Initialise the order with whole numbers' => [3, 2, 1], 'Initialise the order with a mix of whole and float numbers' => [2.1, 2, 1], ]; } /** * Test the initialise in different contexts * * @param string $context The context to setup for - course, module, system * @param string $expectedfirstnode The expected first node * @param string $header The expected string * @param string $activenode The expected active node * @param string $courseformat The used course format (only applicable in the course and module context). * @return void * @dataProvider setting_initialise_provider */ public function test_setting_initialise(string $context, string $expectedfirstnode, string $header, string $activenode, string $courseformat = 'topics'): void { global $PAGE, $SITE; $this->resetAfterTest(); $this->setAdminUser(); $pagecourse = $SITE; $pageurl = '/'; switch ($context) { case 'course': $pagecourse = $this->getDataGenerator()->create_course(['format' => $courseformat]); $contextrecord = \context_course::instance($pagecourse->id, MUST_EXIST); if ($courseformat === 'singleactivity') { $pageurl = new \moodle_url('/course/edit.php', ['id' => $pagecourse->id]); } else { $pageurl = new \moodle_url('/course/view.php', ['id' => $pagecourse->id]); } break; case 'module': $pagecourse = $this->getDataGenerator()->create_course(['format' => $courseformat]); $assign = $this->getDataGenerator()->create_module('assign', ['course' => $pagecourse->id]); $cm = get_coursemodule_from_id('assign', $assign->cmid); $contextrecord = \context_module::instance($cm->id); $pageurl = new \moodle_url('/mod/assign/view.php', ['id' => $cm->id]); $PAGE->set_cm($cm); break; case 'system': $contextrecord = \context_system::instance(); $PAGE->set_pagelayout('admin'); $pageurl = new \moodle_url('/admin/index.php'); } $PAGE->set_url($pageurl); navigation_node::override_active_url($pageurl); $PAGE->set_course($pagecourse); $PAGE->set_context($contextrecord); $node = new secondary($PAGE); $node->initialise(); $children = $node->get_children_key_list(); $this->assertEquals($expectedfirstnode, $children[0]); $this->assertEquals(get_string($header), $node->headertitle); $this->assertEquals($activenode, $node->activenode->text); } /** * Data provider for the test_setting_initialise function * @return array */ public static function setting_initialise_provider(): array { return [ 'Testing in a course context' => ['course', 'coursehome', 'courseheader', 'Course'], 'Testing in a course context using a single activity course format' => ['course', 'course', 'courseheader', 'Course', 'singleactivity'], 'Testing in a module context' => ['module', 'modulepage', 'activityheader', 'Assignment'], 'Testing in a module context using a single activity course format' => ['module', 'course', 'activityheader', 'Activity', 'singleactivity'], 'Testing in a site admin' => ['system', 'siteadminnode', 'homeheader', 'General'], ]; } /** * Get the nav tree initialised to test active_node_scan. * * This is to test the secondary nav with navigation_node instance. * * @param string|null $seturl The url set for $PAGE. * @return navigation_node The initialised nav tree. */ private function get_tree_initilised_to_set_activate(?string $seturl = null): navigation_node { global $PAGE; $node = new secondary($PAGE); $node->key = 'mytestnode'; $node->type = navigation_node::TYPE_SYSTEM; $node->add('first child', null, navigation_node::TYPE_CUSTOM, 'firstchld', 'firstchild'); $child2 = $node->add('second child', null, navigation_node::TYPE_COURSE, 'secondchld', 'secondchild'); $child3 = $node->add('third child', null, navigation_node::TYPE_CONTAINER, 'thirdchld', 'thirdchild'); $node->add('fourth child', null, navigation_node::TYPE_ACTIVITY, 'fourthchld', 'fourthchld'); $node->add('fifth child', '/my', navigation_node::TYPE_CATEGORY, 'fifthchld', 'fifthchild'); // If seturl is null then set actionurl of child6 to '/'. if ($seturl === null) { $child6actionurl = new \moodle_url('/'); } else { // If seturl is provided then set actionurl of child6 to '/foo'. $child6actionurl = new \moodle_url('/foo'); } $child6 = $child2->add('sixth child', $child6actionurl, navigation_node::TYPE_COURSE, 'sixthchld', 'sixthchild'); // Activate the sixthchild node. $child6->make_active(); $child2->add('seventh child', null, navigation_node::TYPE_COURSE, 'seventhchld', 'seventhchild'); $child8 = $child2->add('eighth child', null, navigation_node::TYPE_CUSTOM, 'eighthchld', 'eighthchild'); $child8->add('nineth child', null, navigation_node::TYPE_CUSTOM, 'ninethchld', 'ninethchild'); $child3->add('tenth child', null, navigation_node::TYPE_CUSTOM, 'tenthchld', 'tenthchild'); return $node; } /** * Testing active_node_scan on navigation_node instance. * * @param string $expectedkey The expected node key. * @param string|null $key The key set by user using set_secondary_active_tab. * @param string|null $seturl The url set by user. * @return void * @dataProvider active_node_scan_provider */ public function test_active_node_scan(string $expectedkey, ?string $key = null, ?string $seturl = null): void { global $PAGE; if ($seturl !== null) { navigation_node::override_active_url(new \moodle_url($seturl)); } else { $PAGE->set_url('/'); navigation_node::override_active_url(new \moodle_url('/')); } if ($key !== null) { $PAGE->set_secondary_active_tab($key); } $node = $this->get_tree_initilised_to_set_activate($seturl); $secondary = new secondary($PAGE); $method = new ReflectionMethod('core\navigation\views\secondary', 'active_node_scan'); $result = $method->invoke($secondary, $node); if ($expectedkey !== '') { $this->assertInstanceOf('navigation_node', $result); $this->assertEquals($expectedkey, $result->key); } else { $this->assertNull($result); } } /** * Data provider for the active_node_scan_provider * * @return array */ public static function active_node_scan_provider(): array { return [ 'Test by activating node adjacent to root node' => ['firstchild', 'firstchild'], 'Activate a grand child node of the root' => ['thirdchild', 'tenthchild'], 'When child node is activated the parent node is activated and returned' => ['secondchild', null], 'Test by setting an empty string as node key to activate' => ['secondchild', ''], 'Activate a node which does not exist in the tree' => ['', 'foobar'], 'Activate the leaf node of the tree' => ['secondchild', 'ninethchild', null, true], 'Changing the $PAGE url which is different from action url of child6 and not setting active tab manually' => ['', null, '/foobar'], 'Having $PAGE url and child6 action url same and not setting active tab manually' => ['secondchild', null, '/foo'], ]; } /** * Test the force_nodes_into_more_menu method. * * @param array $secondarynavnodesdata The array which contains the data used to generate the secondary navigation * @param array $defaultmoremenunodes The array containing the keys of the navigation nodes which should be added * to the "more" menu by default * @param int|null $maxdisplayednodes The maximum limit of navigation nodes displayed in the secondary navigation * @param array $expecedmoremenunodes The array containing the keys of the expected navigation nodes which are * forced into the "more" menu * @dataProvider force_nodes_into_more_menu_provider */ public function test_force_nodes_into_more_menu(array $secondarynavnodesdata, array $defaultmoremenunodes, ?int $maxdisplayednodes, array $expecedmoremenunodes): void { global $PAGE; // Create a dummy secondary navigation. $secondary = new secondary($PAGE); foreach ($secondarynavnodesdata as $nodedata) { $secondary->add($nodedata['text'], '#', secondary::TYPE_SETTING, null, $nodedata['key']); } $method = new ReflectionMethod('core\navigation\views\secondary', 'force_nodes_into_more_menu'); $method->invoke($secondary, $defaultmoremenunodes, $maxdisplayednodes); $actualmoremenunodes = []; foreach ($secondary->children as $node) { if ($node->forceintomoremenu) { $actualmoremenunodes[] = $node->key; } } // Assert that the actual nodes forced into the "more" menu matches the expected ones. $this->assertEquals($expecedmoremenunodes, $actualmoremenunodes); } /** * Data provider for the test_force_nodes_into_more_menu function. * * @return array */ public static function force_nodes_into_more_menu_provider(): array { return [ 'The total number of navigation nodes exceeds the max display limit (5); ' . 'navnode2 and navnode4 are forced into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], [ 'text' => 'Navigation node 6', 'key' => 'navnode6'], [ 'text' => 'Navigation node 7', 'key' => 'navnode7'], [ 'text' => 'Navigation node 8', 'key' => 'navnode8'], [ 'text' => 'Navigation node 9', 'key' => 'navnode9'], ], [ 'navnode2', 'navnode4', ], 5, [ 'navnode2', 'navnode4', 'navnode8', 'navnode9', ], ], 'The total number of navigation nodes does not exceed the max display limit (5); ' . 'navnode2 and navnode4 are forced into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], ], [ 'navnode2', 'navnode4', ], 5, [ 'navnode2', 'navnode4', ], ], 'The max display limit of navigation nodes is not defined; ' . 'navnode2 and navnode4 are forced into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], ], [ 'navnode2', 'navnode4', ], null, [ 'navnode2', 'navnode4', ], ], 'The total number of navigation nodes exceeds the max display limit (5); ' . 'no forced navigation nodes into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], [ 'text' => 'Navigation node 6', 'key' => 'navnode6'], [ 'text' => 'Navigation node 7', 'key' => 'navnode7'], [ 'text' => 'Navigation node 8', 'key' => 'navnode8'], ], [], 5, [ 'navnode6', 'navnode7', 'navnode8', ], ], 'The total number of navigation nodes does not exceed the max display limit (5); ' . 'no forced navigation nodes into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], [ 'text' => 'Navigation node 6', 'key' => 'navnode6'], ], [], 5, [ 'navnode6', ], ], 'The max display limit of navigation nodes is not defined; ' . 'no forced navigation nodes into "more" menu by default.' => [ [ [ 'text' => 'Navigation node 1', 'key' => 'navnode1'], [ 'text' => 'Navigation node 2', 'key' => 'navnode2'], [ 'text' => 'Navigation node 3', 'key' => 'navnode3'], [ 'text' => 'Navigation node 4', 'key' => 'navnode4'], [ 'text' => 'Navigation node 5', 'key' => 'navnode5'], [ 'text' => 'Navigation node 6', 'key' => 'navnode6'], ], [], null, [], ], ]; } /** * Recursive call to generate a navigation node given an array definition. * * @param array $structure * @param string $parentkey * @return navigation_node */ private function generate_node_tree_construct(array $structure, string $parentkey): navigation_node { $node = navigation_node::create($parentkey, null, navigation_node::TYPE_CUSTOM, '', $parentkey); foreach ($structure as $key => $value) { if (is_array($value)) { $children = $value['children'] ?? $value; $child = $this->generate_node_tree_construct($children, $key); if (isset($value['action'])) { $child->action = new \moodle_url($value['action']); } $node->add_node($child); } else { $node->add($key, $value, navigation_node::TYPE_CUSTOM, '', $key); } } return $node; } /** * Test the nodes_match_current_url function. * * @param string $selectedurl * @param string $expectednode * @dataProvider nodes_match_current_url_provider */ public function test_nodes_match_current_url(string $selectedurl, string $expectednode): void { global $PAGE; $structure = [ 'parentnode1' => [ 'child1' => '/my', 'child2' => [ 'child2.1' => '/view/course.php', 'child2.2' => '/view/admin.php', ] ] ]; $node = $this->generate_node_tree_construct($structure, 'primarynode'); $node->action = new \moodle_url('/'); $PAGE->set_url($selectedurl); $secondary = new secondary($PAGE); $method = new ReflectionMethod('core\navigation\views\secondary', 'nodes_match_current_url'); $response = $method->invoke($secondary, $node); $this->assertSame($response->key ?? null, $expectednode); } /** * Provider for test_nodes_match_current_url * * @return \string[][] */ public static function nodes_match_current_url_provider(): array { return [ "Match url to a node that is a deep nested" => [ '/view/course.php', 'child2.1', ], "Match url to a parent node with children" => [ '/', 'primarynode' ], "Match url to a child node" => [ '/my', 'child1' ], ]; } /** * Test the get_menu_array function * * @param string $selected * @param array $expected * @dataProvider get_menu_array_provider */ public function test_get_menu_array(string $selected, array $expected): void { global $PAGE; // Custom nodes - mimicing nodes added via 3rd party plugins. $structure = [ 'parentnode1' => [ 'child1' => '/my', 'child2' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => '/view/course.php?child=2', 'child2.2' => '/view/admin.php?child=2', 'child2.3' => '/test.php', ] ], 'child3' => [ 'child3.1' => '/view/course.php?child=3', 'child3.2' => '/view/admin.php?child=3', ] ], 'parentnode2' => "/view/module.php" ]; $secondary = new secondary($PAGE); $secondary->add_node($this->generate_node_tree_construct($structure, 'primarynode')); $selectednode = $secondary->find($selected, null); $response = \core\navigation\views\secondary::create_menu_element([$selectednode]); $this->assertSame($expected, $response); } /** * Provider for test_get_menu_array * * @return array[] */ public static function get_menu_array_provider(): array { return [ "Fetch information from a node with action and no children" => [ 'child1', [ 'https://www.example.com/moodle/my' => 'child1' ], ], "Fetch information from a node with no action and children" => [ 'child3', [ 'https://www.example.com/moodle/view/course.php?child=3' => 'child3.1', 'https://www.example.com/moodle/view/admin.php?child=3' => 'child3.2' ], ], "Fetch information from a node with children" => [ 'child2', [ 'https://www.example.com/moodle/test.php' => 'child2.3', 'https://www.example.com/moodle/view/course.php?child=2' => 'child2.1', 'https://www.example.com/moodle/view/admin.php?child=2' => 'child2.2' ], ], "Fetch information from a node with an action and no children" => [ 'parentnode2', ['https://www.example.com/moodle/view/module.php' => 'parentnode2'], ], "Fetch information from a node with an action and multiple nested children" => [ 'parentnode1', [ [ 'parentnode1' => [ 'https://www.example.com/moodle/my' => 'child1' ], 'child2' => [ 'https://www.example.com/moodle/test.php' => 'child2', 'https://www.example.com/moodle/view/course.php?child=2' => 'child2.1', 'https://www.example.com/moodle/view/admin.php?child=2' => 'child2.2', ], 'child3' => [ 'https://www.example.com/moodle/view/course.php?child=3' => 'child3.1', 'https://www.example.com/moodle/view/admin.php?child=3' => 'child3.2' ] ] ], ], ]; } /** * Test the get_node_with_first_action function * * @param string $selectedkey * @param string|null $expectedkey * @dataProvider get_node_with_first_action_provider */ public function test_get_node_with_first_action(string $selectedkey, ?string $expectedkey): void { global $PAGE; $structure = [ 'parentnode1' => [ 'child1' => [ 'child1.1' => null ], 'child2' => [ 'child2.1' => [ 'child2.1.1' => [ 'action' => '/test.php', 'children' => [ 'child2.1.1.1' => '/view/course.php?child=2', 'child2.1.1.2' => '/view/admin.php?child=2', ] ] ] ], 'child3' => [ 'child3.1' => '/view/course.php?child=3', 'child3.2' => '/view/admin.php?child=3', ] ], 'parentnode2' => "/view/module.php" ]; $nodes = $this->generate_node_tree_construct($structure, 'primarynode'); $selectednode = $nodes->find($selectedkey, null); $expected = null; // Expected response will be the parent node with the action updated. if ($expectedkey) { $expectedbasenode = clone $selectednode; $actionfromnode = $nodes->find($expectedkey, null); $expectedbasenode->action = $actionfromnode->action; $expected = $expectedbasenode; } $secondary = new secondary($PAGE); $method = new ReflectionMethod('core\navigation\views\secondary', 'get_node_with_first_action'); $response = $method->invoke($secondary, $selectednode, $selectednode); $this->assertEquals($expected, $response); } /** * Provider for test_get_node_with_first_action * * @return array */ public static function get_node_with_first_action_provider(): array { return [ "Search for action when parent has no action and multiple children with actions" => [ "child3", "child3.1", ], "Search for action when parent child is deeply nested." => [ "child2", "child2.1.1" ], "No navigation node returned when node has no children" => [ "parentnode2", null ], "No navigation node returned when node has children but no actions available." => [ "child1", null ], ]; } /** * Test the add_external_nodes_to_secondary function. * * @param array $structure The structure of the navigation node tree to setup with. * @param array $expectednodes The expected nodes added to the secondary navigation * @param bool $separatenode Whether or not to create a separate node to add nodes to. * @dataProvider add_external_nodes_to_secondary_provider */ public function test_add_external_nodes_to_secondary(array $structure, array $expectednodes, bool $separatenode = false): void { global $PAGE; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); $context = \context_course::instance($course->id); $PAGE->set_context($context); $PAGE->set_url('/'); $node = $this->generate_node_tree_construct($structure, 'parentnode'); $secondary = new secondary($PAGE); $secondary->add_node($node); $firstnode = $node->get('parentnode1'); $customparent = null; if ($separatenode) { $customparent = navigation_node::create('Custom parent'); } $method = new ReflectionMethod('core\navigation\views\secondary', 'add_external_nodes_to_secondary'); $method->invoke($secondary, $firstnode, $firstnode, $customparent); $actualnodes = $separatenode ? $customparent->get_children_key_list() : $secondary->get_children_key_list(); $this->assertEquals($expectednodes, $actualnodes); } /** * Provider for the add_external_nodes_to_secondary function. * * @return array */ public static function add_external_nodes_to_secondary_provider(): array { return [ "Container node with internal action and external children" => [ [ 'parentnode1' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => 'https://example.org', 'child2.2' => 'https://example.net', ] ] ], ['parentnode', 'parentnode1'] ], "Container node with external action and external children" => [ [ 'parentnode1' => [ 'action' => 'https://example.com', 'children' => [ 'child2.1' => 'https://example.org', 'child2.2' => 'https://example.net', ] ] ], ['parentnode', 'parentnode1', 'child2.1', 'child2.2'] ], "Container node with external action and internal children" => [ [ 'parentnode1' => [ 'action' => 'https://example.org', 'children' => [ 'child2.1' => '/view/course.php', 'child2.2' => '/view/admin.php', ] ] ], ['parentnode', 'parentnode1', 'child2.1', 'child2.2'] ], "Container node with internal actions and internal children" => [ [ 'parentnode1' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => '/course.php', 'child2.2' => '/admin.php', ] ] ], ['parentnode', 'parentnode1'] ], "Container node with internal action and external children adding to custom node" => [ [ 'parentnode1' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => 'https://example.org', 'child2.2' => 'https://example.net', ] ] ], ['parentnode1'], true ], "Container node with external action and external children adding to custom node" => [ [ 'parentnode1' => [ 'action' => 'https://example.com', 'children' => [ 'child2.1' => 'https://example.org', 'child2.2' => 'https://example.net', ] ] ], ['parentnode1', 'child2.1', 'child2.2'], true ], "Container node with external action and internal children adding to custom node" => [ [ 'parentnode1' => [ 'action' => 'https://example.org', 'children' => [ 'child2.1' => '/view/course.php', 'child2.2' => '/view/admin.php', ] ] ], ['parentnode1', 'child2.1', 'child2.2'], true ], "Container node with internal actions and internal children adding to custom node" => [ [ 'parentnode1' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => '/course.php', 'child2.2' => '/admin.php', ] ] ], ['parentnode1'], true ], ]; } /** * Test the get_overflow_menu_data function * * @param string $selectedurl * @param bool $expectednull * @param bool $emptynode * @dataProvider get_overflow_menu_data_provider */ public function test_get_overflow_menu_data(string $selectedurl, bool $expectednull, bool $emptynode = false): void { global $PAGE; $this->resetAfterTest(); // Custom nodes - mimicing nodes added via 3rd party plugins. $structure = [ 'parentnode1' => [ 'child1' => '/my', 'child2' => [ 'action' => '/test.php', 'children' => [ 'child2.1' => '/view/course.php', 'child2.2' => '/view/admin.php', ] ] ], 'parentnode2' => "/view/module.php" ]; $course = $this->getDataGenerator()->create_course(); $context = \context_course::instance($course->id); $PAGE->set_context($context); $PAGE->set_url($selectedurl); navigation_node::override_active_url(new \moodle_url($selectedurl)); $node = $this->generate_node_tree_construct($structure, 'primarynode'); $node->action = new \moodle_url('/'); $secondary = new secondary($PAGE); $secondary->add_node($node); $PAGE->settingsnav->add_node(clone $node); $secondary->add('Course home', '/coursehome.php', navigation_node::TYPE_CUSTOM, '', 'coursehome'); $secondary->add('Course settings', '/course/settings.php', navigation_node::TYPE_CUSTOM, '', 'coursesettings'); // Test for an empty node without children and action. if ($emptynode) { $node = $secondary->add('Course management', null, navigation_node::TYPE_CUSTOM, '', 'course'); $node->make_active(); } else { // Set the correct node as active. $method = new ReflectionMethod('core\navigation\views\secondary', 'scan_for_active_node'); $method->invoke($secondary, $secondary); } $method = new ReflectionMethod('core\navigation\views\secondary', 'get_overflow_menu_data'); $response = $method->invoke($secondary); if ($expectednull) { $this->assertNull($response); } else { $this->assertIsObject($response); $this->assertInstanceOf('url_select', $response); } } /** * Data provider for test_get_overflow_menu_data * * @return string[] */ public static function get_overflow_menu_data_provider(): array { return [ "Active node is the course home node" => [ '/coursehome.php', true ], "Active node is one with an action and no children" => [ '/view/module.php', false ], "Active node is one with an action and children" => [ '/', false ], "Active node is one without an action and children" => [ '/', true, true, ], "Active node is one with an action and children but is NOT in settingsnav" => [ '/course/settings.php', true ], ]; } /** * Test the course administration settings return an overflow menu. * * @dataProvider get_overflow_menu_data_course_admin_provider * @param string $url Url of the page we are testing. * @param string $contextidentifier id or contextid or something similar. * @param bool $expected The expected return. True to return the overflow menu otherwise false for nothing. */ public function test_get_overflow_menu_data_course_admin(string $url, string $contextidentifier, bool $expected): void { global $PAGE; $this->resetAfterTest(); $this->setAdminUser(); $pagecourse = $this->getDataGenerator()->create_course(); $contextrecord = \context_course::instance($pagecourse->id, MUST_EXIST); $id = ($contextidentifier == 'contextid') ? $contextrecord->id : $pagecourse->id; $pageurl = new \moodle_url($url, [$contextidentifier => $id]); $PAGE->set_url($pageurl); navigation_node::override_active_url($pageurl); $PAGE->set_context($contextrecord); $node = new secondary($PAGE); $node->initialise(); $result = $node->get_overflow_menu_data(); if ($expected) { $this->assertInstanceOf('url_select', $result); $this->assertTrue($pageurl->compare($result->selected)); } else { $this->assertNull($result); } } /** * Data provider for the other half of the method thing * * @return array Provider information. */ public static function get_overflow_menu_data_course_admin_provider(): array { return [ "Backup page returns overflow" => [ '/backup/backup.php', 'id', false, ], "Restore course page returns overflow" => [ '/backup/restorefile.php', 'contextid', false, ], "Import course page returns overflow" => [ '/backup/import.php', 'id', false, ], "Course copy page returns overflow" => [ '/backup/copy.php', 'id', false, ], "Course reset page returns overflow" => [ '/course/reset.php', 'id', false, ], // The following pages should not return the overflow menu. "Course page returns nothing" => [ '/course/view.php', 'id', false ], "Question bank should return nothing" => [ '/question/edit.php', 'cmid', false ], "Reports should return nothing" => [ '/report/log/index.php', 'id', false ], "Participants page should return nothing" => [ '/user/index.php', 'id', false ] ]; } } PK0S\4OOOdemo.blade.phpnu[ Laravel Filemanager

Integration Demo Page

CKEditor

TinyMCE

Summernote

Standalone Image Button

Standalone File Button

Embed file manager

PK0S\键$$crop.blade.phpnu[



PK0S\.L--index.blade.phpnu[ {{ trans('laravel-filemanager::lfm.title-page') }} {{-- Use the line below instead of the above if you need to cache the css. --}} {{-- --}}
{{ trans('laravel-filemanager::lfm.message-empty') }}
{{-- Use the line below instead of the above if you need to cache the script. --}} {{-- --}} PK0S\omove.blade.phpnu[ PK0S\kYtree.blade.phpnu[

Laravel File Manager

Ver 2.0

Current usage :

20 GB (Max : 1 TB)

PK0S\[%(( use.blade.phpnu[ PK0S\p resize.blade.phpnu[
@if ($scaled) @endif
{{ trans('laravel-filemanager::lfm.resize-ratio') }} {{ number_format($ratio, 2) }}
{{ trans('laravel-filemanager::lfm.resize-scaled') }} {{ trans('laravel-filemanager::lfm.resize-true') }}
{{ trans('laravel-filemanager::lfm.resize-old-height') }} {{ $original_height }}px
{{ trans('laravel-filemanager::lfm.resize-old-width') }} {{ $original_width }}px
{{ trans('laravel-filemanager::lfm.resize-new-height') }} px
{{ trans('laravel-filemanager::lfm.resize-new-width') }} px
PK\\oO O welcome_message.phpnu[ Welcome to CodeIgniter

Welcome to CodeIgniter!

The page you are looking at is being generated dynamically by CodeIgniter.

If you would like to edit this page you'll find it located at:

application/views/welcome_message.php

The corresponding controller for this page is found at:

application/controllers/Welcome.php

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.

PK\\ցցinstall/step.phpnu[
aruda CBT
Gabungan Aplikasi Rapor,
Ujian dan e-learning
Install Applikasi
nama_admin === '' ? '' : 'readonly'; $readAdminUser = $data->user_admin === '' ? '' : 'readonly'; $readAdminPass = $data->pass_admin === '' ? '' : 'readonly'; $readAppNama = $data->aplikasi === '' ? '' : 'readonly'; $readSklNama = $data->sekolah === '' ? '' : 'readonly'; $readSklKepsek = $data->kepsek === '' ? '' : 'readonly'; $readSklJenjang = $data->jenjang === '' ? '' : 'readonly'; $readSklSatuan = $data->satuan === '' ? '' : 'readonly'; $readSklAlamat = $data->alamat === '' ? '' : 'readonly'; $readSklDesa = $data->desa === '' ? '' : 'readonly'; $readSklKec = $data->kec === '' ? '' : 'readonly'; $readSklKota = $data->kota === '' ? '' : 'readonly'; $readSklProv = $data->prov === '' ? '' : 'readonly'; ?> 'installapp')) ?>
Kosongkan jika tidak menggunakan password.
Jangan gunakan spasi.

LOGIN ADMINISTRATOR

>
>
> Password harus 6 karakter atau lebih.
>
>
>
>

>
>
>
>
>
Database :
Nama Aplikasi :
Nama Administrator :
Username :
Password :
Nama Sekolah :
Kepala Sekolah :
Jenjang :
Satuan Pend. :
Alamat :

PK\\W͛install/update.phpnu[
'; foreach ($json as $js) { foreach ($js as $objects) { if (!is_string($objects)) { foreach ($objects as $key=>$object) { foreach ($object as $key=>$obj) { var_dump($key); var_dump($obj); echo '
'; } } } } } echo ''; */ ?>
arudaCBT

UPDATE DATABASE

Loading
Mengambil informasi ....
'update-database')) ?>
PK\\Zʶinstall/footer.phpnu[ PK\\z install/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\nMq(q(install/setup.phpnu[
aruda CBT
Gabungan Aplikasi Rapor,
Ujian dan e-learning
'create')) ?>
Kosongkan jika tidak menggunakan password.
Jangan gunakan spasi.
PK\\[?install/header.phpnu[ Garuda CBT Installer PK\\c|zzmembers/guru/dashboard.phpnu[
total; ?>
title; ?>
JADWAL HARI INI
0 && count($kbms) > 0):?>
$kelas) : $arrIst = []; if (isset($kbms[$ky]->istirahat)) { foreach ($kbms[$ky]->istirahat as $istirahat) { array_push($arrIst, $istirahat['ist']); $arrDur[$istirahat['ist']] = $istirahat['dur']; } } $active = $no == 1 ? 'active' : ''; ?>
kbm_jam_mulai); $jamSampai = new DateTime($kbms[$ky]->kbm_jam_mulai); for ($i = 0; $i < $kbms[$ky]->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbms[$ky]->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $kbms[$ky]->kbm_jam_pel . 'M')); endif; endfor; ?>
format('H:i') ?> - format('H:i') ?> ISTIRAHAT
format('H:i') ?> - format('H:i') ?> kode != null ? $jadwals[$ky][$jamke]->kode : '--' ?>
Jadwal untuk kelas belum dibuat
Tidak ada jadwal hari ini
Aktifitas

Penilaian

title; ?>
total; ?>
Token
token != null ? $token->token : '- - - - - -' ?>

PENILAIAN HARI INI
0) : ?> $sesis) : foreach ($sesis as $sesi) : foreach ($jadwal_ujian as $jadwal) : $id_guru = isset($pengawas[$jadwal[0]->id_jadwal]) && isset($pengawas[$jadwal[0]->id_jadwal][$ruang]) && isset($pengawas[$jadwal[0]->id_jadwal][$ruang][$sesi->sesi_id]) ? explode(',', $pengawas[$jadwal[0]->id_jadwal][$ruang][$sesi->sesi_id]->id_guru ?? '') : []; $badge_kelas = ''; $total_peserta = 0; foreach ($jadwal as $jdw) { $bank_kelass = $jdw->bank_kelas; foreach ($bank_kelass as $bank_kelas) { foreach ($jdw->peserta as $peserta) { $cnt = isset($peserta[$ruang]) && isset($peserta[$ruang][$sesi->sesi_id]) ? count($peserta[$ruang][$sesi->sesi_id]) : 0; if ($bank_kelas['kelas_id'] != null && $cnt > 0) { $total_peserta += $cnt; $badge_kelas .= ' ' . $kelases[$bank_kelas['kelas_id']] . ' ' . $cnt . ' siswa'; } } } } if ($total_peserta > 0) : ?>
NO RUANG SESI MATA PELAJARAN PENGAWAS
nama_ruang ?> nama_sesi ?> kode ?> ' . $gurus[$ig] . '

' : ''; } ?>
Tidak ada jadwal penilaian
INFO/PENGUMUMAN


Loading....

Muat Pengumuman lainnya ...
PK\\֡!members/guru/templates/navbar.phpnu[ PK\\m!!members/guru/templates/footer.phpnu[
GarudaCBT v.
Copyright © 2014-2019 AdminLTE.io. V.3.0.5
PK\\aa\%%"members/guru/templates/sidebar.phpnu[ PK\\҇97f/f/!members/guru/templates/header.phpnu[ <?= $judul ?> logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?>
PK\\z&z&"members/guru/kelas/jadwal/data.phpnu[istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); } ?>

Pilih Kelas:
0) : foreach ($kelas as $key => $value) :?>

jam_ke][] = [ 'id_tp' => $j->id_tp, 'id_smt' => $j->id_smt, 'id_kelas' => $j->id_kelas, 'id_hari' => $j->id_hari, 'jam_ke' => $j->jam_ke, 'id_mapel' => $j->id_mapel, 'kode' => $j->kode ]; } } $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; }; if (isset($jadwal_kbm->ada)) : ?>

ada)) : ?>
kbm_jam_mulai); $jamSampai = new DateTime($jadwal_kbm->kbm_jam_mulai); for ($i = 0; $i < $jadwal_kbm->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); endif; endfor; ?>
WAKTU SENIN SELASA RABU KAMIS JUM'AT SABTU
format('H:i') ?> - format('H:i') ?> ISTIRAHAT ISTIRAHAT ISTIRAHAT ISTIRAHAT ISTIRAHAT ISTIRAHAT
format('H:i') ?> - format('H:i') ?>
PK\\4{'''members/guru/kelas/catatan/persiswa.phpnu[

Catatan Untuk nama ?>
0) : foreach ($catatan_siswa as $key => $value) : ?>
No. Tanggal Jenis Catatan Aksi
tgl ?> level] ?> text ?>
Belum ada catatan
PK\\*gMM#members/guru/kelas/catatan/data.phpnu[

'formselect')) ?>

Catatan Perkelas

0) : $arrLvl = ['Tidak ada', 'Saran', 'Teguran', 'Peringatan', 'Sangsi']; $no = 1; foreach ($cat_kelas as $value) :?>
No. Tanggal Jenis Catatan Keterangan Aksi
tgl ?> level] ?> text ?> reading) ?> siswa membaca
Belum ada catatan

Pilih mapel dan Kelas

Catatan Persiswa

0) : $no = 1; foreach ($cat_siswa as $value) :?>
No. NIS Nama Catatan
nis ?> nama ?>
Belum ada catatan

Pilih mapel dan Kelas

PK\\`tUUmembers/guru/luckyview.phpnu[

TEST

PK\\7N7N#members/guru/rapor/sikap/sosial.phpnu[

nama_kelas ?>

PILIHAN DESKRIPSI NILAI SOSIAL
Poin Edit Deskripsi Berdasarkan Poin
kode ?> sikap ?>
Point Edit Deskripsi Berdasarkan Point
kode ?> sikap ?>
'editsikap')) ?>

INPUT NILAI SOSIAL
'uploadnilai')) ?>
PK\\wII&members/guru/rapor/sikap/spiritual.phpnu[

nama_kelas ?>

PILIHAN DESKRIPSI NILAI SPIRITUAL
Poin Edit Deskripsi Berdasarkan Poin
kode ?> sikap ?>
Point Edit Deskripsi Berdasarkan Point
kode ?> sikap ?>
'editsikap')) ?>

INPUT NILAI SPIRITUAL
'uploadnilai')) ?>
PK\\_=a!members/guru/rapor/sikap/data.phpnu[

'editsikap')) ?>
jenis === '1') :?>
NO Edit Pilihan Deskripsi Spiritual
kode ?> sikap ?>
jenis === '2') :?>
NO Edit Pilihan Deskripsi Sosial
kode ?> sikap ?>
PK\\PM@M@!members/guru/rapor/fisik/data.phpnu[

nama_kelas ?>

PILIHAN DESKRIPSI CATATAN WALI KELAS
kode == $i + 1) :?>
No Pendengaran Penglihatan Gigi Lain-lain
deskripsi ?>
'editdeskripsi')) ?>

INPUT CATATAN SISWA
'uploadnilai')) ?>
PK\\ /uUuU members/guru/rapor/nilai/pts.phpnu[

Download Template
'uploadfile')); ?>

kkm_tunggal == "0" ? "MULTI" : "TUNGGAL"; $isi = $kkm->kkm; $d = 0; $dsd = $isi - 1; $c = $isi; $csd = floor($isi + (100 - $isi) / 3); $b = $csd + 1; $bsd = floor($b + (100 - $b) / 2); $a = $bsd + 1; $asd = 100; ?>
KKM Jenis KKM Interval Predikat Berdasarkan KKM Bobot Nilai PTS
kkm ?> 0 ~ : D : C : B ~ 100 : A bobot_pts ?> %
'uploadnilai')) ?>
'uploadpts')); ?>
PK\\QQQQ#members/guru/rapor/nilai/ekstra.phpnu[

Download Template
'uploadfile')); ?>

'uploadnilai')) ?>
'uploadekstra')); ?>
PK\\D~C00&members/guru/rapor/nilai/nilaiguru.phpnu[

Filter
Mata Pelajaran
Ekstrakurikuler
'; //var_dump($guru_mapel); //var_dump($guru_mapels[7]->nama_guru); //var_dump($guru_mapels[7]->mapel_kelas); //var_dump($guru_mapels[7]->mapel_kelas[0]['id_mapel']); //var_dump($guru_mapels[7]->mapel_kelas[0]['kelas_mapel'][0]['kelas']); //echo ''; if (isset($siswa)) : ?>
id_siswa] ?>
NO NIS/NISN NAMA NILAI PENGETAHUAN RPH P PRED P DESKRIPSI PENGETAHUAN NILAI KETERAMPILAN RPH K PRED K DESKRIPSI KETERAMPILAN NILAI PRED DESKRIPSI
P1 P2 P3 P4 P5 P6 P7 P8 K1 K2 K3 K4 K5 K6 K7 K8
nis ?> nama ?> p1 ?> p2 ?> p3 ?> p4 ?> p5 ?> p6 ?> p7 ?> p8 ?> p_rata_rata ?> p_predikat ?> p_deskripsi ?> k1 ?> k2 ?> k3 ?> k4 ?> k5 ?> k6 ?> k7 ?> k8 ?> k_rata_rata ?> k_predikat ?> k_deskripsi ?> nilai ?> predikat ?> deskripsi ?>
PK\\'++$members/guru/rapor/nilai/periksa.phpnu[

Filter
Mata Pelajaran
Ekstrakurikuler
'; //var_dump($guru_mapel); //var_dump($guru_mapels[7]->nama_guru); //var_dump($guru_mapels[7]->mapel_kelas); //var_dump($guru_mapels[7]->mapel_kelas[0]['id_mapel']); //var_dump($guru_mapels[7]->mapel_kelas[0]['kelas_mapel'][0]['kelas']); //echo ''; if (isset($siswa)) : ?>
id_siswa]; ?>
NO NIS/NISN NAMA NILAI PENGETAHUAN RPH P PRED P DESKRIPSI PENGETAHUAN NILAI KETERAMPILAN RPH K PRED K DESKRIPSI KETERAMPILAN NILAI PRED DESKRIPSI
P1 P2 P3 P4 P5 P6 P7 P8 K1 K2 K3 K4 K5 K6 K7 K8
nis ?> nama ?> p1 != null ? $ns->p1 : '' ?> p2 ?> p3 ?> p4 ?> p5 ?> p6 ?> p7 ?> p8 ?> p_rata_rata ?> p_predikat ?> p_deskripsi ?> k1 ?> k2 ?> k3 ?> k4 ?> k5 ?> k6 ?> k7 ?> k8 ?> k_rata_rata ?> k_predikat ?> k_deskripsi ?> nilai ?> predikat ?> deskripsi ?>
PK\\tTT#members/guru/rapor/nilai/harian.phpnu[

Template Nilai
Download Template
'uploadfile')); ?>

'editkikd')) ?>
Indikator Penilaian
materi_kikd; ?>
# Edit Aspek Pengetahuan
P
materi_kikd; ?>
# Edit Aspek Keterampilan (Praktik/Portofolio/Proyek)
K
Edit Nilai
kkm_tunggal == "0" ? "MULTI" : "TUNGGAL"; $isi = $kkm->kkm; $d = 0; $dsd = $isi - 1; $c = $isi; $csd = floor($isi + (100 - $isi) / 3); $b = $csd + 1; $bsd = floor($b + (100 - $b) / 2); $a = $bsd + 1; $asd = 100; ?>
KKM Jenis KKM Interval Predikat Berdasarkan KKM Bobot Nilai Harian
kkm ?> 0 ~ : D : C : B ~ 100 : A bobot_ph ?> %
'uploadnilai')) ?>
'uploadharian')); ?>
PK\\.@))!members/guru/rapor/nilai/data.phpnu[

$mpl) { $nos = 1; foreach ($kelas_mapel[$key] as $k => $kls) { if ($kls['level'] == $lvl && $kls['id_kelas'] != null) { $arrLevel[$key][$lvl][] = ['mapel' => $mpl, 'url_harian' => base_url('rapor/inputharian/' . $key . '/' . $kls['id_kelas']), 'url_pts' => base_url('rapor/inputpts/' . $key . '/' . $kls['id_kelas']), 'url_pas' => base_url('rapor/inputpas/' . $key . '/' . $kls['id_kelas']), 'nama_kelas' => $kls['nama_kelas']]; $nos++; } } } } foreach ($mapel as $km => $m) : if (isset($arrLevel[$km]) && count($arrLevel[$km]) > 0) : foreach ($arrLevel[$km] as $lv) : ?>
$kls) : $indich = $harian[$km][$kls['nama_kelas']] == $siswas[$km][$kls['nama_kelas']] ? '' : ''; $indicp = $pts[$km][$kls['nama_kelas']] == $siswas[$km][$kls['nama_kelas']] ? '' : ''; $indica = $pas[$km][$kls['nama_kelas']] == $siswas[$km][$kls['nama_kelas']] ? '' : ''; ?>
No. Kelas Input Nilai
Harian P T S P A S
Input Nilai Input Nilai Input Nilai
0) : ?>

Ekstrakurikuler

$v) : ?>
$kls) : $indice = $ekstras[$k][$kls['nama_kelas']] == $siswae[$k][$kls['nama_kelas']] ? '' : ''; ?>
No. Kelas Input Nilai
Input Nilai
PK\\Scc members/guru/rapor/nilai/pas.phpnu[

Download Template
'uploadfile')); ?>

kkm_tunggal == "0" ? "MULTI" : "TUNGGAL"; $isi = $kkm->kkm; $d = 0; $dsd = $isi - 1; $c = $isi; $csd = floor($isi + (100 - $isi) / 3); $b = $csd + 1; $bsd = floor($b + (100 - $b) / 2); $a = $bsd + 1; $asd = 100; ?>
KKM Jenis KKM Interval Predikat Berdasarkan KKM Bobot Nilai PAS
kkm ?> 0 ~ : D : C : B ~ 100 : A bobot_pas ?> %
'uploadnilai')) ?>
'uploadpas')); ?>
PK\\8afu$members/guru/rapor/kenaikan/data.phpnu[

'; //var_dump($guru); //echo ''; $naik = 'Naik'; $tdkNaik = 'Tidak Naik'; if ($guru->level == '6' || $guru->level == '9' || $guru->level == '12') { $naik = 'Lulus'; $tdkNaik = 'Tidak Lulus'; } $naiks = ['1' => $naik, '0' => $tdkNaik]; ?>
No. N I S N N I S Nama Siswa Naik / Lulus
id_siswa ?> nisn ?> nis ?> nama ?> naik != null ? $siswa->naik : '', 'class="form-control form-control-sm naik"'); ?>
'formkenaikan')) ?>
PK\\dӈYYmembers/guru/rapor/kkm/data.phpnu[

0) : foreach ($mapel as $key => $mpl) : ?>
Kelas: 0) : foreach ($kelas[$key] as $k => $kls) : if ($kls['id_kelas'] != null) :?>
0) : ?>

Ekstrakurikuler

$eks) : ?>
Kelas: $kls) : if ($kls['id_kelas'] != null) :?>
PK\\yyTbb!members/guru/rapor/leger/data.phpnu[

Kelas nama_kelas ?>
kelompok === "MULOK") { array_push($arrMulok, $mapel); } else { array_push($arrMapel, $mapel); } } $arrMapel = array_filter($arrMapel); $arrMulok = array_filter($arrMulok); $mapel_ekstra = array_filter($mapel_ekstra); $ekstra_ekstra = []; if (count($mapel_ekstra) < 4) { for ($i = 0; $i < (4 - count($mapel_ekstra)); $i++) { $ekstra_ekstra[] = 'Ekstrakurikuler ' . (($i + 1) + count($mapel_ekstra)); } } //echo '
';
                        //var_dump($kelases);
                        //var_dump($absensi[1]['s']);
                        //var_dump($absensi[137]);
                        //echo '
'; $sizeAllMapel = (count($arrMapel) * 2) + (count($arrMulok) * 2); $widthColumns = '5,25,10'; for ($i = 0; $i < ($sizeAllMapel + 10); $i++) { $widthColumns .= ',5'; } $widthColumns .= ',20'; ?> 0) : ?> $me):?> id_mapel ?> id_mapel ?> id_siswa]; $text = 'Naik'; if ($state == '0') { $text = 'Tidak naik'; } ?> id_mapel ?> id_mapel ?> id_mapel ?> id_mapel ?> id_mapel ?> id_mapel ?> id_mapel ?> id_mapel ?>
No. Nama Peserta Didik Jenis
Penilaian
Mata Pelajaran Mulok Sikap Ekstrakurikuler Absensi
Naik/Tidak Naik
Keterangan
kode ?> kode ?>
Spiritual
Sosial
nama_ekstra ?>
S I A
KKM: id_mapel] != null ? $kkm[$mpl->id_mapel]->kkm : 0 ?> KKM: id_mapel] != null ? $kkm[$mpl->id_mapel]->kkm : 0 ?>
NP NK
nama ?>
nis ?>/nisn ?>
HPH id_siswa]->$id->p_rata_rata ?> id_siswa]->$id->k_rata_rata ?> id_siswa]->$id->p_rata_rata ?> id_siswa]->$id->k_rata_rata ?> id_siswa][1]['predikat']['predikat'] ?> id_siswa][2]['predikat']['predikat'] ?> id_siswa][$me->id_ekstra]->predikat ?> id_siswa]['s'] ?> id_siswa]['i'] ?> id_siswa]['a'] ?>
HPTS id_siswa]->$id == 0 ? '' : $nilai_pts[$siswa->id_siswa]->$id ?> id_siswa]->$id == 0 ? '' : $nilai_pts[$siswa->id_siswa]->$id ?>
HPAS id_siswa]->$id->nilai_pas ?> id_siswa]->$id->nilai_pas ?>
HPA id_siswa]->$id->nilai ?> id_siswa]->$id->k_rata_rata ?> id_siswa]->$id->nilai ?> id_siswa]->$id->k_rata_rata ?>
PRED id_siswa]->$id->predikat ?> id_siswa]->$id->k_predikat ?> id_siswa]->$id->predikat ?> id_siswa]->$id->k_predikat ?>
PK\\?F%F% members/guru/rapor/cetak/pts.phpnu[ ["", "SEKOLAH DASAR (SD)", "MADRASAH IBTIDAIYAH (MI)" ], "2" => ["", "SEKOLAH MENENGAH PERTAMA (SMP)", "MADRASAH TSANAWIYAH (MTS)" ], "3" => ["", "SEKOLAH MENENGAH ATAS (SMA)", "MADRASAH ALIYAH (MA)", "SEKOLAH MENENGAH KEJURUAN (SMK)" ] ]; ?>

Siswa

Print Preview
PK\\U(zBzB"members/guru/rapor/cetak/akhir.phpnu[ ["", "SEKOLAH DASAR (SD)", "MADRASAH IBTIDAIYAH (MI)" ], "2" => ["", "SEKOLAH MENENGAH PERTAMA (SMP)", "MADRASAH TSANAWIYAH (MTS)" ], "3" => ["", "SEKOLAH MENENGAH ATAS (SMA)", "MADRASAH ALIYAH (MA)", "SEKOLAH MENENGAH KEJURUAN (SMK)" ] ]; ?>

Siswa

Preview
Hal. dari

PK\\zȰhh$members/guru/rapor/cetak/pts_old.phpnu[ ["", "SEKOLAH DASAR (SD)", "MADRASAH IBTIDAIYAH (MI)" ], "2" => ["", "SEKOLAH MENENGAH PERTAMA (SMP)", "MADRASAH TSANAWIYAH (MTS)" ], "3" => ["", "SEKOLAH MENENGAH ATAS (SMA)", "MADRASAH ALIYAH (MA)", "SEKOLAH MENENGAH KEJURUAN (SMK)" ] ]; ?>

Siswa

Print Preview
PK\\A%members/guru/rapor/cetak/akhir_mi.phpnu[ ["", "SEKOLAH DASAR (SD)", "MADRASAH IBTIDAIYAH (MI)" ], "2" => ["", "SEKOLAH MENENGAH PERTAMA (SMP)", "MADRASAH TSANAWIYAH (MTS)" ], "3" => ["", "SEKOLAH MENENGAH ATAS (SMA)", "MADRASAH ALIYAH (MA)", "SEKOLAH MENENGAH KEJURUAN (SMK)" ] ]; ?>

Siswa

Preview
Hal. dari

PK\\5AIAI#members/guru/rapor/catatan/data.phpnu[

nama_kelas ?>

PILIHAN DESKRIPSI CATATAN WALI KELAS
Opsi Edit Catatan dan Saran
kode ?> deskripsi ?>
Tidak Hadir Edit Peringatan Ketidakhadiran
rank ?> deskripsi ?>
'editdeskripsi')) ?>

INPUT CATATAN SISWA
'uploadnilai')) ?>
PK\\5A.&& members/guru/rapor/kikd/data.phpnu[

'editkikd')) ?> $mpl) : ?>
Kelas:
0) : foreach ($kelas[$key] as $k => $kls) : if ($kls['id_kelas'] != null) :?>
PK\\xHHH$members/guru/rapor/prestasi/data.phpnu[

nama_kelas ?>

PILIHAN DESKRIPSI PRESTASI SISWA
Ranking Edit Saran / Dorongan
rank ?> deskripsi ?>
'editdeskripsi')) ?>

INPUT CATATAN SISWA
'uploadnilai')) ?>
PK\\ZXXmembers/guru/rapor/dkn/data.phpnu[

Kelas nama_kelas ?>
kelompok === "MULOK") { array_push($arrMulok, $mapel); } else { array_push($arrMapel, $mapel); } } $arrMapel = array_filter($arrMapel); $arrMulok = array_filter($arrMulok); $mapel_ekstra = array_filter($mapel_ekstra); $ekstra_ekstra = []; if (count($mapel_ekstra) < 4) { for ($i = 0; $i < (4 - count($mapel_ekstra)); $i++) { $ekstra_ekstra[] = 'Ekstrakurukuler ' . (($i + 1) + count($mapel_ekstra)); } } //echo '
';
                        //var_dump($arrMapel);
                        //var_dump($absensi[1]['s']);
                        //var_dump($absensi[137]);
                        //echo '
'; $sizeAllMapel = (count($arrMapel) * 2) + (count($arrMulok) * 2); $widthColumns = '5,20,15,35,10'; for ($i = 0; $i < ($sizeAllMapel + 9); $i++) { $widthColumns .= ',5'; } $widthColumns .= ',15,10,15,15'; ?> 0) : ?> $me):?> id_mapel; $jmlNilai += isset($nilai[$siswa->id_siswa][$id]['nilai']) ? floatval($nilai[$siswa->id_siswa][$id]['nilai']) : 0; $jmlNilai += isset($nilai[$siswa->id_siswa][$id]['k_rata_rata']) ? floatval($nilai[$siswa->id_siswa][$id]['k_rata_rata']) : 0; ?> id_mapel; $rata_k = isset($nilai[$siswa->id_siswa]) && isset($nilai[$siswa->id_siswa][$id]) && isset($nilai[$siswa->id_siswa][$id]['k_rata_rata']) ? $nilai[$siswa->id_siswa][$id]['k_rata_rata'] : 0; $jmlNilai += isset($nilai[$siswa->id_siswa][$id]['nilai']) ? $nilai[$siswa->id_siswa][$id]['nilai'] : 0; $jmlNilai += is_numeric($rata_k) ? $rata_k : 0; ?> id_siswa]; $text = 'Naik'; if ($state == '0') { $text = 'Tidak naik'; } ?>
No. N I S N I S N Nama Peserta Didik Jenis
Kelamin
Mata Pelajaran Mulok Sikap Ekstrakurikuler Absensi Jml. Nilai Rank Naik/
Tidak Naik
Keterangan
kode ?> kode ?>
Spiritual
Sosial
nama_ekstra ?>
S I A
KKM: id_mapel] != null ? $kkm[$mpl->id_mapel]->kkm : 0 ?> KKM: id_mapel] != null ? $kkm[$mpl->id_mapel]->kkm : 0 ?>
NP NK
nis ?> nisn ?> nama ?> jenis_kelamin ?> id_siswa][$id]['nilai']) ? $nilai[$siswa->id_siswa][$id]['nilai'] : '' ?> id_siswa][$id]['k_rata_rata']) ? $nilai[$siswa->id_siswa][$id]['k_rata_rata'] : '' ?> id_siswa][$id]['nilai']) ? $nilai[$siswa->id_siswa][$id]['nilai'] : '' ?> id_siswa][$id]['k_rata_rata']) ? $nilai[$siswa->id_siswa][$id]['k_rata_rata'] : '' ?> id_siswa][1]['predikat']['predikat'] ?> id_siswa][2]['predikat']['predikat'] ?> id_siswa][$me->id_ekstra]->predikat ?> id_siswa]['s']) ? $absensi[$siswa->id_siswa]['s'] : '' ?> id_siswa]['i']) ? $absensi[$siswa->id_siswa]['i'] : '' ?> id_siswa]['a']) ? $absensi[$siswa->id_siswa]['a'] : '' ?> id_siswa]->ranking ?>
PK\\L(** members/guru/cbt/status/data.phpnu[

TOKEN
-- : -- : --
Mapel diampu

Sebagai Pengawas
Jadwal Ruang Sesi Aksi
tgl_mulai))) ?>
bank_kode . ' ('. $peng->kode_jenis.')' ?>
id_ruang]?> id_sesi]?>
PK\\hNdNd"members/guru/cbt/status/status.phpnu[

id_guru, $ids_pengawas) ? '' : 'd-none'; ?>
TOKEN
-- : -- : --

Info Ujian
Mapel
nama_mapel ?>
Guru
nama_guru ?>
Jenis Ujian
kode_jenis ?>
Jml. Soal
tampil_pg + $info->tampil_kompleks) + ($info->tampil_jodohkan + $info->tampil_isian) + $info->tampil_esai ?>
Pengawas
0) : foreach ($pengawas as $p) : ?> nama_guru ?>
Tidak diatur
  • Gunakan tombol Refresh untuk merefresh halaman
  • RESET WAKTU. Jika siswa logout sebelum selesai dan tidak melanjutkan sampai waktu ujian habis maka akan ditolak, jika ingin melanjutkan maka harus reset waktu.
  • Aksi RESET IZIN untuk mengizinkkan siswa mengerjakan ujian di perangkat berbeda.
  • Aksi PAKSA SELESAI untuk memaksa siswa menyelesaikan ujian.
  • Aksi ULANG untuk mengulang ujian siswa dari awal.
  • Terapkan Aksi untuk menerapkan aksi terpilih ke setiap siswa yang dipilih
0) : ?>
id_siswa; $durasis = json_decode(json_encode($durasi_siswa[$idSiswa])); $durasi = $durasis->dur != null ? $durasis->dur->lama_ujian : ' - -'; $logging = $durasis->log; $mulai = '- - : - -'; $selesai = '- - : - -'; $reset = null; $pattern = '/[- :]/'; foreach ($logging as $log) { if ($log->log_type === '1') { if ($log != null) { $reset = $log->reset; $t = preg_split($pattern, $log->log_time); $mulai = $t[3] . ':' . $t[4]; } } else { if ($log != null) { $ti = preg_split($pattern, $log->log_time); $selesai = $ti[3] . ':' . $ti[4]; } } } $belumUjian = $durasis->dur == null; $sudahSelesai = !$belumUjian && $durasis->dur->selesai != null; $loading = $belumUjian ? '' : ($sudahSelesai ? "" : ''); $disabledReset = !$sudahSelesai && $reset != null && $reset == '0' ? '' : 'disabled'; $disabledSelesai = !$sudahSelesai && !$belumUjian ? '' : 'disabled'; $disabledUlang = $belumUjian ? 'disabled' : ($sudahSelesai ? '' : 'disabled'); // jika ingin selalu aktif // $disabledReset = ''; // $disabledSelesai = ''; // $disabledUlang = ''; $sesi = $siswa[$i]->kode_sesi; $ruang = $siswa[$i]->kode_ruang; $kelas = $siswa[$i]->kode_kelas; ?>
No. No. Peserta Nama Kelas Ruang Sesi Status Reset
Waktu
Aksi
Mulai Durasi Reset
Izin
Paksa
Selesai
Ulang
nomor_peserta ?> nama ?> > > >

Tidak ada siswa yang tergabung dalam jadwal ujian ini
'reset')) ?> PK\\omembers/guru/cbt/token/data.phpnu[

TOKEN SAAT INI

token ?>

PK\\z members/guru/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\C(C(members/guru/wali/persiswa.phpnu[

Catatan Untuk nama ?>
0) : foreach ($catatan_siswa as $key => $value) : ?>
No. Tanggal Jenis Catatan Aksi
tgl ?> level] ?> text ?>
Belum ada catatan
PK\\members/guru/wali/kelas.phpnu[

0) : foreach ($siswas as $idx=>$siswa) : $kls = $siswa->nama_kelas != null ? ''.$siswa->nama_kelas.'' : ''; $status = $siswa->aktif == "0" ? '
Nonaktif
' : '
Aktif
'; ?>
No. Siswa NIS & NISN Username
Password
Status Aksi
User Image
nama?>
jenis_kelamin?>
nis?>
nisn?>
U: username?>
P: password?>

Tidak ada data siswa
PK\\vCmembers/guru/wali/edit.phpnu[foto; if (!file_exists(FCPATH . $siswa->foto)) { $fotoSiswa = str_replace('profiles', 'foto_siswa', $siswa->foto); } ?>
session->flashdata('updatesiswa') ?>

Detail Data Siswa

'siswa'), array('method' => 'edit', 'id_siswa' => $siswa->id_siswa)) ?>
name == 'jenis_kelamin'): ?>
name == 'kelas_awal'): ?>
req ?>>
Semua isian di segment ini harus diisi
name == 'agama'): ?>
name == 'status_keluarga'): ?>
"Anak Kandung", "2" => "Anak Tiri", "3" => "Anak Angkat"]; ?>
'updatelogin'), array('id_siswa' => $siswa->id_siswa)) ?> PK\\members/guru/wali/struktur.phpnu[

'create')) ?>

$value) : ?>
$value, 'id="' . $value . '" class="select2 form-control" data-placeholder="Pilih ' . $inputs[$key] . '" required' ); ?>
PK\\8080members/guru/wali/catatan.phpnu[

Catatan Untuk Semua Siswa

0) : foreach ($catatan_kelas as $key => $value) : $jenis = $value->level ?>
No. Tanggal Jenis Catatan Aksi
tgl ?> level] ?> text ?>
Belum ada catatan

Catatan Per-siswa

$value) :?>
No. NIS Nama Catatan
nis ?> nama ?>
PK\\Tggmembers/guru/profile.phpnu[

'formguru'), array('method' => 'edit', 'id_guru' => $guru->id_guru)); ?>
name == 'jenis_kelamin'): ?>
name == 'agama'): ?>
'updatelogin'), array('id_guru' => $guru->id_guru)) ?> PK\\z members/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\x(6?ggmembers/siswa/materi/view.phpnu[nilai != null && $logs->nilai != '0'; ?>
foto == null ? 'assets/img/guru.png' : $materi->foto; ?>
nama_guru ?>
nama_mapel ?>
Kelas nama_kelas ?>
Nilai
nilai : '' ?>
loadHTML($materi->isi_materi); $images = $dom->getElementsByTagName('img'); foreach ($images as $image) { $curSrc = $image->getAttribute('src'); if (strpos($curSrc, 'http') !== false) { $pathUpload = 'uploads'; $forReplace = explode($pathUpload, $pathUpload); $image->setAttribute('src', base_url() . $pathUpload . $forReplace[1]); } else { $image->setAttribute('src', base_url() . $curSrc); } } $isi_materi = $dom->saveHTML(); ?>

judul_materi ?>

File Pendukung
    file ?? ''); foreach ($files as $file) : ?>
  • " data-target="#view-modal" data-toggle="modal" data-src="" data-type=""/>
  • ')">
  • ">
  • ">
  • ">
  • ">
'formhasil')) ?>
Tambahkan File
'formfile')) ?>
Memuat file ...
PK\\T2jjmembers/siswa/materi/data.phpnu[
load->view('members/siswa/templates/top'); ?>
istirahat)) { $ist = json_decode(json_encode($kbm->istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; } } ?>
HARI INI
kbm_jam_mulai); $jamSampai = new DateTime($kbm->kbm_jam_mulai); if (count($materi) > 0) : for ($i = 0; $i < $kbm->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; ?>
add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?>
JAM KE
format('H:i') ?> s/d format('H:i') ?>



ISTIRAHAT
add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); if (isset($materi[$jamke]->id_materi)) : $tkelas = ''; $arrkelas = unserialize($materi[$jamke]->materi_kelas ?? ''); foreach ($arrkelas as $k => $kls) { if ($k > 0) { $tkelas .= ', '; } if (isset($kelas[$kls])) { $tkelas .= $kelas[$kls]; } } ?>
JAM KE
format('H:i') ?> s/d format('H:i') ?>

kode_materi ?>

nama_mapel ?>
nama_guru ?>
Kelas:

id_kjm . '/' . $jamke) : 'javascript:void(0)'; $status = ''; if (count($log) > 0) : if (isset($log[$materi[$jamke]->id_kjm]) && $log[$materi[$jamke]->id_kjm]->finish_time != null) : if ($log[$materi[$jamke]->id_kjm]->nilai != '0') :?> SELESAI >ULANGI >Belum Selesai >BUKA
JAM KE
format('H:i') ?> s/d format('H:i') ?>


nama_mapel ?>

Tidak ada

add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); endif; ?>
TERDAHULU
kbm_jam_mulai); $jamSampai = new DateTime($kbm->kbm_jam_mulai); foreach ($materis as $tg => $mat) : if ($tg != $hari) : $show = $tg == $today ? 'show active' : ''; $stg = explode('-', $tg ?? ''); $y = $stg[0]; $m = $stg[1]; $d = $stg[2]; $jamMulai->setDate($y, $m, $d); $jamSampai->setDate($y, $m, $d); ?>
kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); $disabled = new DateTime('NOW') < $jamMulai ? 'btn-disabled' : ''; if (isset($mat[$jamke]->id_kjm)) : $href = $disabled == '' ? base_url() . 'siswa/buka' . $subjudul . '/' . $mat[$jamke]->id_kjm . '/' . $jamke : 'javascript:void(0)'; $status = ''; if (count($log) > 0) { if (isset($log[$mat[$jamke]->id_kjm]) && $log[$mat[$jamke]->id_kjm]->finish_time != null) { // $status = 'Selesai'; //======== if ($log[$mat[$jamke]->id_kjm]->nilai == '0') { $status = 'Ulangi'; } else { $status = 'Selesai'; } //========= } else { $status = 'Belum Selesai'; } } else { $status = 'Belum Dikerjakan'; } ?> add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); endif; ?>
Jam Ke Mata Pelajaran Status

format('H:i') ?> s/d format('H:i') ?>
ISTIRAHAT

format('H:i') ?> s/d format('H:i') ?>
nama_mapel ?> kode_materi ?>
judul_materi ?>

format('H:i') ?> s/d format('H:i') ?>
nama_mapel : '' ?> - -
PK\\NzXmembers/siswa/dashboard.phpnu[
load->view('members/siswa/templates/top'); ?>
MENU UTAMA
INFO/PENGUMUMAN


Loading....

Muat Timeline lainnya ...
JADWAL HARI INI
0): $no = 1; $arrIst = []; if (isset($kbms->istirahat)) { foreach ($kbms->istirahat as $istirahat) { array_push($arrIst, $istirahat['ist']); $arrDur[$istirahat['ist']] = $istirahat['dur']; } } $active = $no == 1 ? 'active' : ''; ?>
kbm_jam_mulai); $jamSampai = new DateTime($kbms->kbm_jam_mulai); for ($i = 0; $i < $kbms->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbms->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $kbms->kbm_jam_pel . 'M')); endif; endfor; ?>
format('H:i') ?> - format('H:i') ?> ISTIRAHAT
format('H:i') ?> - format('H:i') ?> kode != null ? $jadwals[$jamke]->kode : '--' ?>

Tidak ada jadwal hari ini

Jadwal untuk kelas nama_kelas ?> belum dibuat

PK\\c6L6Lmembers/siswa/nilai/data.phpnu[
load->view('members/siswa/templates/top'); ?>
NILAI HASIL MATERI
0):?>
NO Materi Tanggal Nilai
kode ?>
kode_materi ?>
judul_materi ?>
jadwal_materi))) ?> nilai ?>

Belum ada nilai.

NILAI HASIL TUGAS
0): ?>
NO Tugas Tanggal Nilai
kode ?>
kode_materi ?>
judul_materi ?>
jadwal_materi))) ?> nilai ?>

Belum ada nilai.

NILAI HASIL ULANGAN/UJIAN
'; //var_dump($kelass); //var_dump($jadwal); //echo ''; ?> 0) : $no = 1; foreach ($jadwal as $j) : $hanya_pg = $j->tampil_pg > 0 && $j->tampil_kompleks == 0 && $j->tampil_jodohkan == 0 && $j->tampil_isian == 0 && $j->tampil_esai == 0; $total = !$hanya_pg && isset($skor[$j->id_jadwal]->dikoreksi) && $skor[$j->id_jadwal]->dikoreksi == 0 ? '*' : ($j->hasil_tampil == '0' ? '**' : $skor[$j->id_jadwal]->skor_total); ?>
NO Jenis Penilaian Mata Pelajaran Kode Penilaian Nilai Detail
nama_jenis ?>
tgl_mulai))) ?>
kode ?> bank_kode ?>

Catatan:
(-) Belum dikerjakan
(*) Menunggu hasil koreksi
(**) Hubungi Guru Pengampu jika ingin mengetahui nilai
PK\\4Pm""members/siswa/templates/top.phpnu[
nama ?>
nis ?> nama_kelas ?>
PK\\+ "members/siswa/templates/navbar.phpnu[ PK\\ XX"members/siswa/templates/footer.phpnu[
Copyright © 2014-2019 AdminLTE.io. All rights reserved.
Version 3.0.5
PK\\5@"""members/siswa/templates/header.phpnu[ <?= $judul ?> logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?> uri->segment(1); $cbt = $this->uri->segment(2); $exludes = ["dashboard", "penilaian"]; $dnone = in_array($dash, $exludes) || in_array($cbt, $exludes) ? 'invisible' : ''; $display_clock = $this->uri->segment(2) == "penilaian" ? '' : 'd-none'; $display_logout = $this->uri->segment(2) == "penilaian" ? 'd-none' : ''; ?>
PK\\ΙpD"D"members/siswa/jadwal/data.phpnu[istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); } ?>
load->view('members/siswa/templates/top'); ?>
Jadwal Pelajaran Kelas nama_kelas ?>
Tahun Pelajaran tahun ?> Semester smt ?>
jam_ke][] = [ 'id_tp' => $j->id_tp, 'id_smt' => $j->id_smt, 'id_kelas' => $j->id_kelas, 'id_hari' => $j->id_hari, 'jam_ke' => $j->jam_ke, 'id_mapel' => $j->id_mapel, 'kode' => $j->kode ]; } } $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; }; ?>
kbm_jam_mulai); $jamSampai = new DateTime($jadwal_kbm->kbm_jam_mulai); for ($i = 0; $i < $jadwal_kbm->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); endif; endfor; ?>
JAM SEN SEL RAB KAM JUM SAB
format('H:i') ?> - format('H:i') ?> ISTIRAHAT
format('H:i') ?> - format('H:i') ?>
ada)) : ?>
PK\\㽬ßßmembers/siswa/cbt/ujian.phpnu[
GarudaCBT C B T A p p l i c a t i o n
nama ?>
nis ?>
nama_kelas ?>
NOMOR:
'jawab')) ?>
MEMUAT SOAL
'up')) ?> PK\\ssmembers/siswa/cbt/data.phpnu[id_guru] = $g->nama_guru; } $jam_pertama = null; $jadwal_selesai = []; ?>
load->view('members/siswa/templates/top'); ?>
INFO ULANGAN/UJIAN
'; //var_dump($elapsed); //var_dump(strtotime($durasiMulai->format('H:i'))); //echo ''; if ($cbt_info == null) : ?>
Tidak ada jadwal penilaian

nama ?>

    no_peserta->nomor_peserta ?? '', $cbt_info->nama_ruang ?? '', $cbt_info->nama_sesi ?? '', substr($cbt_info->waktu_mulai, 0, -3), substr($cbt_info->waktu_akhir, 0, -3)]; foreach ($arrTitle as $key => $title) : if ($arrSub[$key] == null) array_push($cbt_setting, $title) ?>
** INFORMASI PENTING **
Selama melaksanakan ULANGAN/UJIAN Siswa DILARANG:
  • Meninggalkan ruang ujian tanpa izin pengawas
  • Logout/Keluar dari aplikasi tanpa izin dari pengawas
  • Saling memberitahukan jawaban sesama peserta
  • Membawa makanan dan minuman
  • Membawa handphone ke ruangan ujian
JADWAL PENILAIAN HARI INI
0) : ?>
Tidak ada jadwal penilaian.Tidak bisa mengerjakan ulangan/ujian.
Hubungi Proktor/Admin
sesi_id) ? $cbt_info->sesi_id : $cbt_info->id_sesi); if (isset($cbt_jadwal[date('Y-m-d')]) && count($cbt_jadwal[date('Y-m-d')]) > 0) : foreach ($cbt_jadwal[date('Y-m-d')] as $key => $jadwal) : $kk = unserialize($jadwal->bank_kelas ?? ''); $arrKelasCbt = []; foreach ($kk as $k) { array_push($arrKelasCbt, $k['kelas_id']); } $startDay = strtotime($jadwal->tgl_mulai); $endDay = strtotime($jadwal->tgl_selesai); $today = strtotime(date('Y-m-d')); //echo 'skrg='.$today . ' start=' . $startDay . ' end=' . $endDay; $hariMulai = new DateTime($jadwal->tgl_mulai); $hariSampai = new DateTime($jadwal->tgl_selesai); $sesiMulai = new DateTime($sesi[$jamSesi]['mulai']); $sesiSampai = new DateTime($sesi[$jamSesi]['akhir']); $now = strtotime(date('H:i')); $durasi = $elapsed[$jadwal->id_jadwal]; $jadwal_selesai[$jadwal->tgl_mulai][$jadwal->jam_ke] = $durasi != null ? $durasi->status == '2' : false; if ($durasi != null) { $selesai = $durasi->selesai != null; $lanjutkan = $durasi->lama_ujian != null; $reset = $durasi->reset; if ($lanjutkan != null && !$selesai) $bg = 'bg-gradient-warning'; elseif ($selesai) $bg = 'bg-gradient-success'; else { $bg = 'bg-gradient-danger'; } } else { $selesai = false; $lanjutkan = false; $reset = 0; $bg = 'bg-gradient-danger'; } $jam_ke = $jadwal->jam_ke == '0' ? '1' : $jadwal->jam_ke; ?>
Jam ke:
durasi_ujian ?> mnt
nama_mapel ?>
nama_jenis ?>

$endDay) : ?> format('H:i'))) : ?> strtotime($sesiSampai->format('H:i'))) : ?> tgl_mulai][$jadwal->jam_ke - 1]) && $jadwal_selesai[$jadwal->tgl_mulai][$jadwal->jam_ke - 1] == false) : ?>
Tidak ada jadwal penilaian hari ini.
JADWAL PENILAIAN SEBELUMNYA
$jadwals) : if ($tgl != date('Y-m-d')) :?> $jadwal) : $jam_ke = $jadwal->jam_ke == '0' ? '1' : $jadwal->jam_ke; $kk = unserialize($jadwal->bank_kelas ?? ''); $arrKelasCbt = []; foreach ($kk as $k) { array_push($arrKelasCbt, $k['kelas_id']); } $startDay = strtotime($jadwal->tgl_mulai); $endDay = strtotime($jadwal->tgl_selesai); $today = strtotime(date('Y-m-d')); $hariMulai = new DateTime($jadwal->tgl_mulai); $hariSampai = new DateTime($jadwal->tgl_selesai); $sesiMulai = new DateTime($sesi[$jamSesi]['mulai']); $sesiSampai = new DateTime($sesi[$jamSesi]['akhir']); $now = strtotime(date('H:i')); $durasi = $elapsed[$jadwal->id_jadwal]; $jadwal_selesai[$jadwal->tgl_mulai][$jadwal->jam_ke] = $durasi != null ? $durasi->status == '2' : false; if ($durasi != null) { $selesai = $durasi->selesai != null; $lanjutkan = $durasi->lama_ujian != null; $reset = $durasi->reset; if ($lanjutkan != null && !$selesai) $bg = 'btn-warning'; elseif ($selesai) $bg = 'btn-success'; else { $bg = 'btn-danger'; } } else { $selesai = false; $lanjutkan = false; $reset = 0; $bg = 'btn-danger'; } $status = ''; if (!$lanjutkan && $reset == 0 && !$selesai) { if ($today < $startDay) { $status = ''; } elseif ($today > $endDay) { $status = ''; } else { if ($now < strtotime($sesiMulai->format('H:i'))) { $status = ''; } elseif ($now > strtotime($sesiSampai->format('H:i'))) { $status = ''; } else { if (isset($jadwal_selesai[$jadwal->tgl_mulai][$jadwal->jam_ke - 1]) && $jadwal_selesai[$jadwal->tgl_mulai][$jadwal->jam_ke - 1] == false) { $status = ''; } else { $status = ''; } } } } elseif ($lanjutkan && !$selesai) { $status = ''; } else { $status = ''; } ?>
Jam ke Mapel Jenis Penilaian Status

durasi_ujian ?> mnt
nama_mapel ?>
nama_jenis ?>
nama_jenis ?>
PK\\O00 members/siswa/cbt/konfirmasi.phpnu[
load->view('members/siswa/templates/top'); ?>

KONFIRMASI

kode_jenis . ' | ' . $bank->tahun . ' | ' . $bank->smt ?>

bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ($j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } ?> 'konfir')) ?>
  • Mata Pelajaran nama_mapel ?>
  • Kelas
  • Durasi Waktu durasi_ujian ?> Menit
  • Jumlah Soal tampil_pg + $bank->tampil_kompleks + $bank->tampil_jodohkan + $bank->tampil_isian + $bank->tampil_esai ?>
  • token === '1') : ?>
  • Token
Pengawas Ujian:
  • nama_guru ?>

WARNING..!!

Ujian tidak bisa dilanjutkan
hubungi proktor
Refresh halaman ini jika sudah diizinkan

WARNING..!!

Browser yang digunakan tidak mendukung
silahkan gunakan browser lain dengan versi terbaru
PK\\嶝9>>members/siswa/tugas/view.phpnu[file != null ? unserialize($log_selesai->file ?? '') : []; ?>
foto == null ? 'assets/img/guru.png' : $tugas->foto; ?>
nama_guru ?>
nama_mapel ?>
Kelas nama_kelas ?>

judul_materi ?>

isi_materi ?>
'formhasil')) ?>
'formfile')) ?>
Tambahkan File
Memuat file ...
PK\\7SQQmembers/siswa/tugas/data.phpnu[
load->view('members/siswa/templates/top'); ?>
istirahat)) { $ist = json_decode(json_encode($kbm->istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; } } ?>
TUGAS HARI INI
kbm_jam_mulai); $jamSampai = new DateTime($kbm->kbm_jam_mulai); if (count($tugas) > 0) : for ($i = 0; $i < $kbm->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; ?>
add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?>
JAM KE
format('H:i') ?> s/d format('H:i') ?>



ISTIRAHAT
add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); if (isset($tugas[$jamke]->id_materi)) : $tkelas = ''; $arrkelas = unserialize($tugas[$jamke]->materi_kelas ?? ''); foreach ($arrkelas as $k => $kls) { if ($k > 0) { $tkelas .= ', '; } $tkelas .= $kelas[$kls]; } ?>
JAM KE
format('H:i') ?> s/d format('H:i') ?>

kode_materi ?>

nama_mapel ?>
nama_guru ?>
Kelas:

BUKA TUGAS
JAM KE
format('H:i') ?> s/d format('H:i') ?>


nama_mapel ?>

Tidak ada tugas

add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); endif; ?>
Belum ada jadwal pelajaran
TUGAS SEMINGGU
kbm_jam_mulai); $jamSampai = new DateTime($kbm->kbm_jam_mulai); foreach ($tugass as $tg => $mat) : $show = $tg == $today ? 'show active' : ''; ?>
'; //var_dump($logs[$tg]); //echo ''; //$log = $logs[$tg]; ?> $mtr) : ?> add(new DateInterval('PT' . $arrDur[$jam] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jam] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); if (isset($tugas[$jamke]->id_materi)) : ?> id_kjm)) : $status = ''; //var_dump($log[$mtr->id_kjm]); if (count($log) > 0) { if (isset($log[$mtr->id_kjm]) && $log[$mtr->id_kjm]->finish_time != null) { $status = 'Selesai'; } else { $status = 'Belum Selesai'; } } else { $status = 'Belum Dikerjakan'; } ?> add(new DateInterval('PT' . $kbm->kbm_jam_pel . 'M')); endif; ?>
Jam Ke Mata Pelajaran Tugas Status

format('H:i') ?> s/d format('H:i') ?>
ISTIRAHAT

format('H:i') ?> s/d format('H:i') ?>
nama_mapel ?> kode_materi ?>
judul_materi ?>
nama_mapel ?> - -
PK\\z members/siswa/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\6{5{5members/siswa/catatan/data.phpnu[
load->view('members/siswa/templates/top'); ?>
0) : ?>
Keteraangan:
: saran
: teguran
: peringatan
: sangsi
PK\\P&GPGPmembers/siswa/absensi/data.phpnu[y) { $result .= $interval->format("%y tahun "); } if ($interval->m) { $result .= $interval->format("%m bulan "); } if ($interval->d) { $result .= $interval->format("%d hari "); } if ($interval->h) { $result .= $interval->format("%h jam "); } if ($interval->i) { $result .= $interval->format("%i menit "); } //if ($interval->s) { $result .= $interval->format("%s seconds "); } return $result; } $arrHari = ['Ming', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab', 'Ming']; $arrBulan = ['', 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember']; ?>
load->view('members/siswa/templates/top'); ?>
Kehadiran Hari Ini
0) : foreach ($jadwal as $k) { $arrRes[$k->jam_ke] = (object)['mapel' => $k->nama_mapel, 'jam_ke' => $k->jam_ke, 'id_mapel' => $k->id_mapel, 'kode' => $k->kode]; } $arrIst = []; $arrDur = []; foreach ($kbm->istirahat as $is) { array_push($arrIst, $is['ist']); $arrDur[$is['ist']] = $is['dur']; } $statusMateri = isset($sebulan['log'][1]) && isset($sebulan['log'][1][$today]) ? $sebulan['log'][1][$today] : []; $statusTugas = isset($sebulan['log'][2]) && isset($sebulan['log'][2][$today]) ? $sebulan['log'][2][$today] : []; ?> kbm_jam_pel; $waktu = $kbm->kbm_jam_mulai; $jmlMapel = $kbm->kbm_jml_mapel_hari; $jamMulai = new DateTime($waktu); $jamSampai = new DateTime($waktu); for ($i = 0; $i < $jmlMapel; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $jamMapel . 'M')); $absenMateri = isset($statusMateri[$jamke]) ? date('H:i', strtotime($statusMateri[$jamke]->log_time)) : '-'; $absenTugas = isset($statusTugas[$jamke]) ? date('H:i', strtotime($statusTugas[$jamke]->log_time)) : '-'; ?> add(new DateInterval('PT' . $jamMapel . 'M')); endif; endfor; ?>
Jam
Ke
Waktu Mata Pelajaran Kehadiran
Materi Tugas
format('H:i') ?> - format('H:i') ?> ISTIRAHAT
format('H:i') ?> - format('H:i') ?> mapel ?>
Detail Kehadiran Bulan
kbm_jam_pel; $waktu = $kbm->kbm_jam_mulai; $jmlMapel = $kbm->kbm_jml_mapel_hari; $materi = $sebulan['materis'][$tgl]; $statusMateri = isset($sebulan['log'][1]) && isset($sebulan['log'][1][$tgl_skrg]) ? $sebulan['log'][1][$tgl_skrg] : []; $statusTugas = isset($sebulan['log'][2]) && isset($sebulan['log'][2][$tgl_skrg]) ? $sebulan['log'][2][$tgl_skrg] : []; $jdwl = isset($jadwals[$hari]) ? $jadwals[$hari] : []; $jamMulai = new DateTime($waktu); $jamSampai = new DateTime($waktu); if (count($jdwl) > 0) : $arrIst = []; $arrDur = []; foreach ($kbm->istirahat as $is) { array_push($arrIst, $is['ist']); $arrDur[$is['ist']] = $is['dur']; } $jamMapel = $kbm->kbm_jam_pel; $waktu = $kbm->kbm_jam_mulai; $jmlMapel = $kbm->kbm_jml_mapel_hari; for ($i = 0; $i < $jmlMapel; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $jamMapel . 'M')); $adaMateri = isset($materi[$jdwl[$jamke]->id_mapel]) && isset($materi[$jdwl[$jamke]->id_mapel][$jamke]) && isset($materi[$jdwl[$jamke]->id_mapel][$jamke][1]); $adaTugas = isset($materi[$jdwl[$jamke]->id_mapel]) && isset($materi[$jdwl[$jamke]->id_mapel][$jamke]) && isset($materi[$jdwl[$jamke]->id_mapel][$jamke][2]); $bgMateri = $adaMateri ? '' : 'bg-gray-light'; $bgTugas = $adaTugas ? '' : 'bg-gray-light'; $absenMateri = isset($statusMateri[$jamke]) ? 'Hadir' //$statusMateri[$jamke]->log_time : ($adaMateri ? '-' : ''); $absenTugas = isset($statusTugas[$jamke]) ? 'Hadir' //$statusTugas[$jamke]->log_time : ($adaTugas ? '-' : ''); $m_ket = ''; if ($adaMateri) { if ($absenMateri != '' && $absenMateri != '-') { $str1 = $materi[$jdwl[$jamke]->id_mapel][$jamke][1]->jadwal_materi . ' ' . $jamSampai->format('H:i:s'); $date1 = new DateTime($str1); $str2 = $statusMateri[$jamke]->log_time; $date2 = new DateTime($statusMateri[$jamke]->log_time); $diff = $date1->diff($date2); if (strtotime($str1) < strtotime($str2)) $m_ket = 'Terlambat ' . format_interval($diff); } else { $m_ket = 'Tidak hadir'; } } $t_ket = ''; if ($adaTugas) { if ($absenTugas != '' && $absenTugas != '-') { $str1 = $materi[$jdwl[$jamke]->id_mapel][$jamke][2]->jadwal_materi . ' ' . $jamSampai->format('H:i:s'); $date1 = new DateTime($str1); $str2 = $statusTugas[$jamke]->log_time; $date2 = new DateTime($statusTugas[$jamke]->log_time); $diff = $date1->diff($date2); if (strtotime($str1) < strtotime($str2)) $t_ket = 'Terlambat ' . format_interval($diff); } else { $t_ket = 'Tidak hadir'; } } ?> add(new DateInterval('PT' . $jamMapel . 'M')); endif; endfor; endif; endif; endforeach; ?>
Jam
ke
Mata Pelajaran Kehadiran
Materi Tugas
Status Keterangan Status Keterangan
ISTIRAHAT
nama_mapel ?>
format('H:i') ?> - format('H:i') ?>
PK\\pengumuman/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\;HССpengumuman/data.phpnu[
ion_auth->is_admin()) : $col = 'col-md-7'; ?>
Running Text
text : ''; ?>
'formrunningtext')) ?>
'formpengumuman')) ?>
Tulis Info/Pengumuman

Kepada:

ion_auth->is_admin()): ?>
'; //var_dump($posts); //echo ''; foreach ($pengumumans as $pengumuman) : ?>
dari == '0') : ?> A
Admin
tanggal))) ?>
nama_guru ?>
tanggal ?>
text ?>

jml == '0') : ?>
Tidak ada komentar
Muat komentar lainnya ...
PK\\ M>Npengumuman/add.phpnu[

Catatan Untuk nama ?>
0) : foreach ($catatan_siswa as $key => $value) : ?>
No. Tanggal Catatan
tgl ?> text ?>
Belum ada catatan
PK\\Hkelas/materi/data1.phpnu[ $m) { if ($m->id_tp != $tp_active->tahun && $m->id_smt != $smt_active->id_smt) { array_push($all_materi, $m); unset($materi[$k]); } } ?>

'; //var_dump($total); //var_dump(count($all_materi)); //echo '
'; //var_dump($kelas_materi); //var_dump($materi); //echo ''; ?>
ion_auth->is_admin() ? '' : 'd-none'; $left = $this->ion_auth->is_admin() ? 'text-right' : 'text-left'; $btnNone = count($materi) > 0 ? '' : 'd-none'; ?>
0) : foreach ($materi as $key => $value) : $arr = unserialize($value->materi_kelas ?? ''); array_push($arrIds, $value->id_materi); ?>
kode ?>
nama_guru ?>
  • judul_materi ?>
  • $v) : ?>
    Kelas Jadwal Aksi
    id_materi][$v]) ? $kelas_materi[$value->id_materi][$v] : '-' ?> id_materi][$v]) ? $jadwal_materi[$value->id_materi][$v] : 'Belum diatur' ?> Edit Jadwal
  • Dibuat created_on)) ?>
    Diupdate updated_on)) ?>
  • status == '1' ? 'Aktif' : 'Non Aktif'; $btn_bg = $value->status == '1' ? 'bg-warning' : 'bg-success'; $btn_txt = $value->status == '1' ? 'Nonaktifkan' : 'Aktifkan'; ?>
    Status
  • File
    file ?? ''); if ($att !== false) { $dataFileAttach = unserialize($value->file ?? ''); } else { if ($value->file != null) { $file = $value->file; if (strpos($file, 'http') == false) { $file = base_url('uploads/materi/') . $value->file; } $src_file = [ 'src' => $file, 'size' => '', 'type' => mime_content_type(str_replace(base_url(), '', $file)), 'name' => $value->file ]; array_push($dataFileAttach, $src_file); } } //$dataFileAttach = unserialize($value->file); foreach ($dataFileAttach as $f) : $icon = 'fa-file'; $arrFile = ['jpg', 'jpeg', 'png', 'gif']; if (strpos(strtolower($f['src'] ?? ''), 'doc') || strpos(strtolower($f['src'] ?? ''), 'docx')) { $icon = 'fa-file-word-o text-primary'; } elseif (strpos(strtolower($f['src'] ?? ''), 'xls') || strpos(strtolower($f['src'] ?? ''), 'xlsx')) { $icon = 'fa-file-excel-o text-success'; } elseif (strpos(strtolower($f['src'] ?? ''), 'png') || strpos(strtolower($f['src'] ?? ''), 'jpg') || strpos(strtolower($f['src'] ?? ''), 'jpeg')) { $icon = 'fa-file-picture-o text-orange'; } elseif (strpos(strtolower($f['src'] ?? ''), 'pdf')) { $icon = 'fa-file-pdf-o text-danger'; } elseif (strpos(strtolower($f['src'] ?? ''), 'mp4')) { $icon = 'fa-file-video-o text-fuchsia'; } ?>
'up')) ?> PK\\ھٚٚkelas/materi/data.phpnu[ $m) { if ($m->smt == $smt_active->smt && $m->tahun == $tp_active->tahun) { array_push($curr_materi, $m); //unset($materi[$k]); } else { array_push($all_materi, $m); //unset($materi[$k]); } } ?>

$vm) { foreach ($vm as $kk => $vk) { $disabledDay[$km][$kk] = $days; foreach ($vk as $ih) { unset($disabledDay[$km][$kk][$ih->id_hari]); } } } ?>
ion_auth->is_admin() ? '' : 'd-none'; $left = $this->ion_auth->is_admin() ? 'text-right' : 'text-left'; $btnNone = count($curr_materi) > 0 ? '' : 'd-none'; ?>
0) :?>
$value) : $arr = unserialize($value->materi_kelas ?? ''); $arrIds[] = $value->id_materi; $rows = count($arr) > 1 ? count($arr) : '1'; ?> status == '1' ? 'Aktif' : 'Non Aktif'; $btn_bg = $value->status == '1' ? 'bg-success' : 'bg-warning'; ?>
No. Guru
Mapel
Tanggal Status Aksi
Kode Judul Kelas
nama_guru ?>
kode ?>
kode_materi ?> judul_materi ?> id_materi]) && isset($kelas_materi[$value->id_materi][$arr[0]]) ? $kelas_materi[$value->id_materi][$arr[0]] : '' ?> id_materi][$arr[0]])) { if (count($jadwal_materi[$value->id_materi][$arr[0]]) > 0) { foreach ($jadwal_materi[$value->id_materi][$arr[0]] as $jtgl) { $disabledBtn = $jtgl->jml_siswa == '0' ? '' : 'disabled'; $disableDates[] = $jtgl->jadwal_materi; $sisa = strlen($jtgl->id_kjm ?? '') - (strlen($jtgl->id_kelas ?? '') + 10); $len = $sisa === 3 ? 2 : 1; $jam = substr($jtgl->id_kjm, strlen($jtgl->id_kjm ?? '') - $sisa, $len); $ctgl = singkat_tanggal(date('d M Y', strtotime($jtgl->jadwal_materi))); $arrtgl .= '
' . $ctgl . ' jam:' . $jam . '
'; } } } ?>
id_materi]) && isset($kelas_materi[$value->id_materi][$arr[$k]]) ? $kelas_materi[$value->id_materi][$arr[$k]] : '' ?> id_materi][$arr[$k]])) { if (count($jadwal_materi[$value->id_materi][$arr[$k]]) > 0) { foreach ($jadwal_materi[$value->id_materi][$arr[$k]] as $jtgl) { $disabledBtn = $jtgl->jml_siswa == '0' ? '' : 'disabled'; $disableDates[] = $jtgl->jadwal_materi; $ctgl = singkat_tanggal(date('d M Y', strtotime($jtgl->jadwal_materi))); $arrtgl .= '
' . $ctgl . '
'; } } } ?>
'up')) ?> PK\\4iikelas/materi/add.phpnu[materi_kelas ?? ''); $dataFileAttach = []; $att = @unserialize($materi->file ?? ''); if ($att !== false) { $dataFileAttach = unserialize($materi->file ?? ''); } else { if ($materi->file != null) { $file = $materi->file; if (strpos($file, 'http') == false) { $file = base_url('uploads/materi/') . $materi->file; } $src_file = [ 'src' => $file, 'size' => '', 'type' => mime_content_type(str_replace(base_url(), '', $file)), 'name' => $materi->file ]; array_push($dataFileAttach, $src_file); } } if (empty($kelas_pilih)) { $arrKelasSelected[] = [ 'mapel' => '0', 'kelas' => '0' ]; } else { foreach ($kelas_pilih as $m) { $arrKelasSelected[] = [ 'mapel' => $materi->id_mapel, 'kelas' => $m ]; } } function formatBytes($bytes, $precision = 2) { if ($bytes >= 1073741824) { $bytes = number_format($bytes / 1073741824, 2) . ' GB'; } elseif ($bytes >= 1048576) { $bytes = number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { $bytes = number_format($bytes / 1024, 2) . ' KB'; } elseif ($bytes > 1) { $bytes = $bytes . ' bytes'; } elseif ($bytes == 1) { $bytes = $bytes . ' byte'; } else { $bytes = '0 bytes'; } return $bytes; } // edit ukaran file jika diperlukan $max_size = 2048; // KB ?>

'formmateri')) ?>
File Pendukung
'formfile')) ?>
Memuat file ...
'csrf')) ?> PK\\8ppkelas/absenbulanan/data.phpnu[

'formselect')) ?>
$row) { $thn = explode("/", $row->tahun ?? ''); $ret [$thn[0]] = $thn[0]; $ret [$thn[1]] = $thn[1]; } echo form_dropdown( 'tahun', $ret, date('Y'), 'id="opsi-tahun" class="form-control"' ); ?>

PK\\Y%W%Wkelas/nilai/data.phpnu[

Reload
'; //echo json_encode($num_day, JSON_PRETTY_PRINT); //var_dump($day); //var_dump($num_day); //echo '
'; //echo json_encode($kbm, JSON_PRETTY_PRINT); //var_dump($kbm); //echo ''; ?>
Mapel
Kelas
Tahun
Semester


PK\\ƞ&[&[kelas/jadwal/data.phpnu[istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); $jmlMapelPerHari = $jadwal_kbm->kbm_jml_mapel_hari; } else { $jmlMapelPerHari = 0; } ?>

Pilih Kelas:
0) : foreach ($kelas as $key => $value) :?>

'; //var_dump($mapels); //echo ''; foreach ($jadwal_mapel as $k) { foreach ($k['jadwal'] as $j) { $arrRes[$j->jam_ke][$j->id_hari] = [ 'id_tp' => $j->id_tp, 'id_smt' => $j->id_smt, 'id_kelas' => $j->id_kelas, 'id_hari' => $j->id_hari, 'jam_ke' => $j->jam_ke, 'id_mapel' => $j->id_mapel, 'kode' => $j->kode ]; } } $arr_id_hari = ['1', '2', '3', '4', '5', '6']; $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; }; if (isset($jadwal_kbm->ada)) : ?>
'setjadwal')); ?>
Durasi Mapel
kbm_jam_pel, 'id="bank-id" class="form-control" required' ); ?>
Jam Mulai
Jumlah Mapel
Jml. Istirahat

ada)) : ?>
'setmapel')); ?>
kbm_jam_mulai); $jamSampai = new DateTime($jadwal_kbm->kbm_jam_mulai); for ($i = 0; $i < $jadwal_kbm->kbm_jml_mapel_hari; $i++) : $jamke = $i + 1; if (in_array($jamke, $arrIst)) : $jamSampai->add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else : $jamSampai->add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); endif; endfor; ?>
WAKTU SENIN SELASA RABU KAMIS JUM'AT SABTU
format('H:i') ?> - format('H:i') ?> IS TI RA H A T
format('H:i') ?> - format('H:i') ?>
PK\\xۄwwkelas/materijadwal/data.phpnu[ 51) { // It's the last week of the previos year. $weekOfYear = 0; } return $weekOfYear; } function weeksOfMonth($date) { $week = date('W', strtotime($date)); // note that ISO weeks start on Monday $firstWeekOfMonth = date('W', strtotime(date('Y-m-01', strtotime($date)))); return 1 + ($week < $firstWeekOfMonth ? $week : $week - $firstWeekOfMonth); } function getWeeksOfMonth($date) { $currentYear = date('Y', strtotime($date)); $currentMonth = date('m', strtotime($date)); //Substitue year and month $time = strtotime("$currentYear-$currentMonth-01"); //Got the first week number $firstWeek = date("W", $time); if ($currentMonth == 12) $currentYear++; else $currentMonth++; $time = strtotime("$currentYear-$currentMonth-01") - 86400; $lastWeek = date("W", $time); $weekArr = array(); $j = 1; for ($i = $firstWeek; $i <= $lastWeek; $i++) { $weekArr[$i] = 'week ' . $j; $j++; } return $weekArr; } if (isset($jadwal_kbm)) { $ist = json_decode(json_encode($jadwal_kbm->istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); $jmlMapelPerHari = $jadwal_kbm->kbm_jml_mapel_hari; } else { $jmlMapelPerHari = 0; } $nowDate = strtotime(date('Y-m-d')); $nowHour = strtotime(date('H:i')); $today = new DateTime(); $tempIdSelected = $id_kelas . $tp_active->id_tp . $smt_active->id_smt; ?>

Pilih Kelas:
0) : foreach ($kelas as $key => $value) :?>

mapel_kelas == null ? [] : unserialize($guru->mapel_kelas ?? ''); foreach ($mapel_guru as $mg) { $arr_id_kelas_guru[$mg['id_mapel']] = $mg; foreach ($mg['kelas_mapel'] as $km) { array_push($arrKelasGuru, $km['kelas']); } } } $ada_kelas = in_array($id_kelas, $arrKelasGuru); //sortir jadwal foreach ($jadwal_mapel as $k) { foreach ($k['jadwal'] as $j) { $arrRes[$j->id_hari][$j->jam_ke] = [ 'id_tp' => $j->id_tp, 'id_smt' => $j->id_smt, 'id_kelas' => $j->id_kelas, 'id_hari' => $j->id_hari, 'jam_ke' => $j->jam_ke, 'id_mapel' => $j->id_mapel, 'nama_mapel' => $j->nama_mapel, 'kode' => $j->kode ]; } } $arrIst = []; foreach ($jmlIst as $istirahat) { array_push($arrIst, $istirahat->ist); $arrDur[$istirahat->ist] = $istirahat->dur; }; if (isset($jadwal_kbm->ada)) : ?>
kbm_jam_mulai); $jamSampai = new DateTime($jadwal_kbm->kbm_jam_mulai); $splited = explode('-', $jh ?? ''); $y = $splited[0]; $m = $splited[1]; $d = $splited[2]; $jamMulai->setDate($y, $m, $d); $jamSampai->setDate($y, $m, $d); for ($i = 0; $i < $jadwal_kbm->kbm_jml_mapel_hari; $i++): $jamke = $i + 1; ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); ?> add(new DateInterval('PT' . $arrDur[$jamke] . 'M')); else: $jamSampai->add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); ?> add(new DateInterval('PT' . $jadwal_kbm->kbm_jam_pel . 'M')); endif; ?> kbm_jml_mapel_hari) : ?>
Hari & Tanggal Jam Ke Waktu Mata Pelajaran Materi Tugas
format('H:i') ?> - format('H:i') ?> ISTIRAHAT ISTIRAHAT ISTIRAHAT format('H:i') ?> - format('H:i') ?> "--Pilih Materi--"]; if (isset($opsi_materi[$id_mpl]) && isset($opsi_materi[$id_mpl][1])) { $opsis = $opsis + $opsi_materi[$id_mpl][1]; } if ($this->ion_auth->is_admin()) { $ada_mapel = true; } elseif ($this->ion_auth->in_group('guru')) { $ada_mapel = isset($arr_id_kelas_guru[$id_mpl]) && isset($guru) && $ada_kelas; } else { $ada_mapel = false; } //$disableSelect = $ada_mapel && $today < $jamMulai ? '' : 'disabled="disabled"'; $disableSelect = $ada_mapel ? '' : 'disabled="disabled"'; $tempId = $tempIdSelected . str_replace('-', '', $jh) . $jamke . '1'; echo form_dropdown( 'select-materi', $opsis, isset($detail_jadwal_materi[$tempId]) ? $detail_jadwal_materi[$tempId]->id_materi : '', 'class="select2 dropdown-materi form-control" data-name="select-materi"'//. $disableSelect ); ?> "--Pilih Tugas--"]; if (isset($opsi_materi[$id_mpl]) && isset($opsi_materi[$id_mpl][2])) { $opsis = $opsis + $opsi_materi[$id_mpl][2]; } if ($this->ion_auth->is_admin()) { $ada_mapel = true; } elseif ($this->ion_auth->in_group('guru')) { $ada_mapel = isset($arr_id_kelas_guru[$id_mpl]) && isset($guru) && $ada_kelas; } else { $ada_mapel = false; } //$disableSelect = $ada_mapel && $today < $jamMulai ? '' : 'disabled="disabled"'; $disableSelect = $ada_mapel ? '' : 'disabled="disabled"'; $tempId = $tempIdSelected . str_replace('-', '', $jh) . $jamke . '2'; echo form_dropdown( 'select-tugas', $opsis, isset($detail_jadwal_tugas[$tempId]) ? $detail_jadwal_tugas[$tempId]->id_materi : '', 'class="select2 dropdown-tugas form-control" data-name="select-tugas"'//. $disableSelect ); ?>
'setmapel')); ?>
PK\\kelas/status/data.phpnu[

Reload
'; //var_dump($mapel); //echo ''; ?> 'formselect')) ?>
Guru
Mapel
'Pilih Mapel'] + $mapels; echo form_dropdown( 'mapel', $mapels, null, 'id="dropdown-mapel" class="form-control"' ); ?>
Kelas
Materi/Tugas

MATERI MATERI PELAKSANAAN
Mapel Sejarah Jam ke ....
Guru .... Dari ....
Kelas .... Sampai ....

PK\\h!<]4]4kelas/absenharianmapel/data.phpnu[

Reload
'formselect')) ?>
PK\\ Ȣkelas/tugas/data1.phpnu[ $m) { if ($m->id_tp != $tp_active->tahun && $m->id_smt != $smt_active->id_smt) { array_push($all_tugas, $m); unset($tugas[$k]); } } ?>

'; //var_dump($jadwal_tugas); //echo '
'; //var_dump($kelas_tugas); //var_dump($tugas); //echo ''; ?>
ion_auth->is_admin() ? '' : 'd-none'; $left = $this->ion_auth->is_admin() ? 'text-right' : 'text-left'; $btnNone = count($tugas) > 0 ? '' : 'd-none'; ?>
0) : foreach ($tugas as $key => $value) : $arr = unserialize($value->tugas_kelas ?? ''); array_push($arrIds, $value->id_materi); ?>
kode ?>
nama_guru ?>
  • judul_tugas ?>
  • $v) : ?>
    Kelas Jadwal Aksi
    id_materi][$v]) ? $kelas_tugas[$value->id_materi][$v] : '-' ?> id_materi][$v]) ? $jadwal_tugas[$value->id_materi][$v] : 'Belum diatur' ?> Edit Jadwal
  • Dibuat created_on)) ?>
    Diupdate updated_on)) ?>
  • Status status === '1') ? 'Aktif' : 'Non Aktif' ?>
  • File
    file); $dataFileAttach = []; $att = @unserialize($value->file ?? ''); if ($att !== false) { $dataFileAttach = unserialize($value->file ?? ''); } else { if ($value->file != null) { $file = $value->file; if (strpos($file, 'http') == false) { $file = base_url('uploads/tugas/') . $value->file; } $src_file = [ 'src' => $file, 'size' => '', 'type' => mime_content_type(str_replace(base_url(), '', $file)), 'name' => $value->file ]; array_push($dataFileAttach, $src_file); } } //if ($dataFileAttach==null){ // $dataFileAttach = []; //} foreach ($dataFileAttach as $f) : $icon = 'fa-file'; $arrFile = ['jpg', 'jpeg', 'png', 'gif']; if (strpos(strtolower($f['src'] ?? ''), 'doc') || strpos(strtolower($f['src'] ?? ''), 'docx')) { $icon = 'fa-file-word-o text-primary'; } elseif (strpos(strtolower($f['src'] ?? ''), 'xls') || strpos(strtolower($f['src'] ?? ''), 'xlsx')) { $icon = 'fa-file-excel-o text-success'; } elseif (strpos(strtolower($f['src'] ?? ''), 'png') || strpos(strtolower($f['src'] ?? ''), 'jpg') || strpos(strtolower($f['src'] ?? ''), 'jpeg')) { $icon = 'fa-file-picture-o text-orange'; } elseif (strpos(strtolower($f['src'] ?? ''), 'pdf')) { $icon = 'fa-file-pdf-o text-danger'; } elseif (strpos(strtolower($f['src'] ?? ''), 'mp4')) { $icon = 'fa-file-video-o text-fuchsia'; } ?>
'up')) ?> PK\\%bcbckelas/tugas/data.phpnu[ $m) { if ($m->id_tp != $tp_active->tahun && $m->id_smt != $smt_active->id_smt) { array_push($all_tugas, $m); unset($tugas[$k]); } } ?>

'; //var_dump($jadwal_tugas); //echo '
'; //var_dump($kelas_tugas); //var_dump($tugas); //echo ''; ?>
ion_auth->is_admin() ? '' : 'd-none'; $left = $this->ion_auth->is_admin() ? 'text-right' : 'text-left'; $btnNone = count($tugas) > 0 ? '' : 'd-none'; ?>
0) : $no = 1; foreach ($tugas as $key => $value) : $arr = unserialize($value->tugas_kelas ?? ''); array_push($arrIds, $value->id_materi); ?> $v) { if (isset($kelas_tugas[$value->id_materi][$v])) { $arrKls .= '' . $kelas_tugas[$value->id_materi][$v] . ''; } } ?> status == '1' ? 'Aktif' : 'Non Aktif'; $btn_bg = $value->status == '1' ? 'bg-success' : 'bg-warning'; //$btn_txt = $value->status == '1' ? 'Nonaktifkan' : 'Aktifkan'; ?>
No. Guru Mapel Tugas Dibuat Status Aksi
Kode Judul Kelas
nama_guru ?> kode ?> kode_tugas ?> judul_tugas ?> updated_on)) ?>
'up')) ?> PK\\2YsNsNkelas/tugas/add.phpnu[tugas_kelas ?? ''); $dataFileAttach = []; $att = @unserialize($tugas->file ?? ''); if ($att !== false) { $dataFileAttach = unserialize($tugas->file ?? ''); } else { if ($tugas->file != null) { $file = $tugas->file; if (strpos($file, 'http') == false) { $file = base_url('uploads/tugas/') . $tugas->file; } $src_file = [ 'src' => $file, 'size' => '', 'type' => mime_content_type(str_replace(base_url(), '', $file)), 'name' => $tugas->file ]; array_push($dataFileAttach, $src_file); } } if (empty($kelas_pilih)) { $arrKelasSelected[] = [ 'mapel' => '0', 'kelas' => '0' ]; } else { foreach ($kelas_pilih as $m) { $arrKelasSelected[] = [ 'mapel' => $tugas->id_mapel, 'kelas' => $m ]; } } ?>

';
                //var_dump($tugas);
                //echo '
'; //var_dump($tugas->tugas_kelas); //echo '
'; ?> 'formtugas')) ?>
id_guru, 'id="guru" class="select2 form-control form-control-sm" required' ); ?>
'formfile')) ?>
File Pendukung
Memuat file ...
PK\\z kelas/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\ilYlYkelas/absenharian/data.phpnu[

Reload
'formselect')) ?>

PK\\;^ˢEEmaster/guru/detail.phpnu[

Anda akan menghapus data nama_guru ?> .

PENTING

  • Informasi di bawah ini adalah detail dari guru bersangkutan
  • Setelah menghapus data guru maka harus mengatur ulang guru pengganti agar tidak terjadi error

SARAN

  • Sebaiknya tidak menghapus guru yang mempunyai jabatan atau tugas lainnya.
  • Gunakan menu User Management -> Guru untuk menonaktifkan guru.
  • Atau gunakan menu Guru -> Edit Profile untuk mengganti nama guru tanpa harus menghapus.

$s) { $searchTp = array_search($t, array_column($tp, 'id_tp')); array_push($tahun_ids, $tp[$searchTp]->id_tp); array_push($tahuns, $tp[$searchTp]->tahun); } ?> 0) : ?>
Nama 0 ? 'colspan="2" ' : '' ?>class="w-75"> nama_guru ?>
Tugas / Jabatan Smt 1
  • level . ' ' . $guru['jabatan'][$tahun_ids[0]][1]->nama_kelas ?>
  • Pengampu
      mapel_kelas ?? ''))); foreach ($mapels as $mapel) : $kls = ''; foreach ($mapel->kelas_mapel as $mk) { if (isset($kelas[$tahun_ids[0]][1][$mk->kelas])) { $kls .= '' . $kelas[$tahun_ids[0]][1][$mk->kelas]->nama_kelas . ' '; } } ?>
    • nama_mapel ?>
Smt 2
  • level . ' ' . $guru['jabatan'][$tahun_ids[0]][2]->nama_kelas ?>
  • Pengampu
      mapel_kelas ?? ''))); foreach ($mapels as $mapel) : $kls = ''; foreach ($mapel->kelas_mapel as $mk) { if (isset($kelas[$tahun_ids[0]][2][$mk->kelas])) { $kls .= '' . $kelas[$tahun_ids[0]][2][$mk->kelas]->nama_kelas . ' '; } } ?>
    • nama_mapel ?>
Smt 1
  • level . ' ' . $guru['jabatan'][$tahun_ids[$i]][1]->nama_kelas ?>
  • Pengampu
      mapel_kelas ?? ''))); foreach ($mapels as $mapel) : $kls = ''; foreach ($mapel->kelas_mapel as $mk) { if (isset($kelas[$tahun_ids[$i]][1][$mk->kelas])) { $kls .= '' . $kelas[$tahun_ids[$i]][1][$mk->kelas]->nama_kelas . ' '; } } ?>
    • nama_mapel ?>
Smt 2
  • level . ' ' . $guru['jabatan'][$tahun_ids[$i]][2]->nama_kelas ?>
  • Pengampu
      mapel_kelas ?? ''))); foreach ($mapels as $mapel) : $kls = ''; foreach ($mapel->kelas_mapel as $mk) { if (isset($kelas[$tahun_ids[$i]][2][$mk->kelas])) { $kls .= '' . $kelas[$tahun_ids[$i]][2][$mk->kelas]->nama_kelas . ' '; } } ?>
    • nama_mapel ?>
Materi Siswa 0 ? 'colspan="2" ' : '' ?>class=""> materi
Catatan Siswa 0 ? 'colspan="2" ' : '' ?>class=""> catatan
Bank Soal 0 ? 'colspan="2" ' : '' ?>class=""> bank soal
Pengawas 0 ? 'colspan="2" ' : '' ?>class=""> jadwal
Pengumuman 0 ? 'colspan="2" ' : '' ?>class=""> post
Komentar 0 ? 'colspan="2" ' : '' ?>class=""> komentar
Balasan Komentar 0 ? 'colspan="2" ' : '' ?>class=""> balasan
Batalkan Penghapusan
'; //var_dump($tahuns); // var_dump($tp); //echo '
'; //var_dump($kelas); //echo '
'; //var_dump($guru); //echo ''; ?>
'hapus-guru')) ?> PK\\7hhmaster/guru/edit.phpnu[
'formguru'), array('method' => 'edit', 'id_guru' => $id_active)); ?>
name == 'jenis_kelamin'): ?>
name == 'agama'): ?>
'updatelogin'), array('id_guru' => $guru->id_guru)) ?> PK\\cL77master/guru/data_old.phpnu[id_jabatan == $b->id_jabatan) return 0; if ($a->id_jabatan == 0) return 1; if ($b->id_jabatan == 0) return -1; return $a->id_jabatan > $b->id_jabatan ? 1 : -1; } ?>

Master
"; //var_dump($gurus); //echo ""; if ($mode == null || $mode == '1') :?>
0) : //usort($gurus, 'sortByPosition'); foreach ($gurus as $guru): $mapels_guru = json_decode(json_encode(unserialize($guru->mapel_kelas ?? ''))); $ekstras_guru = json_decode(json_encode(unserialize($guru->ekstra_kelas ?? ''))); ?>
foto

nip ?>

nama_guru ?>

level . ' ' . $guru->nama_kelas ?>

status) { $stts = 'Aktif'; $badge = 'badge-success'; } else { $stts = 'Nonaktif'; $badge = 'badge-danger'; } ?>
Pengampu: kelas_mapel; $kls_guru_mapel = ''; foreach ($all_kelas_mapel as $kls_mpl) { if (isset($kelass[$kls_mpl->kelas])) $kls_guru_mapel .= '' . $kelass[$kls_mpl->kelas]->nama_kelas . ' '; } ?> kelas_ekstra; $kls_guru_ekstra = ''; foreach ($all_kelas_ekstra as $kls_eks) { if (isset($kelass[$kls_eks->kelas])) $kls_guru_ekstra .= '' . $kelass[$kls_eks->kelas]->nama_kelas . ' '; } ?>
No. Mata Pelajaran Kelas
nama_mapel ?>
nama_ekstra ?>
No. Profil Guru TP SMT Mapel Aksi Nama Jabatan Kode
'hapus-guru')) ?> PK\\E(S_S_master/guru/editmapel.phpnu[
Jika ada jabatan guru di semester sebelumnya, jabatan dan mata pelajaran yang diampu bisa dicopy ke semester sekarang, dengan catatan:
  • Aksi ini akan mengganti jabatan dan mapel guru yang sudah diatur di semester sekarang.
  • Pastikan nama kelas sekarang sudah dibuat dan sama seperti nama kelas sebelumnya.
  • Aksi ini tidak akan berjalan sempurna jika nama kelas di semester sebelumnya berbeda dengan nama kelas di semestr sekarang.
'editjabatan'), array('id_guru' => $guru->id_guru)) ?>
Edit Jabatan nama_guru ?>
Reload
mapel_kelas)); $jmapelval = json_decode(json_encode(unserialize($jmapel ?? ''))); $jks = []; if ($jmapelval != null) { foreach ($jmapelval as $key => $val) { array_push($jks, $val->id_mapel); } } $jekstra = json_decode(json_encode($guru->ekstra_kelas)); $jekstraval = json_decode(json_encode(unserialize($jekstra ?? ''))); $jke = []; if ($jekstraval != null) { foreach ($jekstraval as $key => $val) { array_push($jke, $val->id_ekstra); } } ?>
Mengajar
Tentukan Kelas Mapel
Jabatan
id_level, 'id="level" class="form-control form-control-sm" required' ); ?>
'copyjabatan'), array('id_guru' => $guru->id_guru, 'copy' => 'copy')) ?> 'create')) ?> ekstra_kelas == null ? [] : unserialize($guru->ekstra_kelas ?? ''); ?> PK\\ƫ\4\4master/guru/data.phpnu[id_jabatan == $b->id_jabatan) return 0; if ($a->id_jabatan == 0) return 1; if ($b->id_jabatan == 0) return -1; return $a->id_jabatan > $b->id_jabatan ? 1 : -1; } ?>

Master
"; //var_dump($gurus); //echo ""; if (count($gurus) > 0) : //usort($gurus, 'sortByPosition'); ?> mapel_kelas ?? ''))); $ekstras_guru = json_decode(json_encode(unserialize($guru->ekstra_kelas ?? ''))); ?>
'hapus-guru')) ?> PK\\-{h{hmaster/guru/add.phpnu[
'formguru')); ?>
Tambah Manual
'formPreviewExcel')); ?>
'formPreviewWord')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\"5:}K}Kmaster/mapel/import.phpnu[
'formPreviewExcel')); ?>
'formPreviewWord')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\khmaster/mapel/data.phpnu[

Kelompok Utama
Kategori Kode Nama Aksi
Sub Kelompok
Kode Nama Kel. Utama Aksi

'bulk')) ?>
No.Urut Rapor Mata Pelajaran Kode Mata Pelajaran Kelompok Status Aksi
'create-kelompok')) ?> 'create-sub-kelompok')) ?> 'create')) ?> 'update')) ?> 'hapus-kelompok')) ?> PK\\DGGmaster/tahun/data.phpnu[

'edittp')) ?> $value) : ?>
id No. Tahun Pelajaran Status Aksi
id_tp ?> tahun ?> active) : ?> AKTIF
'editsmt')) ?> $value) : ?>
id No. Semester Status
id_smt ?> smt ?> active) : ?> AKTIF
'create')) ?> PK\\sك&master/alumni/edit.phpnu[

session->flashdata('updatealumni') ?>

Detail Data Alumni

'alumni'), array('method' => 'edit', 'id_siswa' => $alumni->id_siswa)) ?>
name == 'jenis_kelamin'): ?>
name == 'kelas_awal'): ?>
name == 'agama'): ?>
name == 'agama'): ?>
'updatekelulusan'), array('id_siswa' => $alumni->id_siswa)) ?> PK\\_݇YPYPmaster/alumni/data.phpnu[

0 ? '' : 'disabled="disabled"'; ?>
'; //var_dump($tahun_lulus); //var_dump(array_search('1', array_column($tp, 'active'))); //echo ''; //$idTpActive = $tp[$searchId]; if ($searchId > 0) : $tpBefore = $tp[$searchId - 1]; if ($jumlah_lulus > 0) :?>

'; //var_dump($alumni_kelas_baru); //echo ''; ?>
No. N I S N N I S Nama Alumni Kelas Akhir Tahun Lulus Nomor Ijazah Aksi
id_siswa ?> nisn ?> nis ?> nama ?> kelas_akhir ?> tahun_lulus ?> no_ijazah ?> Edit
'formalumni')); ?> PK\\D{VVmaster/alumni/add.phpnu[

'formPreviewExcel')); ?>
'formPreviewWord')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\qWmaster/kelas/detail.phpnu[
nama_kelas ?>
jenjang == '3') : ?>
Nama Kelas nama_kelas ?>
Kode Kelas kode_kelas ?>
Jurusan nama_jurusan ?>
Level Kelas level ?>
Wali Kelas nama_guru ?>
Jumlah Siswa

Siswa Kelas nama_kelas ?>
No N I S Nama
nis ?> nama ?>
Struktur Organisasi Kelas nama_kelas ?>
(Diisi oleh wali kelas) '; //var_dump(array_search('119', array_column($siswas, 'id_siswa'))); //var_dump($struktur); //echo ''; $arrJabatan = [ 'Wali Kelas', 'Ketua Kelas', 'Wakil Ketua', 'Sekretaris I', 'Sekretaris II', 'Bendahara I', 'Bendahara II', 'Sie Upacara', 'Sie Ekstrakurikuler', 'Sie Olahraga', 'Sie Keagamaan', 'Sie Keamanan', 'Sie Ketertiban', 'Sie Kebersihan', 'Sie Keindahan', 'Sie Kesehatan', 'Sie Kekeluargaan', 'Sie Humas' ]; $arrSiswa = [ '', $struktur->ketua, $struktur->wakil_ketua, $struktur->sekretaris_1, $struktur->sekretaris_2, $struktur->bendahara_1, $struktur->bendahara_2, $struktur->sie_upacara, $struktur->sie_ekstrakurikuler, $struktur->sie_olahraga, $struktur->sie_keagamaan, $struktur->sie_keamanan, $struktur->sie_ketertiban, $struktur->sie_kebersihan, $struktur->sie_keindahan, $struktur->sie_kesehatan, $struktur->sie_kekeluargaan, $struktur->sie_humas ]; ?>
No Jabatan Nama Siswa
nama : ($no === 0 ? $kelas->nama_guru : '') ?>
PK\\omaster/kelas/data.phpnu[

id_smt == '2'): ?>
jenjang == '3') : ?> jenjang == '3') : ?>
No. Nama Kelas Kode Kelas Jurusan Wali Kelas Jumlah Siswa Aksi
nama_kelas ?> kode_kelas ?> nama_jurusan ?> nama_guru ?> jml_siswa ?>
PK\\j//master/kelas/add.phpnu[
'create')) ?>
Tambah Kelas
'; //var_dump($siswa); //echo ''; if (isset($id_kelas)) echo form_hidden('id_kelas', $id_kelas); ?>
$row) { if ($row->id_kelas == null || $row->id_kelas == 0) { $siswas [$row->id_siswa] = $row->nama .' - '.$row->nis; } } } if (isset($siswakelas)) { foreach ($siswakelas as $key => $row) { $siswas [$row->id_siswa] = $row->nama .' - '.$row->nis; } } $oj = json_decode(json_encode($kelas->jumlah_siswa)); $jumlahSiswa = json_decode(json_encode(unserialize($oj ?? ''))); $jjs = []; foreach ($jumlahSiswa as $js) { array_push($jjs, $js->id); } echo form_input( array( 'name' => 'nama_kelas', 'value' => $kelas->nama_kelas, 'id' => 'nama_kelas', 'type' => 'text', 'class' => 'form-control', 'placeholder' => 'Nama Kelas', 'required' => 'required' ) ); //var_dump($siswas); ?>
jenjang == '3') : ?>
jurusan_id, 'class="select2 form-control" id="jurusan_id" required' ); ?>
level_id, 'class="select2 form-control" id="level_id" required' ); ?>

siswa_id, 'class="select2 form-control" id="siswa_id" required' ); ?>
PK\\v!+!+master/kelas/persemester.phpnu[

'managekelas')) ?>
PK\\tFFmaster/kelas/naikkelas.phpnu[
'; //var_dump($tp); //var_dump(array_search('1', array_column($tp, 'active'))); //echo ''; $searchId = array_search('1', array_column($tp, 'active')); //$idTpActive = $tp[$searchId]; $tpBefore = ''; if (isset($tp[$searchId - 1])) : $tpBefore = $tp[$searchId - 1]; ?>

'; //var_dump($siswa_kelas_baru); //echo ''; ?>
id_siswa]) ? $siswa_kelas_baru[$siswa->id_siswa] : null; $kode_naik = $siswa->naik != null ? $siswa->naik : '1'; ?>
No. N I S N N I S Nama Siswa Kelas Lama Naik/Tdk. Naik Kelas Baru
id_siswa ?> nisn ?> nis ?> nama ?> nama_kelas ?> naik != null && $siswa->naik == '0' ? 'Tdk Naik' : 'Naik' ?> naik != null && $siswa->naik == '0') :?>
'naikkankelas')) ?>
PK\\HHmaster/jurusan/import.phpnu[

'formPreviewExcel')); ?>
'formPreviewWord')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\ى4343master/jurusan/data.phpnu[

'bulk')) ?>
mapel_peminatan ?? '') as $mid) { if ($mid != '') $badges .= '
' . $jurusan_mapels[$row->id_jurusan][$mid] . '
'; } ?>
No. Kode Jurusan Mapel Peminatan Aksi
kode_jurusan ?> nama_jurusan ?>
'create')) ?> 'update')) ?> PK\\z master/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\j-s-smaster/siswa/update.phpnu[

Download Data Siswa
0) : foreach ($kelas as $id => $kls) : ?>
Download Foto Siswa
0) : foreach ($kelas as $id => $kls) : ?>

Update Foto Siswa

  • Jangan merubah format tabel!
  • Hanya kolom NIS dan FOTO yang bisa diedit, jangan merubah isi kolom lain!
  • Jika NIS kosong, isi NIS dengan angka unik (jangan ada yang sama)
  • Gunakan format EXCEL untuk merubah data siswa selain FOTO
'formPreviewExcel')); ?>
'formPreviewWord')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\h kԞԞmaster/siswa/edit.phpnu[foto; if (!file_exists(FCPATH . $siswa->foto)) { $fotoSiswa = str_replace('profiles', 'foto_siswa', $siswa->foto); } ?>

session->flashdata('updatesiswa') ?>

Detail Data Siswa

'siswa'), array('method' => 'edit', 'id_siswa' => $siswa->id_siswa)) ?>
name == 'nisn' || $data->name == 'sekolah_asal' ? '' : ' required' ?> name == 'jenis_kelamin'): ?>
name == 'status'): ?>
name == 'kelas_awal'): ?>
name == 'agama'): ?>
>
name == 'agama'): ?>
name == 'status_keluarga'): $list = ["Pilih Status Kelurga", "Anak Kandung", "Anak Tiri", "Anak Angkat"]; ?>
'updatelogin'), array('id_siswa' => $siswa->id_siswa)) ?> PK\\ON=ssmaster/siswa/data.phpnu[

Import Update Data
'formsiswa')); ?> 'pager')); ?> PK\\H&;;master/siswa/add.phpnu[

'formPreviewExcel')); ?>
'formUpload')); ?>
Preview
Pastikan anda telah mengisi format yang telah disediakan.
PK\\7uFFmaster/ekstra/data.phpnu[

No. Ekstrakurikuler Kode Aksi
'save')) ?>
Tentukan Kelas Ekskul
0) : foreach ($kelas as $key => $kls) : $ids_selected = []; if ($ekskul_kelas[$key] != null) { $ids = unserialize($ekskul_kelas[$key][0]->ekstra ?? ''); foreach ($ids as $id) { array_push($ids_selected, $id['ekstra']); } } ?>
Kelas
'create')) ?> 'update')) ?> PK\\= _templates/debug.phpnu[ DEBUG

INFO
MENU UTAMA
title ?>
JADWAL HARI INI
PK\\fBb ` ` _templates/topnav/_header.phpnu[ <?= $judul ?>

PK\\1F  _templates/topnav/_footer.phpnu[
,
PK\\֗_templates/topnav/_menu.phpnu[ PK\\cƩq/q/ _templates/dashboard/_header.phpnu[ <?= $judul ?> logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?>
PK\\,!_templates/dashboard/_topmenu.phpnu[ PK\\휨}} _templates/dashboard/_footer.phpnu[
GarudaCBT v.
Copyright © 2014-2019 AdminLTE.io. Version 3.0.5
PK\\ż##_templates/dashboard/navbar.phpnu[ PK\\`(( _templates/dashboard/sidebar.phpnu[ PK\\'ZT_templates/auth/_header.phpnu[ Login logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?> PK\\ݑ,'_templates/auth/_footer.phpnu[ PK\\z _templates/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\#hShSrapor/arsiprapor.phpnu[ ["", "SEKOLAH DASAR (SD)", "MADRASAH IBTIDAIYAH (MI)" ], "2" => ["", "SEKOLAH MENENGAH PERTAMA (SMP)", "MADRASAH TSANAWIYAH (MTS)" ], "3" => ["", "SEKOLAH MENENGAH ATAS (SMA)", "MADRASAH ALIYAH (MA)", "SEKOLAH MENENGAH KEJURUAN (SMK)" ] ]; ?>

Pilih Siswa

Preview
Hal. dari

PK\\̓Ȁ__rapor/editrapor.phpnu[

Nama : nama ?? '') ?> Kelas : nama_kelas ?>
No. Induk/NISN : nis . '/' . $siswa->nisn ?> Semester : nama_smt ?>
Nama satuan_pendidikan == 2 ? 'Madrasah' : 'Sekolah' ?> : sekolah ?> Tahun Pelajaran : tahun ?>
Alamat : alamat ?>

A. SIKAP
1. Sikap Spiritual
nilai ?? ''); $pred_a = $a['predikat']; $desk_a = $sikap[0]->deskripsi; $b = unserialize($sikap[1]->nilai ?? ''); $pred_b = $b['predikat']; $desk_b = $sikap[1]->deskripsi; ?>
Predikat Deskripsi


2. Sikap Sosial
Predikat Deskripsi

'; var_dump($nilai_sikap); echo ''; ?>
B. PENGETAHUAN
     Kreteria Ketuntasan Minimal: 65
NO Mata Pelajaran KKM Pengetahuan
Nilai Predikat Deskripsi
Kelompok A (Wajib)
1 Pendidikan Agama Islam
a. Al Quran-Hadis 65
b. Akidah Akhlak 65
c. Fiqih 65
d. Sejarah Kebudayaan Islam 65
2 Pendidikan Pancasila dan Kewarganegaraan 65
3 Bahasa Arab 65
4 Bahasa Indonesia 65
5 Matematika 65
6 Ilmu Pengetahuan Alam 65
7 Ilmu Pengetahuan Sosial 65
8 Bahasa Inggris 65
Kelompok B
1 Seni Budaya 65
2 Prakarya 65
3 Pendidikan Jasmani Olah Raga dan Kesehatan 65
4 Seni Budaya dan Prakarya 65
Muatan Lokal
1 Bahasa Sunda 65
TEMATIK
1 TEMA 1 65
2 TEMA 2 65
3 TEMA 3 65
4 TEMA 4 65
5 TEMA 5 65
6 TEMA 6 65
7 TEMA 7 65
8 TEMA 8 65
9 TEMA 9 65

C. KETERAMPILAN
     Kreteria Ketuntasan Minimal: 65
NO Mata Pelajaran KKM Keterampilan
Nilai Predikat Deskripsi
Kelompok A (Wajib)
1 Pendidikan Agama Islam
a. Al Quran-Hadis 65
b. Akidah Akhlak 65
c. Fiqih 65
d. Sejarah Kebudayaan Islam 65
2 Pendidikan Pancasila dan Kewarganegaraan 65
3 Bahasa Arab 65
4 Bahasa Indonesia 65
5 Matematika 65
6 Ilmu Pengetahuan Alam 65
7 Ilmu Pengetahuan Sosial 65
8 Bahasa Inggris 65
Kelompok B
1 Seni Budaya 65
2 Prakarya 65
3 Pendidikan Jasmani Olah Raga dan Kesehatan 65
4 Seni Budaya dan Prakarya 65
Muatan Lokal
1 Bahasa Sunda 65
TEMATIK
1 TEMA 1 65
2 TEMA 2 65
3 TEMA 3 65
4 TEMA 4 65
5 TEMA 5 65
6 TEMA 6 65
7 TEMA 7 65
8 TEMA 8 65
9 TEMA 9 65

D. EKSTRAKURIKULER
NO Kegiatan Ekstrakurikuler Nilai Keterangan
1 Baca Tulis Al Quran
2 Shalat Dhuha
3

E. PRESTASI
NO Jenis Kegiatan Deskripsi
1
2
3

F. KONDISI KESEHATAN DAN FISIK
Aspek yang Dinilai Keterangan
Pendengaran
Penglihatan
Gigi
Lain-lain
Aspek yang Dinilai Semester
1 2
Tinggi Badan
Berat Badan

G. KETIDAKHADIRAN
Sakit - hari
Izin - hari
Tanpa Keterangan - hari

H. CATATAN WALI KELAS
Ranking ke: .
Saran-saran: undefined


Jangan lupa untuk menyimpan pada setiap perubahan
PK\\z rapor/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\2 __cbt/analisis/data.phpnu[

Tahun
Smt
Jadwal

'; //$atas = array_slice($nilai, 0, 48, true); //$bawah = array_slice($nilai, 49, 48, true); //var_dump($nilai); //echo '
'; //var_dump($soals); //echo ''; if (isset($soals[1])) :?>

Soal Pilihan Ganda

NO. SOAL ANALISA
soal ?>
  1. opsi_a ?>
  2. opsi_b ?>
  3. opsi == 3) : ?>
  4. opsi_c ?>
  5. opsi == 4) : ?>
  6. opsi_c ?>
  7. opsi_d ?>
  8. opsi_c ?>
  9. opsi_d ?>
  10. opsi_e ?>

JAWABAN: jawaban ?? '') ?>

    opsi == '3') { $opsis = ['a', 'b', 'c']; } elseif ($info->opsi == '4') { $opsis = ['a', 'b', 'c', 'd']; } else { $opsis = ['a', 'b', 'c', 'd', 'e']; } foreach ($opsis as $opsi) : $bg = 'btn-danger'; if (strtoupper($opsi ?? '') == strtoupper($soal->jawaban ?? '')) { $bg = 'btn-success'; } ?>
  • = jawaban_siswa['jawab_' . $opsi]) ? count($soal->jawaban_siswa['jawab_' . $opsi]) : 0 ?> siswa
status_kesukaran == 'mudah') { $warna = 'alert-default-success'; } else if ($soal->status_kesukaran == 'sedang') { $warna = 'alert-default-warning'; } else { $warna = 'alert-default-danger'; } if ($soal->status_valid == 'Valid') { $warna_valid = 'alert-default-success'; } else { $warna_valid = 'alert-default-danger'; } if ($soal->daya_pembeda >= 0.70) { $warna_daya = 'alert-default-primary'; } else if ($soal->daya_pembeda >= 0.40) { $warna_daya = 'alert-default-success'; } else if ($soal->daya_pembeda >= 0.20) { $warna_daya = 'alert-default-warning'; } else { $warna_daya = 'alert-default-danger'; } ?>

Kesukaran:
tingkat_kesukaran ?> status_kesukaran ?>

Validasi:
nilai_valid, 2) ?> status_valid ?>

Pembeda:
daya_pembeda, 2) ?> status_daya ?>

jawaban_siswa = @unserialize($soal->jawaban_siswa ?? ''); $soal->jawaban_benar = @unserialize($soal->jawaban_benar ?? ''); $soal->jawaban_siswa = json_decode(json_encode($soal->jawaban_siswa)); $soal->jawaban_benar = json_decode(json_encode($soal->jawaban_benar)); ?>
PK\\$iEcbt/jenis/data.phpnu[

'bulk')); ?>
No. Jenis Ujian Kode Jenis Aksi
'create')) ?> 'update')) ?> PK\\j$//cbt/nomorpeserta/data.phpnu[

'setNomor')); ?>
Pilih semua kelas yang akan melaksanakan penilaian

PK\\J;  cbt/peserta/data.phpnu[

'; //var_dump($siswas); //echo ''; $ruang_aktif = $btn_aktif == 1 ? 'active btn-primary' : 'btn-outline-primary'; $kelas_aktif = $btn_aktif == 2 ? 'active btn-primary' : 'btn-outline-primary'; $ruang_none = $btn_aktif == 1 ? '' : 'd-none'; $kelas_none = $btn_aktif == 2 ? '' : 'd-none'; ?>

Master

Ruang
Sesi
Kelas

1
2
3
4
5
PK\\1gcbt/sesisiswa/data1.phpnu[

'editsesikelas')) ?>
No. Kelas Jurusan Sesi Set Siswa
nama_kelas ?> nama_jurusan ?> sesi_id, 'class="form-control form-control-sm" id="kelas-' . $k->id_kelas . '" required' ); ?> set_siswa == "1" ? 'checked' : ''); ?>>
nama_kelas][] = $item; } ?> 'editsesisiswa')) ?>
nama_kelas]; ?>
No. Nama Siswa Kelas Sesi
nama ?> nama_kelas ?> set_siswa === "0") : echo form_dropdown( 'sesi_id', $sesi, ($s->sesi === '0' || is_null($s->sesi)) ? $s->sesi_id : $s->sesi, 'class="form-control form-control-sm" id="siswa-' . $s->id_siswa . '" required ' ); else: ?> sesi_id; ?>
PK\\{[++cbt/sesisiswa/data.phpnu[jenjang; ?>

'Pilih kelas'] + $kelas; $ruangs = ['0' => 'Pilih ruang'] + $ruang; $sesis = ['0' => 'Pilih sesi'] + $sesi; ?>
0) : ?>
0) : ?>
'editsesisiswa')) ?>
id_ruang) && $siswa->id_ruang != null ? $siswa->id_ruang : '0'; $sesiId = isset($siswa->id_sesi) && $siswa->id_sesi != null ? $siswa->id_sesi : '0'; ?>
No. Nama Siswa Kelas Ruang Sesi
nama ?> nama_kelas ?> id_siswa . '][' . $kelas_selected . '][ruang]', $ruangs, $ruangId, 'data-ruangid="' . $siswa->id_siswa . '" class="ruangsiswa form-control form-control-sm"' ); ?> id_siswa . '][' . $kelas_selected . '][sesi]', $sesis, $sesiId, 'data-sesiid="' . $siswa->id_siswa . '" class="sesisiswa form-control form-control-sm"' ); ?>
PK\\4Z@mmcbt/nilai/detail.phpnu[

Nama nama ?>
N I S nis ?>
Kelas nama_kelas ?>
No. Peserta nomor_peserta ?>
Sesi kode_sesi ?>
Ruang kode_ruang ?>
Mata Pelajaran kode ?>
Guru nama_guru ?>
Jenis Ujian kode_jenis ?>
Tahun Pelajaran tahun : "--/--" ?>
PG skor_pg, 2) ?> NILAI
skor_total, 2) ?>
PK skor_kompleks, 2) ?>
JO skor_jodohkan, 2) ?>
IS skor_isian, 2) ?> dikoreksi) && $skor->dikoreksi ? "Sudah dikoreksi" : "Belum dikoreksi"?>
ES skor_essai, 2) ?>
0) : ?>
I. PILIHAN GANDA
$s->opsi_alias_a, 'opsi' => $s->opsi_a, 'value' => 'A'], ['valAlias' => $s->opsi_alias_b, 'opsi' => $s->opsi_b, 'value' => 'B'], ]; if ($info->opsi == 3) { $arrAlias[] = ['valAlias' => $s->opsi_alias_c, 'opsi' => $s->opsi_c, 'value' => 'C']; } elseif ($info->opsi == 4) { $arrAlias[] = ['valAlias' => $s->opsi_alias_c, 'opsi' => $s->opsi_c, 'value' => 'C']; $arrAlias[] = ['valAlias' => $s->opsi_alias_d, 'opsi' => $s->opsi_d, 'value' => 'D']; } else { $arrAlias[] = ['valAlias' => $s->opsi_alias_c, 'opsi' => $s->opsi_c, 'value' => 'C']; $arrAlias[] = ['valAlias' => $s->opsi_alias_d, 'opsi' => $s->opsi_d, 'value' => 'D']; $arrAlias[] = ['valAlias' => $s->opsi_alias_e, 'opsi' => $s->opsi_e, 'value' => 'E']; } array_multisort(array_column($arrAlias, 'valAlias'), SORT_ASC, $arrAlias); ?>
No. Soal Soal Pilihan Jawaban Benar No. Acak Pilihan Acak Jawaban Siswa Acak Jawaban Siswa Analisa Point
Max. bobot_pg / $info->tampil_pg, 2) ?>
soal ?>
  1. opsi_a ?>
  2. opsi_b ?>
  3. opsi == 3) : ?>
  4. opsi_c ?>
  5. opsi == 4) : ?>
  6. opsi_c ?>
  7. opsi_d ?>
  8. opsi_c ?>
  9. opsi_d ?>
  10. opsi_e ?>
jawaban ?? '') ?> no_soal_alias ?>
jawaban_alias ?? '') ?> jawaban_siswa ?? '') ?> analisa ?> point ?>
TOTAL SCORE PILIHAN GANDA skor_pg, 2) ?>
0) : ?>
II. PILIHAN GANDA KOMPLEKS
No. Soal Soal Pilihan Jawaban Benar Jawaban Siswa Analisa Point
Max. bobot_kompleks / $info->tampil_kompleks, 2) ?>
Aksi
soal ?>
    opsi_a as $abc => $opsi) : ?>
jawaban_benar ?? [''])) ?> jawaban_siswa ? strtoupper(implode(", ", $s->jawaban_siswa)) : '' ?> analisa ?> point ?>
TOTAL SCORE PILIHAN GANDA KOMPLEKS skor_kompleks, 2) ?>
0) : ?>
III. MENJODOHKAN
tabel_soal) ?> tabel_soal); $t < $tMax; $t++):?>
No. Soal Soal Jawaban Benar Jawaban Siswa Analisa Point
Max. bobot_jodohkan / $info->tampil_jodohkan, 2) ?>
Aksi
soal ?> tabel_soal[0]; if ($s->type_soal == '1') :?> title ?> subtitle)) : ?>
    subtitle as $sub) : ?>

--

title ?>
subtitle) ? $jwb->subtitle[0] : '' ?>

tabel_jawab[0]) ? $s->tabel_jawab[0] : []; if ($s->type_soal == '1') :?> title ?? '' ?> subtitle)) : ?>
    subtitle as $sub) : ?>

--

title ?? '' ?>
subtitle) ? $jwb->subtitle[0] : '--' ?>

analisa ?> point ?>
tabel_soal[$t]; if ($s->type_soal == '1') : ?> title ?> subtitle)) : ?>
    subtitle as $sub) : ?>

--

title ?>
subtitle) ? $jwb->subtitle[0] : '' ?>

tabel_jawab[$t] ?? []; if ($s->type_soal == '1') : ?> title ?? '' ?> subtitle)) : ?>
    subtitle as $sub) : ?>

--

title ?? '' ?>
subtitle) ? $jwb->subtitle[0] : '--' ?>

TOTAL SCORE MENJODOHKAN skor_jodohkan, 2) ?>
0) : ?>
IV. ISIAN SINGKAT
No. Soal Soal Jawaban Benar Jawaban Siswa Analisa Point
Max. bobot_isian / $info->tampil_isian, 2) ?>
Aksi
soal ?> jawaban_benar ?> jawaban_siswa ?> analisa ?> point ?>
TOTAL SCORE ISIAN SINGKAT skor_isian, 2) ?>
0) : ?>
V. URAIAN
No. Soal Soal Jawaban Benar Jawaban Siswa Analisa Point
Max. bobot_esai / $info->tampil_esai) ?>
Aksi
soal ?> jawaban_benar ?> jawaban_siswa ?> analisa ?> point ?>
TOTAL SCORE URAIAN skor_essai, 2) ?>
'koreksi')) ?> PK\\0g==cbt/nilai/data.phpnu[

Kelas
Jadwal
0 ? '' : ' d-none'; ?>

0) : $cols = [$info->tampil_pg, $info->tampil_kompleks, $info->tampil_jodohkan, $info->tampil_isian, $info->tampil_esai]; $cols = array_filter($cols); $rows = count($cols) > 1 ? 1 : 2; $colWidth = '5,15,35,15,10,10,10'; for ($s = 0; $s < $info->tampil_pg; $s++) { $colWidth .= ',4'; } $colWidth .= ',10,10,10'; $totalSoal = $info->tampil_pg + $info->tampil_kompleks + $info->tampil_jodohkan + $info->tampil_isian + $info->tampil_esai; ?>
> 'koreksi-semua')) ?> tampil_pg > 0) : ?> tampil_pg; $js++) : ?> tampil_pg > 0) : ?> tampil_pg > 0) : ?> tampil_kompleks > 0) :?> tampil_jodohkan > 0) :?> tampil_isian > 0) :?> tampil_esai > 0) :?> id_siswa; $disable = strpos($siswa->mulai_ujian, '-') !== false; $disabled = $disable ? 'disabled' : ''; ?> jawaban_pg as $num => $jwb) : if ($jwb['benar']) { $bg = 'data-fill-color="00E676"'; $benar_pg++; } else { $bg = 'data-fill-color="FF7043"'; $salah_pg++; } //if ($jwb['jawaban'] != '') { //} if (round($siswa->skor_total, 2) > $nilaiTertinggi) { $nilaiTertinggi = round($siswa->skor_total, 2); } if (round($siswa->skor_total, 2) > 0 && $siswa->skor_total < $nilaiTerrendah) { $nilaiTerrendah = round($siswa->skor_total, 2); } ?> tampil_pg > 0) : ?> tampil_kompleks > 0) : ?> tampil_jodohkan > 0) : ?> tampil_isian > 0) : ?> tampil_esai > 0) : ?>
Mata Pelajaran nama_mapel ?>
Kelas
Guru nama_guru ?>
Soal bank_kode ?>
Jumlah Soal
No. No. Peserta Nama Sesi Ruang Mulai Durasi Nomor Soal PG PG Skor 1 ? "" : $cols_name[array_key_first($cols)] ?> Nilai Aksi
B S PG PK JO IS ES Asli Katrol
nomor_peserta ?> nama ?> kode_sesi ?> kode_ruang ?> mulai_ujian ?> lama_ujian ?> data-a-v="middle" data-a-h="center" data-b-a-s="thin" style="border: 1px solid black;border-collapse: collapse; text-align: center;"> skor_pg ?> skor_kompleks ?> skor_jodohkan ?> skor_isian ?> skor_essai ?> skor_total, 2) ?> skor_katrol == '' ? '' : round($siswa->skor_katrol, 2)) ?> dikoreksi) && $siswa->dikoreksi === '1') : ?>
'perbaikan-nilai')) ?> PK\\Cn'D'Dcbt/nilai/nilai_essai.phpnu[

  • Halaman ini digunakan jika ingin menginput nilai tanpa koreksi.
  • Jika hasil siswa sudah dikoreksi dan diberi nilai, maka nilai di halaman ini akan mengganti nilai hasil koreksi.
  • Nilai 0 di halaman ini tidak akan mengganti nilai hasil koreksi.
Info Soal
Jenis Penilaian : nama_jenis ?>
Mata Pelajaran : nama_mapel ?>
Kelas :
Pengampu : nama_guru ?>
tampil_pg != '0') : ?> tampil_kompleks != '0') :?> tampil_jodohkan != '0') :?> tampil_isian != '0') :?> tampil_esai != '0') :?> tampil_pg != '0') : ?> tampil_kompleks != '0') :?> tampil_jodohkan != '0') :?> tampil_isian != '0') :?> tampil_esai != '0') :?>
Jml. PG Jml. PGK Jml. Jodohkan Jml. Isian Singkat Jml. Essai
tampil_pg ?> tampil_kompleks ?> tampil_jodohkan ?> tampil_isian ?> tampil_esai ?>

tampil_pg != '0') : ?> tampil_kompleks != '0') :?> tampil_jodohkan != '0') :?> tampil_isian != '0') :?> tampil_esai != '0') :?> id_siswa; ?> tampil_pg != '0') : ?> tampil_kompleks != '0') :?> tampil_jodohkan != '0') :?> tampil_isian != '0') :?> tampil_esai != '0') :?>
No. No. Peserta Nama Nilai PG
Max. Point: bobot_pg ?>
Nilai PG Kompleks
Max. Point: bobot_kompleks ?>
Nilai Menjodohkan
Max. Point: bobot_jodohkan ?>
Nilai Isisan Singkat
Max.Point: bobot_isian ?>
Nilai Essai
Max.Point: bobot_esai ?>
nomor_peserta ?> nama ?> skor_pg ?>

'koreksi')) ?> PK\\LQQcbt/jadwal/data.phpnu[istirahat)); $jmlIst = json_decode(json_encode(unserialize($ist ?? ''))); $jmlMapelPerHari = $jadwal_ujian->jml_mapel_hari; } else { $jmlMapelPerHari = 0; } ?>

Jadwal Ujian/Ulangan
Kode Warna Jadwal:
Tidak aktif Sedang dilaksanakan
Tidak digunakan Selesai, belum rekap nilai
Belum dimulai Selesai, sudah rekap nilai
Filter:
'hapus_semua')) ?>
$arrjadwal) : ?>

$sjadwal) : ?>
Kelas:
bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ($j->kelas_id === $k->id_kelas) { $kelasbank .= ' ' . $k->nama_kelas . ' '; $no++; } } } $startDay = strtotime($jadwal->tgl_mulai); $endDay = strtotime($jadwal->tgl_selesai); $today = strtotime(date('Y-m-d')); $hariMulai = new DateTime($jadwal->tgl_mulai); $hariSampai = new DateTime($jadwal->tgl_selesai); $enableEdit = true; $sedangdikerjakan = 0; $terpakai = true; $bgRandom = 'text-maroon'; if ($jadwal->status == '0') { $bgRandom = 'text-gray'; } else { if ($today < $startDay) { //belum dimulai $bgRandom = 'text-maroon'; } elseif ($today > $endDay) { //selesai $terpakai = isset($total_siswa[$jadwal->id_jadwal]); $bgRandom = $terpakai ? 'text-fuchsia' : 'text-yellow'; if ($jadwal->rekap == '1') { $bgRandom = $terpakai ? 'text-success' : 'text-yellow'; } } else { //sedang dilaksanakan $terpakai = isset($total_siswa[$jadwal->id_jadwal]); $bgRandom = $terpakai ? 'text-indigo' : 'text-yellow'; $sedangdikerjakan = $terpakai ? 1 : 0; } } $total_seharusnya = ($jadwal->tampil_pg + $jadwal->tampil_kompleks + $jadwal->tampil_jodohkan + $jadwal->tampil_isian + $jadwal->tampil_esai); $total_soal = $jadwal->total_soal == 0 ? 'Soal belum dibuat' : ($jadwal->total_soal < $total_seharusnya ? 'Soal belum selesai' : 'Jml. Soal: ' . $total_seharusnya . '') ?> tgl_mulai) : $currTgl = $jadwal->tgl_mulai; ?>
No. Hari/Tanggal Bank Soal Mapel Kelas Status Aksi
tgl_mulai))) ?>
tgl_mulai))) ?> bank_kode ?> nama_mapel ?> status === '0') ? 'Non Aktif' : 'Aktif' ?>
$arrjadwal) : ?>

$sjadwal) : ?>
Kelas:
bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); //$jks = []; $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ($j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } $startDay = strtotime($jadwal->tgl_mulai); $endDay = strtotime($jadwal->tgl_selesai); $today = strtotime(date('Y-m-d')); //echo 'skrg='.$today . ' start=' . $startDay . ' end=' . $endDay; $hariMulai = new DateTime($jadwal->tgl_mulai); $hariSampai = new DateTime($jadwal->tgl_selesai); $enableEdit = true; $sedangdikerjakan = 0; $terpakai = true;//isset($jadwal->total_siswa) && $jadwal->total_siswa != null; $bgRandom = 'bg-gradient-maroon'; if ($jadwal->status == '0') { $bgRandom = 'bg-gradient-gray'; } else { if ($today < $startDay) { //belum dimulai $bgRandom = 'bg-gradient-maroon'; } elseif ($today > $endDay) { //selesai $terpakai = isset($total_siswa[$jadwal->id_jadwal]); $bgRandom = $terpakai ? 'bg-gradient-fuchsia' : 'bg-gradient-yellow'; if ($jadwal->rekap == '1') { $bgRandom = $terpakai ? 'bg-gradient-success' : 'bg-gradient-yellow'; } //$enableEdit = false; } else { //sedang dilaksanakan $terpakai = isset($total_siswa[$jadwal->id_jadwal]); $bgRandom = $terpakai ? 'bg-gradient-indigo' : 'bg-gradient-yellow'; $sedangdikerjakan = $terpakai ? 1 : 0; } } $total_seharusnya = ($jadwal->tampil_pg + $jadwal->tampil_kompleks + $jadwal->tampil_jodohkan + $jadwal->tampil_isian + $jadwal->tampil_esai); $total_soal = $jadwal->total_soal == 0 ? 'Soal belum dibuat' : ($jadwal->total_soal < $total_seharusnya ? 'Soal belum selesai' : 'Jml. Soal: ' . $total_seharusnya . '') ?>
nama_mapel ?>

Kelas:
Jenis kode_jenis ?>
Kode Soal bank_kode ?>
Mulai tgl_mulai))) ?>
Sampai tgl_selesai))) ?>
Durasi durasi_ujian ?> menit
Acak Soal acak_soal == '1' ? 'Ya' : 'Tidak' ?>
Acak Jawaban acak_opsi == '1' ? 'Ya' : 'Tidak' ?>
Hasil Tampil hasil_tampil == '1' ? 'Ya' : 'Tidak' ?>
Gunakan Token token == '1' ? 'Ya' : 'Tidak' ?>
Reset Login reset_login == '1' ? 'Ya' : 'Tidak' ?>
Status status === '0') ? 'Non Aktif' : 'Aktif' ?>
Sudah Rekap rekap == '1' ? 'Sudah' : 'Belum' ?>
Mengerjakan id_jadwal]) ? $total_siswa[$jadwal->id_jadwal] : '0'; ?>

PK\\5u99cbt/jadwal/add.phpnu[

'create')) ?>
Edit Jadwal
id_mapel) ? $jadwal->id_mapel : '', $disabled_option . ' id="id-mapel" class="form-control form-control-sm" required' ); ?>
id_jenis, $disabled_option . ' id="jenis-id" class="form-control form-control-sm" required' ); ?>
acak_soal == 1 ? 'checked="checked"' : '' ?> />
acak_opsi == 1 ? 'checked="checked"' : '' ?> />
token === '1' ? 'checked="checked"' : '' ?> />
hasil_tampil === '1' ? 'checked="checked"' : '' ?> />
reset_login === '1' ? 'checked="checked"' : '' ?> />
status === '1' ? 'checked="checked"' : '' ?> />
PK\\*n!n!cbt/status/detail.phpnu[

nama ?>
'; //var_dump($soal[6]); //echo ''; if (count($soal) > 0) : ?> jenis_soal == '1') : if ($setting->jenjang == '3') { $arrAlias = [ ['valAlias' => $s->opsi_alias_a, 'opsi' => $s->opsi_a, 'value' => 'A'], ['valAlias' => $s->opsi_alias_b, 'opsi' => $s->opsi_b, 'value' => 'B'], ['valAlias' => $s->opsi_alias_c, 'opsi' => $s->opsi_c, 'value' => 'C'], ['valAlias' => $s->opsi_alias_d, 'opsi' => $s->opsi_d, 'value' => 'D'], ['valAlias' => $s->opsi_alias_e, 'opsi' => $s->opsi_e, 'value' => 'E'] ]; } else { $arrAlias = [ ['valAlias' => $s->opsi_alias_a, 'opsi' => $s->opsi_a, 'value' => 'A'], ['valAlias' => $s->opsi_alias_b, 'opsi' => $s->opsi_b, 'value' => 'B'], ['valAlias' => $s->opsi_alias_c, 'opsi' => $s->opsi_c, 'value' => 'C'], ['valAlias' => $s->opsi_alias_d, 'opsi' => $s->opsi_d, 'value' => 'D'], ]; } array_multisort(array_column($arrAlias, 'valAlias'), SORT_ASC, $arrAlias); //$so = json_decode(json_encode($s), true); ?>
SOAL ASLI SOAL SISWA
No. Soal Soal Pilihan Jawaban Benar No. Acak Pilihan Acak Jawaban Siswa Acak Jawaban Sebenarnya Analisa
nomor_soal ?> soal ?>
  1. opsi_a ?>
  2. opsi_b ?>
  3. opsi_c ?>
  4. opsi_d ?>
  5. jenjang == '3') : ?>
  6. opsi_e ?>
jawaban ?? '') ?> no_soal_alias ?>
jawaban_alias ?? '') ?> jawaban_siswa ?? '') ?> jawaban_siswa == null ? '...' : (strtoupper($s->jawaban_siswa ?? '') == strtoupper($s->jawaban ?? '') ? 'BENAR' : 'SALAH') ?>
PK\\+EuEucbt/status/data.phpnu[

TOKEN
-- : -- : --
Jadwal
Kelas
Ruang
Sesi

Info Ujian
  • Gunakan tombol Refresh untuk merefresh halaman
  • RESET WAKTU. Jika siswa logout sebelum selesai dan tidak melanjutkan sampai waktu ujian habis maka akan ditolak, jika ingin melanjutkan maka harus reset waktu.
  • Aksi RESET IZIN untuk mengizinkkan siswa mengerjakan ujian di perangkat berbeda.
  • Aksi PAKSA SELESAI untuk memaksa siswa menyelesaikan ujian.
  • Aksi ULANG untuk mengulang ujian siswa dari awal.
  • Terapkan Aksi untuk menerapkan aksi terpilih ke setiap siswa yang dipilih
ion_auth->is_admin() ? '' : 'd-none'; ?>
'reset')) ?> PK\\}u}}cbt/sesi/edit.phpnu[
nama_sesi); ?>
PK\\%7 ^cbt/sesi/data.phpnu[

'bulk')); ?>
No. Sesi Kode Waktu Aksi
'create')) ?> 'update')) ?> PK\\44cbt/banksoal/detail.phpnu[
Tambah/Edit Soal
jenis == "1") { $soals_pg[] = $soal; } elseif ($soal->jenis == "2") { $soals_pg2[] = $soal; } elseif ($soal->jenis == "3") { $soals_jodohkan[] = $soal; } elseif ($soal->jenis == "4") { $soals_isian[] = $soal; } elseif ($soal->jenis == "5") { $soals_essai[] = $soal; } } $badge_success = ''; $badge_danger = ''; $total_pg = count($soals_pg); $total_pg_tampil = isset(array_count_values(array_column($soals_pg, 'tampilkan'))['1']) ? array_count_values(array_column($soals_pg, 'tampilkan'))['1'] : 0; $badge_pg = $total_pg_tampil < $bank->tampil_pg ? $badge_danger : $badge_success; $total_pg2 = count($soals_pg2); $total_pg2_tampil = isset(array_count_values(array_column($soals_pg2, 'tampilkan'))['1']) ? array_count_values(array_column($soals_pg2, 'tampilkan'))['1'] : 0; $badge_pg2 = $total_pg2_tampil < $bank->tampil_kompleks ? $badge_danger : $badge_success; $total_jodohkan = count($soals_jodohkan); $total_jodohkan_tampil = isset(array_count_values(array_column($soals_jodohkan, 'tampilkan'))['1']) ? array_count_values(array_column($soals_jodohkan, 'tampilkan'))['1'] : 0; $badge_jodohkan = $total_jodohkan_tampil < $bank->tampil_jodohkan ? $badge_danger : $badge_success; $total_isian = count($soals_isian); $total_isian_tampil = isset(array_count_values(array_column($soals_isian, 'tampilkan'))['1']) ? array_count_values(array_column($soals_isian, 'tampilkan'))['1'] : 0; $badge_isian = $total_isian_tampil < $bank->tampil_isian ? $badge_danger : $badge_success; $total_essai = count($soals_essai); $total_essai_tampil = isset(array_count_values(array_column($soals_essai, 'tampilkan'))['1']) ? array_count_values(array_column($soals_essai, 'tampilkan'))['1'] : 0; $badge_essai = $total_essai_tampil < $bank->tampil_esai ? $badge_danger : $badge_success; $total_soal_tampil = isset(array_count_values(array_column($soals, 'tampilkan'))['1']) ? array_count_values(array_column($soals, 'tampilkan'))['1'] : 0; $total_soal_seharusnya_tampil = $bank->tampil_pg + $bank->tampil_kompleks + $bank->tampil_jodohkan + $bank->tampil_isian + $bank->tampil_esai; //echo '
';
                    //var_dump($total_soal_seharusnya_tampil);
                    //var_dump($total_soal_tampil);
                    //echo '
'; // $tampil_kurang = ($total_pg_tampil + $total_pg2_tampil + $total_jodohkan_tampil + $total_isian_tampil + $total_essai_tampil) < $total_soal_seharusnya_tampil; $soal_kurang = $total_pg_tampil <> $bank->tampil_pg && $total_pg2_tampil <> $bank->tampil_kompleks && $total_jodohkan_tampil <> $bank->tampil_jodohkan && $total_isian_tampil <> $bank->tampil_isian && $total_essai_tampil <> $bank->tampil_esai; $status_soal = $soal_kurang || $tampil_kurang ? 'Belum Selesai' : 'SELESAI'; $ket_soal = count($soals) < $total_soal_seharusnya_tampil ? 'pembuatan soal masih kurang' : ($tampil_kurang ? 'soal yang ditampilkan masih kurang' : ($soal_kurang ? 'soal yang ditampilkan tidak sama dengan seharusnya' : 'soal sudah cukup dan siap digunakan')); $bg_color = $total_soal_tampil < $total_soal_seharusnya_tampil ? 'bg-danger' : 'bg-success'; $jk = json_decode(json_encode($bank->bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } //var_dump($check_soal); ?>
  • Kode Bank Soal bank_kode ?>
  • Mata Pelajaran nama_mapel ?>
  • Guru nama_guru ?>
  • Kelas
  • Total Seharusnya
  • Total Soal dibuat
  • Total ditampilkan
  • Ket.
Pembuatan Soal

Jika keteragan pembuatan soal sudah SELESAI tapi tidak muncul di akun siswa, klik tombol Simpan Soal Terpilih di bawah
digunakan > 0 || $total_siswa > 0; $dis = $disable_delete ? 'disabled' : ''; ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Pilihan Ganda Seharusnya tampil_pg ?> bobot_pg ?> bobot_pg > 0 ? round(($bank->bobot_pg / max($total_pg_tampil, $bank->tampil_pg)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
    tampil_pg) : ?>
  • Soal PILIHAN GANDA masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
  • 0 && $bank->tampil_pg == '0') : ?>
  • Ada soal PILIHAN GANDA tapi tidak ada yang ditampilkan.
  • $bank->tampil_pg) : ?>
  • Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.
  • digunakan > 0) : ?>
  • Soal sudah dijadwalkan, tidak bisa menghapus dan memilih ulang butir soal.
  • 0) : ?>
  • Soal sedang digunakan oleh siswa, tidak bisa menghapus dan memilih ulang butir soal.

0) : ?> 'select-pg')) ?>
>
Jumlah PG terpilih:
tampilkan == 1 ? 'checked' : ''; ?>
>

nomor_soal ?>.

soal ?>

  • ', '

    '], '', $s->opsi_a ?? '') ?>
  • ', '

    '], '', $s->opsi_b ?? '') ?>
  • ', '

    '], '', $s->opsi_c ?? '') ?>
  • opsi == '4') : ?>
  • ', '

    '], '', $s->opsi_d ?? '') ?>
  • opsi == '5') : ?>
  • ', '

    '], '', $s->opsi_d ?? '') ?>
  • ', '

    '], '', $s->opsi_e ?? '') ?>
Jawaban: jawaban ?? '') ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Pil. Ganda Kompleks Seharusnya tampil_kompleks ?> bobot_kompleks ?> bobot_kompleks > 0 ? round(($bank->bobot_kompleks / max($total_pg2_tampil, $bank->tampil_kompleks)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
    tampil_kompleks) : ?>
  • Soal PILIHAN GANDA KOMPLEKS masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
  • 0 && $bank->tampil_kompleks == '0') : ?>
  • Ada soal PILIHAN GANDA KOMPLEKS tapi tidak ada yang ditampilkan.
  • $bank->tampil_kompleks) : ?>
  • Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.
  • digunakan > 0) : ?>
  • Soal sudah dijadwalkan, tidak bisa menghapus dan memilih ulang butir soal.
  • 0) : ?>
  • Soal sedang digunakan oleh siswa, tidak bisa menghapus dan memilih ulang butir soal.

0) : ?> 'select-pg2')) ?>
>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>

nomor_soal ?>.

soal ?>

opsi_a ?? ''); $jawabs = unserialize($s->jawaban ?? ''); $jwb_pg2 = ''; if ($jawabs) { $jwb_pg2 = implode(', ', array_filter($jawabs)); } if ($opsis) : ?>
  • ', '

    '], '', $opsis[$abjad]) : 'null' ?>
Jawaban:
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Menjodohkan Seharusnya tampil_jodohkan ?> bobot_jodohkan ?> bobot_jodohkan > 0 ? round(($bank->bobot_jodohkan / max($total_jodohkan_tampil, $bank->tampil_jodohkan)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
    tampil_jodohkan) : ?>
  • Soal MENJODOHKAN masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
  • 0 && $bank->tampil_jodohkan == '0') : ?>
  • Ada soal MENJODOHKAN tapi tidakada yang ditampilkan.
  • $bank->tampil_jodohkan) : ?>
  • Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.
  • digunakan > 0) : ?>
  • Soal sudah dijadwalkan, tidak bisa menghapus dan memilih ulang butir soal.
  • 0) : ?>
  • Soal sedang digunakan oleh siswa, tidak bisa menghapus dan memilih ulang butir soal.

0) : ?> 'select-jodohkan')) ?>
>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>

nomor_soal ?>.

soal ?>

jawaban ?? ''); if (!isset($jawaban['jawaban'])) $jawaban['jawaban'] = []; ?>
Jawaban:
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Isian Singkat Seharusnya tampil_isian ?> bobot_isian ?> bobot_isian > 0 ? round(($bank->bobot_isian / max($total_isian_tampil, $bank->tampil_isian)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
    tampil_isian) : ?>
  • Soal ISIAN SINGKAT masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
  • 0 && $bank->tampil_isian == '0') : ?>
  • Ada soal ISIAN SINGKAT tapi tidak ada yang ditampilkan.
  • $bank->tampil_isian) : ?>
  • Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.
  • digunakan > 0) : ?>
  • Soal sudah dijadwalkan, tidak bisa menghapus dan memilih ulang butir soal.
  • 0) : ?>
  • Soal sedang digunakan oleh siswa, tidak bisa menghapus dan memilih ulang butir soal.

0) : ?> 'select-isian')) ?>
>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>

nomor_soal ?>.

soal ?>

Jawaban: jawaban ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Uraian/Essai Seharusnya tampil_esai ?> bobot_esai ?> bobot_esai > 0 ? round(($bank->bobot_esai / max($total_essai_tampil, $bank->tampil_esai)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
    tampil_esai) : ?>
  • Soal ESSAI masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
  • 0 && $bank->tampil_esai == '0') : ?>
  • Ada soal ESSAI tapi tidak ada yang ditampilkan.
  • $bank->tampil_esai) : ?>
  • Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.
  • digunakan > 0) : ?>
  • Soal sudah dijadwalkan, tidak bisa menghapus dan memilih ulang butir soal.
  • 0) : ?>
  • Soal sedang digunakan oleh siswa, tidak bisa menghapus dan memilih ulang butir soal.

0) : ?> 'select-essai')) ?>
>
Jumlah Essai terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>

nomor_soal ?>.

soal ?>

Jawaban: jawaban ?>

I. Soal Pilihan Ganda

50 ? count($soals_pg) : 50; for ($i = 0; $i < $rows1; $i++) : $s = isset($soals_pg[$i]) ? (array)$soals_pg[$i] : [ 'nomor_soal' => $i + 1, 'soal' => '', 'opsi_a' => '', 'opsi_b' => '', 'opsi_c' => '', 'opsi_d' => '', 'opsi_e' => '', 'jawaban' => '' ] ?>
NO SOAL JENIS OPSI JAWABAN KUNCI
1 A

 

II. Soal Pilihan Ganda Kompleks

10 ? count($soals_pg2) : 10; for ($sp = 0; $sp < $rows2; $sp++) : $s = isset($soals_pg2[$sp]) ? $soals_pg2[$sp] : json_decode(json_encode([ 'jawaban' => serialize([]), 'nomor_soal' => $sp + 1, 'soal' => '', 'opsi_a' => serialize(['a' => '', 'b' => '', 'c' => '']) ])); $opsis = unserialize($s->opsi_a ?? ''); $opsis = $opsis ? $opsis : ['a'=>'','b'=>'','c'=>'']; $rows = $opsis ? count($opsis) : 3; $jawabs = $opsis ? unserialize($s->jawaban ?? '') : []; $bg = $s->nomor_soal % 2 == 0 ? '#FFFFFF' : '#F2F2F2'; //if ($opsis) : ?>
NO SOAL JENIS OPSI JAWABAN KUNCI
nomor_soal ?> soal ?> 2 A

 

III. Soal Menjodohkan

10 ? count($soals_jodohkan) : 10; for ($sj = 0; $sj < $rows3; $sj++) : $s = isset($soals_jodohkan[$sj]) ? $soals_jodohkan[$sj] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $sj + 1, 'soal' => ''] )); $count++; $bg = $count % 2 == 0 ? '#FFFFFF' : '#F2F2F2'; $jawaban = isset($s->jawaban) ? unserialize($s->jawaban ?? '') : []; if (isset($jawaban['jawaban']) && $jawaban['jawaban'] != null) { foreach ($jawaban['jawaban'] as $kk => $jwbn) { $jawaban['jawaban'][$kk] = (array)$jwbn; } } $jml_kolom = $jawaban && isset($jawaban['jawaban']) && $jawaban['jawaban'] != null ? count((array)$jawaban['jawaban'][0]) : 0; $jml_baris = $jawaban ? count($jawaban['jawaban']) : 0; $rows = $jml_kolom > 0 && $jml_baris > 0 ? max(($jml_kolom - 1), ($jml_baris - 1)) : 5; $jwb_benar = []; if (isset($jawaban['jawaban']) && $jawaban['jawaban'] != null) { foreach ($jawaban['jawaban'] as $kk => $jb) { foreach ($jb as $ki => $item) { if ($item == '1') $jwb_benar[$kk][] = strtoupper(chr($ki + 96)); } } } ?>
NO SOAL JENIS BARIS KOLOM KUNCI
KODE NAMA BARIS KODE NAMA KOLOM KODE BARIS KODE KOLOM
nomor_soal ?> soal; ?> 3

 

IV. Soal Isian Singkat

10 ? count($soals_jodohkan) : 10; for ($si = 0; $si < $rows4; $si++) : $s = isset($soals_isian[$si]) ? $soals_isian[$si] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $si + 1, 'soal' => ''] )); $count++; ?>
NO SOAL JENIS JAWABAN BENAR
nomor_soal ?> soal ?> 4 jawaban ?>

 

V. Soal Essai

10 ? count($soals_essai) : 10; for ($se = 0; $se < $rows4; $se++) : $s = isset($soals_essai[$se]) ? $soals_essai[$se] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $se + 1, 'soal' => ''] )); //foreach ($soals_essai as $s) : $count++; ?>
NO SOAL JENIS JAWABAN BENAR
nomor_soal ?> soal ?> 5 jawaban ?>

 

 

'up')) ?> PK\\o\\cbt/banksoal/soal.phpnu[file ?? ''); if ($att !== false) { $dataFileAttach = unserialize($soal->file ?? ''); } $pg_belum_komplit = []; $pg2_belum_komplit = []; $jodohkan_belum_komplit = []; $isian_belum_komplit = []; $essai_belum_komplit = []; foreach ($soal_belum_komplit as $key => $value) { if ($value->jenis == '1') { array_push($pg_belum_komplit, $value->nomor_soal); } elseif ($value->jenis == '2') { array_push($pg2_belum_komplit, $value->nomor_soal); } elseif ($value->jenis == '3') { array_push($jodohkan_belum_komplit, $value->nomor_soal); } elseif ($value->jenis == '4') { array_push($isian_belum_komplit, $value->nomor_soal); } else { array_push($essai_belum_komplit, $value->nomor_soal); } } $soal_pg_ada = []; $soal_pg2_ada = []; $soal_jodohkan_ada = []; $soal_isian_ada = []; $soal_esai_ada = []; foreach ($soal_ada as $key => $value) { if ($value->jenis == '1') { array_push($soal_pg_ada, $value->nomor_soal); } elseif ($value->jenis == '2') { array_push($soal_pg2_ada, $value->nomor_soal); } elseif ($value->jenis == '3') { array_push($soal_jodohkan_ada, $value->nomor_soal); } elseif ($value->jenis == '4') { array_push($soal_isian_ada, $value->nomor_soal); } else { array_push($soal_esai_ada, $value->nomor_soal); } } ?>
Bank Soal: bank_kode . ' | PG: ' . $bank->tampil_pg . ', Essai: ' . $bank->tampil_esai ?>
'create')) ?>
PG NOMOR:
nomor_soal == null ? 0 : $jml_pg->nomor_soal; for ($i = 0; $i < $tpg; $i++) : ?> Tambah PG
SOAL NOMOR:
nomor_soal == null ? 0 : $jml_pg2->nomor_soal; $no2 = 1; for ($i = 0; $i < $tpg2; $i++) : ?> Tambah PG Kompleks
SOAL NOMOR:
nomor_soal == null ? 0 : $jml_jodohkan->nomor_soal; for ($i = 0; $i < $tej; $i++) : ?> Tambah Soal Menjodohkan
SOAL NOMOR:
nomor_soal == null ? 0 : $jml_isian->nomor_soal; for ($i = 0; $i < $tei; $i++) : ?> Tambah Soal Isian
ESSAI NOMOR:
nomor_soal == null ? 0 : $jml_essai->nomor_soal; for ($i = 0; $i < $tes; $i++) : ?> Tambah Essai
Belum ada soal
Soal Nomor: 1
opsi == 4) { $opsis ['d'] = 'D'; $rangeAbjad = range('a', 'd'); } elseif ($bank->opsi == 5) { $opsis ['d'] = 'D'; $opsis ['e'] = 'E'; $rangeAbjad = range('a', 'e'); } else { $rangeAbjad = range('a', 'c'); }; ?>

Jawaban

Maksimal 20 KOLOM dan 20 BARIS
'addfile')) ?> PK\\*P*Pcbt/banksoal/import.phpnu[

Upload Soal nama_mapel . " kelas " . $bank->bank_level ?>
'formPreviewWord')); ?>
'grouping')) ?>
PK\\vy2 2 cbt/banksoal/data.phpnu[

Kode Warna:
Tidak digunakan (bisa dihapus)
Digunakan jadwal
Digunakan siswa

Filter:
'hapus_semua')) ?>
id_tp]) && isset($banks[$tp_active->id_tp][$smt_active->id_smt]) && count($banks[$tp_active->id_tp][$smt_active->id_smt]) > 0) :?> id_tp][$smt_active->id_smt] as $bank): ?> bank_kelas)); $data = @unserialize($jk ?? ''); $jumlahKelas = json_decode(json_encode($data)); $jks = []; $kelasbank = ''; foreach ((array)$jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { $kelasbank .= '' . $k->nama_kelas . ' '; } } } $terpakai = true; $bgRandom = 'text-maroon'; $disable_edit = 'btn-disabled'; if ($bank->digunakan == '0') { $bgRandom = 'text-gray'; $disable_edit = ''; } else { $terpakai = isset($total_siswa[$bank->id_bank]); $bgRandom = $terpakai ? 'text-maroon' : 'text-yellow'; $disable_edit = $terpakai ? 'btn-disabled' : $disable_edit; } ?>
No. Kode Mapel Kelas Aksi
bank_kode ?> nama_mapel ?> total_soal == 0) : ?> Buat Soal Detail
0) : ?> bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $jks = []; $kelasbank = ''; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { $kelasbank .= '' . $k->nama_kelas . ' '; } } } $terpakai = true; $bgRandom = 'bg-gradient-maroon'; $disable_edit = 'btn-disabled'; if ($bank->digunakan == '0') { $bgRandom = 'bg-gradient-gray'; $disable_edit = ''; } else { $terpakai = isset($total_siswa[$bank->id_bank]); $bgRandom = $terpakai ? 'bg-gradient-maroon' : 'bg-gradient-yellow'; $disable_edit = $terpakai ? 'btn-disabled' : $disable_edit; } ?>
No. Kode Mapel Kelas Aksi
bank_kode ?> nama_mapel ?> total_soal == 0) : ?> Buat Soal Detail Soal
id_tp]) && isset($banks[$tp_active->id_tp][$smt_active->id_smt]) && count($banks[$tp_active->id_tp][$smt_active->id_smt]) > 0) : foreach ($banks[$tp_active->id_tp][$smt_active->id_smt] as $bank) : $terpakai = true; $bgRandom = 'bg-gradient-maroon'; $disable_edit = 'btn-disabled'; if ($bank->digunakan == '0') { $bgRandom = 'bg-gradient-gray'; $disable_edit = ''; } else { $terpakai = isset($total_siswa[$bank->id_bank]); $bgRandom = $terpakai ? 'bg-gradient-maroon' : 'bg-gradient-yellow'; $disable_edit = $terpakai ? 'btn-disabled' : $disable_edit; } ?>

bank_kode ?>

bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $jks = []; $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } ?>
  • Guru nama_guru ?>
  • Mapel bank_kode ?>
  • Kelas
  • Jumlah Soal total_soal == 0 ? 'Belum dibuat' : ($bank->total_soal < ($bank->tampil_pg + $bank->tampil_esai) ? 'Belum selesai' : $bank->tampil_pg + $bank->tampil_kompleks + $bank->tampil_jodohkan + $bank->tampil_isian + $bank->tampil_esai) ?>
  • Dibuat date))) ?>
  • Status status === '0') ? 'Non Aktif' : 'Aktif' ?>
0) : foreach ($banks[0][0] as $bank) :?>

bank_kode ?>

bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk ?? ''))); $jks = []; $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } ?>
  • Guru nama_guru ?>
  • Mapel kode ?>
  • Kelas
  • Jumlah Soal total_soal == 0 ? 'Belum dibuat' : ($bank->total_soal < ($bank->tampil_pg + $bank->tampil_esai) ? 'Belum selesai' : $bank->tampil_pg + $bank->tampil_kompleks + $bank->tampil_jodohkan + $bank->tampil_isian + $bank->tampil_esai) ?>
  • Dibuat date))) ?>
  • Status status === '0') ? 'Non Aktif' : 'Aktif' ?>
sekolah ?>
KECAMATAN kecamatan ?? '') . ' KABUPATEN ' . strtoupper($setting->kota ?? '') ?>
TAHUN PELAJARAN: tahun ?? '') . ' SEMESTER ' . strtoupper($smt_active->smt ?? '') ?>


I. Soal Pilihan Ganda

 

II. Soal Pilihan Ganda Kompleks

 

II. Soal Menjodohkan

 

II. Soal Isian Singkat

 

II. Soal Uraian / Essai

PK\\ 1]]cbt/banksoal/add.phpnu[bank_kelas ?? '')); ?>

'create')) ?>
bank_kode ?>
id_bank) ?>
bank_mapel_id, 'id="select-mapel" class="select2 form-control form-control-sm" required'); ?>
bank_guru_id, 'id="select-guru" class="select2 form-control form-control-sm" required'); ?>

jenjang == "1") { for ($i = 1; $i < 7; $i++) { $arrLevel[$i] = $i; } } else if ($setting->jenjang == "2") { for ($j = 7; $j < 10; $j++) { $arrLevel[$j] = $j; } } else { for ($k = 10; $k < 13; $k++) { $arrLevel[$k] = $k; } } echo form_dropdown('level', $arrLevel, $bank->bank_level, 'id="select-level" class="form-control form-control-sm" data-placeholder="Pilih Level Kelas" required'); ?>

Soal Pilihan Ganda
opsi, 'class="form-control form-control-sm" required'); ?>
Soal Ganda Kompleks
Soal Menjodohkan
Soal Isian Singkat
Soal Uraian/Essai
Total Soal Total Bobot
0 0
soal_agama, 'class="form-control form-control-sm" required'); ?>
status, 'class="form-control form-control-sm" required'); ?>
PK\\PMoocbt/banksoal/detail-table.phpnu[
Tambah/Edit Soal
jenis == "1") { $soals_pg[] = $soal; } elseif ($soal->jenis == "2") { $soals_pg2[] = $soal; } elseif ($soal->jenis == "3") { $soals_jodohkan[] = $soal; } elseif ($soal->jenis == "4") { $soals_isian[] = $soal; } elseif ($soal->jenis == "5") { $soals_essai[] = $soal; } } $badge_success = ''; $badge_danger = ''; $total_pg = count($soals_pg); $total_pg_tampil = isset(array_count_values(array_column($soals_pg, 'tampilkan'))['1']) ? array_count_values(array_column($soals_pg, 'tampilkan'))['1'] : 0; $badge_pg = $total_pg_tampil < $bank->tampil_pg ? $badge_danger : $badge_success; $total_pg2 = count($soals_pg2); $total_pg2_tampil = isset(array_count_values(array_column($soals_pg2, 'tampilkan'))['1']) ? array_count_values(array_column($soals_pg2, 'tampilkan'))['1'] : 0; $badge_pg2 = $total_pg2_tampil < $bank->tampil_kompleks ? $badge_danger : $badge_success; $total_jodohkan = count($soals_jodohkan); $total_jodohkan_tampil = isset(array_count_values(array_column($soals_jodohkan, 'tampilkan'))['1']) ? array_count_values(array_column($soals_jodohkan, 'tampilkan'))['1'] : 0; $badge_jodohkan = $total_jodohkan_tampil < $bank->tampil_jodohkan ? $badge_danger : $badge_success; $total_isian = count($soals_isian); $total_isian_tampil = isset(array_count_values(array_column($soals_isian, 'tampilkan'))['1']) ? array_count_values(array_column($soals_isian, 'tampilkan'))['1'] : 0; $badge_isian = $total_isian_tampil < $bank->tampil_isian ? $badge_danger : $badge_success; $total_essai = count($soals_essai); $total_essai_tampil = isset(array_count_values(array_column($soals_essai, 'tampilkan'))['1']) ? array_count_values(array_column($soals_essai, 'tampilkan'))['1'] : 0; $badge_essai = $total_essai_tampil < $bank->tampil_esai ? $badge_danger : $badge_success; $total_soal_tampil = isset(array_count_values(array_column($soals, 'tampilkan'))['1']) ? array_count_values(array_column($soals, 'tampilkan'))['1'] : 0; $total_soal_seharusnya_tampil = $bank->tampil_pg + $bank->tampil_kompleks + $bank->tampil_jodohkan + $bank->tampil_isian + $bank->tampil_esai; //echo '
';
                    //var_dump($total_soal_seharusnya_tampil);
                    //var_dump($total_soal_tampil);
                    //echo '
'; // $tampil_kurang = ($total_pg_tampil + $total_pg2_tampil + $total_jodohkan_tampil + $total_isian_tampil + $total_essai_tampil) < $total_soal_seharusnya_tampil; $soal_kurang = $total_pg_tampil <> $bank->tampil_pg && $total_pg2_tampil <> $bank->tampil_kompleks && $total_jodohkan_tampil <> $bank->tampil_jodohkan && $total_isian_tampil <> $bank->tampil_isian && $total_essai_tampil <> $bank->tampil_esai; $status_soal = $soal_kurang || $tampil_kurang ? 'Belum Selesai' : 'SELESAI'; $ket_soal = count($soals) < $total_soal_seharusnya_tampil ? 'pembuatan soal masih kurang' : ($tampil_kurang ? 'soal yang ditampilkan masih kurang' : ($soal_kurang ? 'soal yang ditampilkan tidak sama dengan seharusnya' : 'soal sudah cukup dan siap digunakan')); $bg_color = $total_soal_tampil < $total_soal_seharusnya_tampil ? 'bg-danger' : 'bg-success'; $jk = json_decode(json_encode($bank->bank_kelas)); $jumlahKelas = json_decode(json_encode(unserialize($jk))); $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { foreach ($kelas as $k) { if ((isset($j->kelas_id) && isset($k->id_kelas)) && $j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; $no++; } } } //var_dump($check_soal); ?>
  • Kode Bank Soal bank_kode ?>
  • Mata Pelajaran nama_mapel ?>
  • Guru nama_guru ?>
  • Kelas
  • Total Seharusnya
  • Total Soal dibuat
  • Total ditampilkan
  • Keterangan
Pembuatan Soal

Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Pilihan Ganda Seharusnya tampil_pg ?> bobot_pg ?> bobot_pg > 0 ? round(($bank->bobot_pg / max($total_pg_tampil, $bank->tampil_pg)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
tampil_pg) : ?> Soal PILIHAN GANDA masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
0 && $bank->tampil_pg == '0') : ?> Ada soal PILIHAN GANDA tapi tidak ada yang ditampilkan.
$bank->tampil_pg) : ?> Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.

0) : ?> 'select-pg')) ?>
Jumlah PG terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>
nomor_soal ?>.
soal ?>

  • ', '

    '], '', $s->opsi_a) ?>
  • ', '

    '], '', $s->opsi_b) ?>
  • ', '

    '], '', $s->opsi_c) ?>
  • ', '

    '], '', $s->opsi_d) ?>
  • jenjang === '3') : ?>
  • ', '

    '], '', $s->opsi_e) ?>
Jawaban: jawaban) ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Pil. Ganda Kompleks Seharusnya tampil_kompleks ?> bobot_kompleks ?> bobot_kompleks > 0 ? round(($bank->bobot_kompleks / max($total_pg2_tampil, $bank->tampil_kompleks)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
tampil_kompleks) : ?> Soal PILIHAN GANDA KOMPLEKS masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
0 && $bank->tampil_kompleks == '0') : ?> Ada soal PILIHAN GANDA KOMPLEKS tapi tidak ada yang ditampilkan.
$bank->tampil_kompleks) : ?> Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.

0) : ?> 'select-pg2')) ?>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>
nomor_soal ?>.
soal ?>
opsi_a); $jawabs = unserialize($s->jawaban); $jwb_pg2 = ''; if ($jawabs) { $jwb_pg2 = implode(', ', $jawabs); } if ($opsis) : ?>
  • ', '

    '], '', $opsis[$abjad]) ?>
Jawaban:
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Menjodohkan Seharusnya tampil_jodohkan ?> bobot_jodohkan ?> bobot_jodohkan > 0 ? round(($bank->bobot_jodohkan / max($total_jodohkan_tampil, $bank->tampil_jodohkan)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
tampil_jodohkan) : ?> Soal MENJODOHKAN masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
0 && $bank->tampil_jodohkan == '0') : ?> Ada soal MENJODOHKAN tapi tidakada yang ditampilkan.
$bank->tampil_jodohkan) : ?> Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.

0) : ?> 'select-jodohkan')) ?>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>
nomor_soal ?>.
soal ?>
jawaban); if (!isset($jawaban['jawaban'])) $jawaban['jawaban'] = []; ?>
Jawaban:
'>
$items) : if ($nomor === 0) : ?> $val) : $jbenar = $val == "0" ? '' : ($val == "1" ? '✔' : '' . $val . '') ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Isian Singkat Seharusnya tampil_isian ?> bobot_isian ?> bobot_isian > 0 ? round(($bank->bobot_isian / max($total_isian_tampil, $bank->tampil_isian)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
tampil_isian) : ?> Soal ISIAN SINGKAT masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
0 && $bank->tampil_isian == '0') : ?> Ada soal ISIAN SINGKAT tapi tidak ada yang ditampilkan.
$bank->tampil_isian) : ?> Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.

0) : ?> 'select-isian')) ?>
Jumlah Soal terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>
nomor_soal ?>.
soal ?>
Jawaban: jawaban) ?>
Jenis Soal Jumlah Soal Bobot Nilai Point Per-nomor
Uraian/Essai Seharusnya tampil_esai ?> bobot_esai ?> bobot_esai > 0 ? round(($bank->bobot_esai / max($total_essai_tampil, $bank->tampil_esai)), 2) : 0 ?>
Telah dibuat
Ditampilkan
Info :
tampil_esai) : ?> Soal ESSAI masih kurang, klik tombol ( Tambah/Edit Soal) untuk menambahkan.
0 && $bank->tampil_esai == '0') : ?> Ada soal ESSAI tapi tidak ada yang ditampilkan.
$bank->tampil_esai) : ?> Jumlah soal yang ditampilkan tidak sama dengan jumlah seharusnya.

0) : ?> 'select-essai')) ?>
Jumlah Essai terpilih:
tampilkan == 1 ? 'checked' : '' ?>
>
nomor_soal ?>.
soal ?>
Jawaban: jawaban ?>

I. Soal Pilihan Ganda

50 ? count($soals_pg) : 50; for ($i = 0; $i < $rows1; $i++) : $s = isset($soals_pg[$i]) ? (array)$soals_pg[$i] : [ 'nomor_soal' => $i + 1, 'soal' => '', 'opsi_a' => '', 'opsi_b' => '', 'opsi_c' => '', 'opsi_d' => '', 'opsi_e' => '', 'jawaban' => '' ] ?>
NO SOAL JENIS OPSI JAWABAN KUNCI
1 A

 

II. Soal Pilihan Ganda Kompleks

10 ? count($soals_pg2) : 10; for ($sp = 0; $sp < $rows2; $sp++) : $s = isset($soals_pg2[$sp]) ? $soals_pg2[$sp] : json_decode(json_encode([ 'jawaban' => serialize([]), 'nomor_soal' => $sp + 1, 'soal' => '', 'opsi_a' => serialize(['a' => '', 'b' => '', 'c' => '']) ])); $opsis = unserialize($s->opsi_a); $rows = $opsis ? count($opsis) : 3; $jawabs = unserialize($s->jawaban); $bg = $s->nomor_soal % 2 == 0 ? '#FFFFFF' : '#F2F2F2'; //if ($opsis) : ?>
NO SOAL JENIS OPSI JAWABAN KUNCI
nomor_soal ?> soal ?> 2 A

 

III. Soal Menjodohkan

10 ? count($soals_jodohkan) : 10; for ($sj = 0; $sj < $rows3; $sj++) : $s = isset($soals_jodohkan[$sj]) ? $soals_jodohkan[$sj] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $sj + 1, 'soal' => ''] )); $count++; $bg = $count % 2 == 0 ? '#FFFFFF' : '#F2F2F2'; $jawaban = isset($s->jawaban) ? unserialize($s->jawaban) : []; if ($jawaban['jawaban'] != null) { foreach ($jawaban['jawaban'] as $kk => $jwbn) { $jawaban['jawaban'][$kk] = (array)$jwbn; } } $jml_kolom = $jawaban && isset($jawaban['jawaban']) && $jawaban['jawaban'] != null ? count((array)$jawaban['jawaban'][0]) : 0; $jml_baris = $jawaban ? count($jawaban['jawaban']) : 0; $rows = $jml_kolom > 0 && $jml_baris > 0 ? max(($jml_kolom - 1), ($jml_baris - 1)) : 5; $jwb_benar = []; if ($jawaban['jawaban'] != null) { foreach ($jawaban['jawaban'] as $kk => $jb) { foreach ($jb as $ki => $item) { if ($item == '1') $jwb_benar[$kk][] = strtoupper(chr($ki + 96)); } } } ?>
NO SOAL JENIS BARIS KOLOM KUNCI
KODE NAMA BARIS KODE NAMA KOLOM KODE BARIS KODE KOLOM
nomor_soal ?> soal; ?> 3

 

IV. Soal Isian Singkat

10 ? count($soals_jodohkan) : 10; for ($si = 0; $si < $rows4; $si++) : $s = isset($soals_isian[$si]) ? $soals_isian[$si] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $si + 1, 'soal' => ''] )); $count++; ?>
NO SOAL JENIS JAWABAN BENAR
nomor_soal ?> soal ?> 4 jawaban ?>

 

V. Soal Essai

10 ? count($soals_essai) : 10; for ($se = 0; $se < $rows4; $se++) : $s = isset($soals_essai[$se]) ? $soals_essai[$se] : json_decode(json_encode( ['jawaban' => '', 'nomor_soal' => $se + 1, 'soal' => ''] )); //foreach ($soals_essai as $s) : $count++; ?>
NO SOAL JENIS JAWABAN BENAR
nomor_soal ?> soal ?> 5 jawaban ?>

 

 

PK\\0Μcbt/ruang/data.phpnu[

'bulk')); ?>
No. Kelompok/Ruang Ujian Kode Ruang Jum. Sesi Aksi
'create')) ?> 'update')) ?> PK\\oڄE8E8cbt/alokasi/data.phpnu[


0) : if ($jenis_selected != null) :?> bank_kelas ?? ''))); $kls_jadwal = []; $kelasbank = ''; $no = 1; foreach ($jumlahKelas as $j) { if (isset($kelas[$j->kelas_id])) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $kelas[$j->kelas_id]; $no++; } } ?>
Hari & Tanggal Level Kelas Jadwal / Mata Pelajaran Jam ke
tgl_mulai))) ?> bank_level ?> () bank_kode . ' (' . $jadwal->nama_mapel . ')' ?>
'simpanalokasi')) ?>
PK\\z cbt/index.htmlnu[ 404 - Resource not found

WAK WAWWWW !!!

"Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

PK\\HˆQQcbt/cetak/beritaacara.phpnu[
Setting Kop
'set-kop')) ?>
Cetak
Kelas
Ruang
Sesi
Jadwal


PK\\ 5055cbt/cetak/peserta_bak.phpnu[
Cetak
Kelas
Ruang
Sesi
Jenis Ujian


PK\\oӞ?B?Bcbt/cetak/pengawas.phpnu[

PK\\x:x:cbt/cetak/peserta.phpnu[
Cetak
Kelas
Ruang
Sesi
Jenis Ujian


PK\\6{""cbt/cetak/data.phpnu[
Cetak
ion_auth->is_admin(); $dnone = $isAdmin ? '' : 'd-none'; if ($isAdmin || (isset($guru) && isset($ids_pengawas) && in_array($guru->id_guru, $ids_pengawas))) : ?>
Halaman CETAK hanya untuk PENGAWAS UJIAN
PK\\CTTcbt/cetak/pesertaujian.phpnu[
Cetak
Jenis Ujian
PK\\ >>cbt/cetak/kop.phpnu[

Setting Kop
'set-logo-kanan')) ?>
'set-logo-kiri')) ?>
'set-tandatangan')) ?>
'set-kop')) ?>
PK\\cccbt/cetak/kartu.phpnu[
Setting Kartu
'set-kartu')) ?>
Preview
Logo kiri
header_1) ? $kartu->header_1 : '' ?>
header_2) ? $kartu->header_2 : '' ?>
header_3) ? $kartu->header_3 : '' ?>
header_4) ? $kartu->header_4 : '' ?>
Logo kanan
Nomor Peserta : 0000.00.000
Nama : Nama Siswa
NIS/NISN : 012334455
Kelas : IXA
Ruang/Sesi : 1/2
Username : umbk001
Password : umbk001
kota ?>, tanggal) ? $kartu->tanggal : '' ?>
Kepala satuan_pendidikan == '2' ? 'Madrasah' : 'Sekolah' ?>


kepsek ?>

NIP: nip_kepsek == '1' ? $setting->nip : '-' ?>


Cetak
Preview
PK\\꘧-o-ocbt/cetak/absen.phpnu[
'set-kop')) ?>
Setting Kop Daftar Kehadiran
Cetak
Kelas
Ruang
Sesi
Jadwal


PK\\?--cbt/pengawas/data.phpnu[

'; //var_dump($tgl_jadwals); //echo ''; if (count($tgl_jadwals) > 0) : foreach ($tgl_jadwals as $tgl=>$jadwals) :?> $sesis) : foreach ($sesis as $sesi) : foreach ($jadwals as $idmpl => $jadwal): $listIdJad = []; $total_peserta = 0; foreach ($jadwal as $jdw) { $listIdJad[] = $jdw->id_jadwal; $bank_kelass = $jdw->bank_kelas; foreach ($bank_kelass as $bank_kelas) { foreach ($jdw->peserta as $peserta) { $cnt = isset($peserta[$ruang]) && isset($peserta[$ruang][$sesi->sesi_id]) ? count($peserta[$ruang][$sesi->sesi_id]) : 0; if ($bank_kelas['kelas_id'] != null && $cnt > 0) { $total_peserta += $cnt; } } } } if ($total_peserta > 0) : ?>
Hari / Tanggal Ruang Sesi Mata Pelajaran Pengawas
tgl_mulai))) ?> nama_ruang ?> nama_sesi ?> nama_mapel ?> id_jadwal; $sel = isset($pengawas[$idJad]) && isset($pengawas[$idJad][$ruang]) && isset($pengawas[$idJad][$ruang][$sesi->sesi_id]) ? explode(',', $pengawas[$idJad][$ruang][$sesi->sesi_id]->id_guru) : []; echo form_dropdown( 'pengawas[]', $gurus, $sel, 'style="width: 100%" class="select2 form-control form-control-sm pengawas" multiple="multiple" data-placeholder="Pilih Pengawas" required' ); ?>
'savepengawas')) ?>
PK\\cbt/rekap/olah.phpnu[ '', 'nama_mapel' => ''])); } $XA = isset($convert) ? $convert['xa'] : 0; $XB = isset($convert) ? $convert['xb'] : 20; $YA = isset($convert) ? $convert['ya'] : 100; $YB = isset($convert) ? $convert['yb'] : 60; $colWidth = ''; function decimalFixed($num) { return round(($num * 100) / 100, 2); } ?>
Kelas

tampil_pg; $s++) { $colWidth .= ',4'; } $colWidth .= ',10,10,10'; $jml_soal = $rekap->tampil_pg + $rekap->soal_kompleks->tampil + $rekap->soal_jodohkan->tampil + $rekap->soal_isian->tampil + $rekap->soal_essai->tampil; $cols = [$rekap->tampil_pg, $rekap->soal_kompleks->tampil, $rekap->soal_jodohkan->tampil, $rekap->soal_isian->tampil, $rekap->soal_essai->tampil]; $cols = array_filter($cols); $rows = count($cols) > 1 ? 1 : 2; ?>
jawaban_pg; ?> tampil_pg > 0) : ?> tampil_pg > 0) : for ($s = 0; $s < $rekap->tampil_pg; $s++) : ?> soal_kompleks->tampil > 0) :?> soal_jodohkan->tampil > 0) :?> soal_isian->tampil > 0) :?> soal_essai->tampil > 0) :?> id_siswa; $jwb_pgs = $siswa->jawaban_pg; $total = $siswa->nilai_pg + $siswa->soal_kompleks->nilai + $siswa->soal_jodohkan->nilai + $siswa->soal_isian->nilai + $siswa->soal_essai->nilai; $nilai_convert = decimalFixed($total); if (isset($convert)) { //((YA-YB)/(XA-XB))*(NX-XB)+YB $nilai_convert = decimalFixed(((($YA - $YB) / 100) * $nilai_convert) + $YB); } else { if ($nilai_convert > $XA) { $XA = $nilai_convert; } if ($nilai_convert < $XB) { $XB = $nilai_convert; } //$nilai_pg = $skor_pg; $nilai_convert = decimalFixed($total); } ?> tampil_pg > 0) : $benar_pg = 0; $salah_pg = 0; foreach ($soal_pgs as $key => $benar) : $bg1 = '#FF7043'; $bg2 = 'data-fill-color="FF7043"'; $jwbn = ''; if (isset($jwb_pgs[$key])) { $jwbn = isset($jwb_pgs[$key]) ? $jwb_pgs[$key] : ''; if (strtoupper($benar ?? '') == strtoupper($jwb_pgs[$key] ?? '')) { $bg1 = '#00E676'; $bg2 = 'data-fill-color="00E676"'; $benar_pg++; } else { $salah_pg++; } } ?> soal_kompleks->tampil > 0) :?> soal_jodohkan->tampil > 0) :?> soal_isian->tampil > 0) :?> soal_essai->tampil > 0) :?>
Soal bank_kode ?> Mata Pelajaran nama_mapel ?>
Jenis Penilaian kode_jenis ?> Guru Pengampu nama_guru ?>
Kelas Waktu Pelaksanaan tgl_mulai))) ?> s/d tgl_selesai))) ?>
Jumlah Soal TP / SMT tp ?> smt smt ?>
No. No. Peserta Nama Nomor Soal PG Benar SKOR Nilai
PG PGK JOD IS ES Asli Katrol
nomor_peserta ?> nama ?> data-a-v="middle" data-a-h="center" data-b-a-s="thin" data-exclude="false" style="background-color: ;border: 1px solid grey;border-collapse: collapse; text-align: center;"> nilai_pg ?> soal_kompleks->nilai ?> soal_jodohkan->nilai ?> soal_isian->nilai ?> soal_essai->nilai ?>
'perbaikan-nilai')) ?> PK\\w;JnJncbt/rekap/ekspor.phpnu[

untuk semua jadwal ujian/ulangan yang sudah direkap
Tahun
tahun : '', 'id="opsi-tahun" class="form-control"' ); ?>
Semester
nama_smt : '', 'id="opsi-semester" class="form-control"' ); ?>
Penilaian
Kelas
Mapel


'bulk')) ?> PK\\!EPPcbt/rekap/data.phpnu[tgl_mulai, $b->tgl_mulai) * -1; } function my_array_unique($array, $keep_key_assoc = false) { $duplicate_keys = array(); $tmp = array(); foreach ($array as $key => $val) { // convert objects to arrays, in_array() does not support objects if (is_object($val)) $val = (array)$val; if (!in_array($val['id_jadwal'], $tmp)) $tmp[] = $val['id_jadwal']; else $duplicate_keys[] = $key; } foreach ($duplicate_keys as $key) unset($array[$key]); return $keep_key_assoc ? $array : array_values($array); } ?>

session->flashdata('rekapnilai') ?>
Ekspor Semua
bank_kelas)); $jumlahKelas = $jadwal->bank_kelas == "" ? [] : json_decode(json_encode(unserialize($jk ?? ''))); //$jks = []; $kelasbank = ''; $no = 1; $id_kelases = []; if (!empty($jumlahKelas)) { foreach ($jumlahKelas as $j) { foreach ($kelases as $k) { if ($j->kelas_id === $k->id_kelas) { if ($no > 1) { $kelasbank .= ', '; } $kelasbank .= $k->nama_kelas; array_push($id_kelases, ['id' => $k->id_kelas, 'nama' => $k->nama_kelas]); $no++; } } } } else { array_push($id_kelases, ['id' => 0, 'nama' => '']); } ?>
No. Bank Soal Jenis Mapel Kelas Pelaksanaan Nilai
bank_kode ?> kode_jenis ?> kode ?> tgl_mulai))) ?> sd tgl_selesai))) ?> rekap)) : $sudah_rekap = isset($ada_rekap[$jadwal->id_jadwal]); if ($sudah_rekap) :?> DETAIL hanya_pg) : ?>
id_jadwal][1]) && $jadwal->mengerjakan == count($koreksi[$jadwal->id_jadwal][1]) ? 'badge-success' : 'badge-danger'; ?> mengerjakan ?> mengerjakan, id_jadwal][1]) ? count($koreksi[$jadwal->id_jadwal][1]) : '0' ?> dikoreksi DETAIL
'bulk')) ?> PK\\mBCCcbt/rekap/permapel.phpnu[

Kelas
Penilaian
Tahun
Semester
Penilaian

PK\\'  cbt/token/data.phpnu[

  • Jika mengklik GENERATE NEW TOKEN segera beritahukan guru/admin lain yang sedang login agar merefresh token untuk mendapatkan token terbaru.
  • Token akan digenerate otomatis jika pilihan Otomatis: YA dan ada jadwal ujian pada hari ini.
  • Jika token otomatis maka guru yang sedang login harus merefresh token untuk melihat token terbaru
auto, 'id="auto" class="form-control"' ); ?>
auto == '0' ? 'disabled="disabled"' : '' ?>>
TOKEN SAAT INI

token ?>

Token akan dibuat otomatis dalam -- : -- : --
PK\\@ d=d=setting/datarapor.phpnu[

'; //var_dump($jabatan); //echo ''; ?>

Pilih Siswa


PK\\phhsetting/nilaiinduk.phpnu[
PK\\ +setting/manage.phpnu[

'; //var_dump($tables); //echo ''; foreach ($tables as $ket => $table) : $keterangan = $ket == '1' ? '
  • Tabel berisi data yang bisa digunakan sepanjang tahun/semester
  • ' . '
  • Sebaiknya tidak dihapus, kecuali data sudah tidak diperlukan
  • ' . '
  • Tabel otomatis dibackup ketika dihapus, lihat di menu Backup/Restore untuk melihat backup table yang dihapus
  • ' : '
  • Tabel berisi data yang hanya digunakan satu tahun/semester
  • ' . '
  • Tabel otomatis dibackup ketika dihapus, lihat di menu Backup/Restore untuk melihat backup table yang dihapus
  • '; ?>
    No. Tabel Total Data Aksi
    'delete-table')) ?> PK\\Ҿ%%setting/db.phpnu[

    Jangan merefresh/menutup halaman ini atau ke halaman lain selama proses backup berlangsung
    Jika backup gagal, gunakan cpanel untuk membackup file dan database



    RIWAYAT BACKUP
    'edittp')) ?> $a['tgl']; }); foreach ($list as $key => $value) :?>
    No. Database/File Size Tanggal Backup Aksi
    Download
    PK\\;fQeesetting/induk.phpnu[

    Cari Siswa

    PK\\T,,setting/rapor.phpnu[ ["I ~ V", "VI"], "2" => ["VII-VIII", "IX"], "3" => ["X-XI", "XII" ] ]; ?>


    'editsetting'), array('id_setting' => $rapor != null ? $rapor->id_setting : '')) ?>
    nip_kepsek) ? $rapor->nip_kepsek : '', 'class="form-control" required' ); ?>
    nip_walikelas) ? $rapor->nip_walikelas : '', 'class="form-control" required' ); ?>
    kkm_tunggal : '', 'id="tunggal" class="form-control" required' ); ?>
    PK\\z setting/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\'ĥNNsetting/data.phpnu[ ["SD", "MI"], "2" => ["SMP", "MTS"], "3" => ["SMA", "MA", "SMK"]]; ?>

    Setting
    'savesetting')) ?>

    +62
    'set-tandatangan')) ?>
    'set-logo-kiri')) ?>
    'set-logo-kanan')) ?>
    PK\\K~))auth/new_login.phpnu[ Login #8
    logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?>
    nama_aplikasi ?>
    alamat ?>

    Sign In to Colorlib

    Lorem ipsum dolor sit amet elit. Sapiente sit aut eos consectetur adipisicing.

    Forgot Password
    PK\\?sauth/forgot_password.phpnu[PK\\d" auth/login.phpnu[
    logo_kanan == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kanan; ?>
    nama_aplikasi ?>
    alamat ?>
    PK\\SD))auth/edit_group.phpnu[



    PK\\SJQQauth/reset_password.phpnu[PK\\Ŀ}}auth/deactivate_user.phpnu[

    username); ?>

    id); ?>

    $user->id]); ?>

    PK\\  auth/manage_user.phpnu[

    Manajemen Pengguna

    Generate Report
    Earnings (Monthly)
    $40,000
    Earnings (Annual)
    $215,000
    Tasks
    50%
    Pending Requests
    18
    Earnings Overview
    Revenue Sources
    Direct Social Referral
    PK\\33auth/create_group.phpnu[



    PK\\"auth/email/forgot_password.tpl.phpnu[

    PK\\Eauth/email/activate.tpl.phpnu[

    PK\\Cauth/change_password.phpnu[




    PK\\OZZauth/index.phpnu[

    first_name, ENT_QUOTES, 'UTF-8'); ?> last_name, ENT_QUOTES, 'UTF-8'); ?> email, ENT_QUOTES, 'UTF-8'); ?> groups as $group): ?> id, htmlspecialchars($group->name, ENT_QUOTES, 'UTF-8')); ?>
    active) ? anchor("auth/deactivate/" . $user->id, lang('index_active_link')) : anchor("auth/activate/" . $user->id, lang('index_inactive_link')); ?> id, 'Edit'); ?>

    |

    PK\\CyHHauth/edit_user.phpnu[







    ion_auth->is_admin()): ?>

    id); ?>

    PK\\z auth/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\Luuauth/create_user.phpnu[



    '; echo lang('create_user_identity_label', 'identity'); echo '
    '; echo form_error('identity'); echo form_input($identity); echo '

    '; } ?>






    PK\\t&&users/guru/edit.phpnu[

    ion_auth->is_admin()) : ?>
    username === $guru->username or $this->ion_auth->is_admin()) : ?>
    nama_guru ?> belum aktif
    Edit Login nama_guru ?>
    ion_auth->is_admin()) : ?>
    'change_password'), array('id' => $guru->id)) ?>
    Nama Depan
    required>
    Nama Belakang
    required>
    Email
    >
    Username
    Password

    Ubah Password & Username

    Username
    required>
    Password Lama
    >
    Password Baru
    >
    Konfirmasi Password
    >
    id === $guru->id_guru) : ?> PK\\z users/guru/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\@ͩDDusers/guru/data.phpnu[

    Master

    No. Nama Username Password Jabatan Reset Login Aksi
    PK\\*|lCCusers/admin/edit.phpnu[
    ion_auth->is_admin()) : ?>
    'user_info'), array('id' => $users->id)) ?>

    id === $users->id || $this->ion_auth->is_admin()) : ?>

    Foto Profile

    'set-foto')) ?>
    'change_password'), array('id' => $users->id)) ?>

    Ubah Password

    id === $users->id) : ?> PK\\z users/admin/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\CCusers/admin/data.phpnu[

    No. First Name Last Name Username Email Level Created On Status Action
    'create')) ?> PK\\Ξ users/edit.phpnu[
    ion_auth->is_admin()) : ?>
    'user_info'), array('id' => $users->id)) ?>

    Data User

    id !== $users->id) : ?>
    'user_level'), array('id' => $users->id)) ?>

    Level

    'user_status'), array('id' => $users->id)) ?>

    Status

    id === $users->id) : ?>
    'change_password'), array('id' => $users->id)) ?>

    Ubah Password

    id === $users->id) : ?> PK\\z users/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\>BBusers/data.phpnu[

    Manajemen Pengguna

    Administrator
    Executive
    Guru
    Pengawas

    Master

    No. First Name Last Name Username Email Level Created On Status Action
    No. First Name Last Name Username Email Level Created On Status Action
    PK\\̰users/siswa/edit.phpnu[

    ion_auth->is_admin()) : ?>

    Detail Data Siswa

    Ubah Password & Username

    session->flashdata('editsiswa') ?> 'editsiswa'), array('method' => 'edit', 'id_siswa' => $siswa->id_siswa)) ?>
    Username
    Password Lama
    Password Baru
    Konfirmasi Password
    PK\\z users/siswa/index.htmlnu[ 404 - Resource not found

    WAK WAWWWW !!!

    "Ketika kita sakit hati atas perbuatan orang lain, pada saat yang sama kita belajar untuk menjaga perasaan orang lain"

    PK\\(,DDusers/siswa/data.phpnu[

    Master

    'bulk')); ?>
    No. NIS Nama Kelas Username Password Reset Login Status/Aksi
    'pager')); ?> PK\\}disable_login.phpnu[ Garuda CBT logo_kiri == null ? base_url() . 'assets/img/favicon.png' : base_url() . $setting->logo_kiri; ?>
    arudaCBT

    PKM*\cժreference/educations.phpnu[PKM*\ڵreference/special_needs.phpnu[PKM*\ϔfddfeed.phpnu[PKM*\scholarships.phpnu[PKM*\Q#F fbackend/index.phpnu[PKM*\?ǧ##6backend/grid_index.phpnu[PKM*\FSSFbackend/sidebar.phpnu[PKM*\1DDposts_create.phpnu[PKM*\5]  achievements.phpnu[PKM*\!Dv$themes/sky_light/polling-results.phpnu[PKM*\N >themes/sky_light/contact-us.phpnu[PKM*\==#9themes/sky_light/loop-employees.phpnu[PKM*\2:#themes/sky_light/opening-speech.phpnu[PKM*\oEJh h 4themes/sky_light/home.phpnu[PKM*\ccthemes/sky_light/loop-posts.phpnu[PKM*\b%g  *themes/sky_light/admission-search-form.phpnu[PKM*\p_ssthemes/sky_light/error_lognu[PKM*\:   themes/sky_light/loop-videos.phpnu[PKM*\ٶ//) themes/sky_light/index.phpnu[PKM*\he9ii#)9themes/sky_light/admission-form.phpnu[PKM*\=#themes/sky_light/search-results.phpnu[PKM*\ 0%:themes/sky_light/sidebar.phpnu[PKM*\BpNqq themes/sky_light/loop-alumni.phpnu[PKM*\:S Wthemes/sky_light/loop-albums.phpnu[PKM*\9l} 1themes/sky_light/single-post.phpnu[PKM*\J   themes/sky_light/alumni-form.phpnu[PKM*\mF“themes/sky_light/style.cssnu[PKM*\ " themes/sky_light/loop-students.phpnu[PKM*\ ; ,themes/sky_light/loop-files.phpnu[PKM*\#7themes/blue_sky/polling-results.phpnu[PKM*\B ,;themes/blue_sky/contact-us.phpnu[PKM*\=="%Ethemes/blue_sky/loop-employees.phpnu[PKM*\"Tthemes/blue_sky/opening-speech.phpnu[PKM*\v@f f Zthemes/blue_sky/home.phpnu[PKM*\ *4bbdthemes/blue_sky/loop-posts.phpnu[PKM*\̲Q  ){uthemes/blue_sky/admission-search-form.phpnu[PKM*\q**|themes/blue_sky/error_lognu[PKM*\:  Qthemes/blue_sky/loop-videos.phpnu[PKM*\K,//themes/blue_sky/index.phpnu[PKM*\he9ii"themes/blue_sky/admission-form.phpnu[PKM*\G" themes/blue_sky/search-results.phpnu[PKM*\ 0%$themes/blue_sky/sidebar.phpnu[PKM*\ pp7themes/blue_sky/loop-alumni.phpnu[PKM*\:S Gthemes/blue_sky/loop-albums.phpnu[PKM*\6%%Rthemes/blue_sky/single-post.phpnu[PKM*\J  'othemes/blue_sky/alumni-form.phpnu[PKM*\a)themes/blue_sky/style.cssnu[PKM*\ !Ythemes/blue_sky/loop-students.phpnu[PKM*\ ; Kthemes/blue_sky/loop-files.phpnu[PKM*\y$%Xthemes/green_land/polling-results.phpnu[PKM*\r themes/green_land/contact-us.phpnu[PKM*\==$themes/green_land/loop-employees.phpnu[PKM*\ .$Athemes/green_land/opening-speech.phpnu[PKM*\xRh h themes/green_land/home.phpnu[PKM*\AHQdd `themes/green_land/loop-posts.phpnu[PKM*\  +themes/green_land/admission-search-form.phpnu[PKM*\ T{themes/green_land/error_lognu[PKM*\:  !themes/green_land/loop-videos.phpnu[PKM*\ث//Pthemes/green_land/index.phpnu[PKM*\he9ii$R3themes/green_land/admission-form.phpnu[PKM*\K3$'themes/green_land/search-results.phpnu[PKM*\ 0%fthemes/green_land/sidebar.phpnu[PKM*\ pp!óthemes/green_land/loop-alumni.phpnu[PKM*\:S !themes/green_land/loop-albums.phpnu[PKM*\=|!_themes/green_land/single-post.phpnu[PKM*\J  !themes/green_land/alumni-form.phpnu[PKM*\themes/green_land/style.cssnu[PKM*\ #themes/green_land/loop-students.phpnu[PKM*\ ; &themes/green_land/loop-files.phpnu[PKM*\=k1employees/employments.phpnu[PKM*\ 5employees/laboratory_skills.phpnu[PKM*\AP{!:employees/institution_lifters.phpnu[PKM*\b2 >employees/salary_sources.phpnu[PKM*\TXG( Bemployees/employment_types.phpnu[PKM*\iRV6Femployees/import.phpnu[PKM*\ ؾNNNemployees/employee_profile.phpnu[PKM*\C)**ߜemployees/employees.phpnu[PKM*\ε%employees/employment_status.phpnu[PKM*\xemployees/ranks.phpnu[PKM*\ YY dashboard.phpnu[PKM*\YS+`+`)students_profile.phpnu[PKM*\TTblog/image_sliders.phpnu[PKM*\wIablog/pages_create.phpnu[PKM*\jq|b.b.cblog/posts_create.phpnu[PKM*\` blog/quotes.phpnu[PKM*\8 Fblog/tags.phpnu[PKM*\  blog/post_comments.phpnu[PKM*\ȚBblog/links.phpnu[PKM*\iCBwblog/opening_speech.phpnu[PKM*\8CQCQ1employee_profile.phpnu[PKM*\}pusers/user_privileges.phpnu[PKM*\ jv|users/login.phpnu[PKM*\k,users/user_groups.phpnu[PKM*\O%tusers/lost-password.phpnu[PKM*\!.users/students.phpnu[PKM*\G}users/employees.phpnu[PKM*\_Phyyusers/modules.phpnu[PKM*\+ + Dusers/profile.phpnu[PKM*\users/administrator.phpnu[PKM*\Busers/reset-password.phpnu[PKM*\$@admission/registrants_unapproved.phpnu[PKM*\RT))badmission/selection_process.phpnu[PKM*\A ' admission/admission_quotas.phpnu[PKM*\22 admission/registrants.phpnu[PKM*\7" O admission/registrants_approved.phpnu[PKM*\&U admission/admission_types.phpnu[PKM*\a  5Y admission/admission_phases.phpnu[PKM*\!%` admission/pdf_admission_template.htmlnu[PKM*\hlL t admission/admission_settings.phpnu[PKM*\ a appearance/themes.phpnu[PKM*\i:@5PP appearance/menus.phpnu[PKM*\IN^! errors/html/error_404.phpnu[PKM*\Ҁ errors/html/error_db.phpnu[PKM*\̝ww errors/html/error_general.phpnu[PKM*\@hnz errors/html/error_exception.phpnu[PKM*\0 errors/html/error_php.phpnu[PKM*\" errors/html/index.htmlnu[PKM*\z  errors/index.htmlnu[PKM*\|| errors/cli/error_404.phpnu[PKM*\bE errors/cli/error_db.phpnu[PKM*\||z errors/cli/error_general.phpnu[PKM*\ULg2$$B errors/cli/error_exception.phpnu[PKM*\]Y errors/cli/error_php.phpnu[PKM*\" errors/cli/index.htmlnu[PKM*\:   plugins/banners.phpnu[PKM*\ Dv" plugins/questions.phpnu[PKM*\+^kTT' plugins/answers.phpnu[PKM*\8###', academic/alumni.phpnu[PKM*\Q8CCjO academic/by_end_date.phpnu[PKM*\F#S academic/monthly_incomes.phpnu[PKM*\sc{{X academic/student_profile.phpnu[PKM*\ָ__! academic/class_group_settings.phpnu[PKM*\ONO3O3 academic/set_course_classes.phpnu[PKM*\^` academic/student_status.phpnu[PKM*\Iάk academic/residences.phpnu[PKM*\0h b academic/import_students.phpnu[PKM*\[ Z00S academic/students.phpnu[PKM*\o..!mQ academic/class_group_students.phpnu[PKM*\Mt>/** academic/academic_years.phpnu[PKM*\4D academic/class_groups.phpnu[PKM*\}DD academic/student_groups.phpnu[PKM*\o..% academic/set_class_group_students.phpnu[PKM*\; academic/majors.phpnu[PKM*\=; academic/transportations.phpnu[PKM*\ia academic/by_class_groups.phpnu[PKM*\h4= academic/by_student_status.phpnu[PKM*\B,++ academic/import_alumni.phpnu[PKM*\2%Y= posts_read.phpnu[PKo\ƕzz  secondary.phpnu[PK\C$0p!! Ҷ primary.phpnu[PK\VDBB view.phpnu[PK\έOOv primary_test.phpnu[PK\t"GG secondary_test.phpnu[PK0S\4OOO demo.blade.phpnu[PK0S\键$$ crop.blade.phpnu[PK0S\.L--} index.blade.phpnu[PK0S\oBmove.blade.phpnu[PK0S\kY%tree.blade.phpnu[PK0S\[%((  use.blade.phpnu[PK0S\p resize.blade.phpnu[PK\\oO O "welcome_message.phpnu[PK\\ցց-install/step.phpnu[PK\\W͛)install/update.phpnu[PK\\Zʶ install/footer.phpnu[PK\\z install/index.htmlnu[PK\\nMq(q(7install/setup.phpnu[PK\\[? install/header.phpnu[PK\\c|zzmembers/guru/dashboard.phpnu[PK\\֡!members/guru/templates/navbar.phpnu[PK\\m!!members/guru/templates/footer.phpnu[PK\\aa\%%"members/guru/templates/sidebar.phpnu[PK\\҇97f/f/!8members/guru/templates/header.phpnu[PK\\z&z&"3members/guru/kelas/jadwal/data.phpnu[PK\\4{'''Zmembers/guru/kelas/catatan/persiswa.phpnu[PK\\*gMM#ʂmembers/guru/kelas/catatan/data.phpnu[PK\\`tUUmembers/guru/luckyview.phpnu[PK\\7N7N#fmembers/guru/rapor/sikap/sosial.phpnu[PK\\wII&9members/guru/rapor/sikap/spiritual.phpnu[PK\\_=a!members/guru/rapor/sikap/data.phpnu[PK\\PM@M@!members/guru/rapor/fisik/data.phpnu[PK\\ /uUuU members/guru/rapor/nilai/pts.phpnu[PK\\QQQQ#3members/guru/rapor/nilai/ekstra.phpnu[PK\\D~C00&%members/guru/rapor/nilai/nilaiguru.phpnu[PK\\'++$members/guru/rapor/nilai/periksa.phpnu[PK\\tTT#members/guru/rapor/nilai/harian.phpnu[PK\\.@))!ŝmembers/guru/rapor/nilai/data.phpnu[PK\\Scc (members/guru/rapor/nilai/pas.phpnu[PK\\8afu$7+members/guru/rapor/kenaikan/data.phpnu[PK\\dӈYY3Amembers/guru/rapor/kkm/data.phpnu[PK\\yyTbb!members/guru/rapor/leger/data.phpnu[PK\\?F%F% members/guru/rapor/cetak/pts.phpnu[PK\\U(zBzB"#members/guru/rapor/cetak/akhir.phpnu[PK\\zȰhh$jfmembers/guru/rapor/cetak/pts_old.phpnu[PK\\A%nmembers/guru/rapor/cetak/akhir_mi.phpnu[PK\\5AIAI#members/guru/rapor/catatan/data.phpnu[PK\\5A.&& Q7members/guru/rapor/kikd/data.phpnu[PK\\xHHH$}^members/guru/rapor/prestasi/data.phpnu[PK\\ZXXmembers/guru/rapor/dkn/data.phpnu[PK\\L(** members/guru/cbt/status/data.phpnu[PK\\hNdNd"*members/guru/cbt/status/status.phpnu[PK\\omembers/guru/cbt/token/data.phpnu[PK\\z ̖members/guru/index.htmlnu[PK\\C(C(members/guru/wali/persiswa.phpnu[PK\\members/guru/wali/kelas.phpnu[PK\\vCmembers/guru/wali/edit.phpnu[PK\\>wmembers/guru/wali/struktur.phpnu[PK\\8080members/guru/wali/catatan.phpnu[PK\\Tggmembers/guru/profile.phpnu[PK\\z "members/index.htmlnu[PK\\x(6?gg 9members/siswa/materi/view.phpnu[PK\\T2jj?members/siswa/materi/data.phpnu[PK\\NzXc members/siswa/dashboard.phpnu[PK\\c6L6L9members/siswa/nilai/data.phpnu[PK\\4Pm""members/siswa/templates/top.phpnu[PK\\+ ",members/siswa/templates/navbar.phpnu[PK\\ XX"members/siswa/templates/footer.phpnu[PK\\5@"""members/siswa/templates/header.phpnu[PK\\ΙpD"D"+members/siswa/jadwal/data.phpnu[PK\\㽬ßß>Nmembers/siswa/cbt/ujian.phpnu[PK\\ssLmembers/siswa/cbt/data.phpnu[PK\\O00 bmembers/siswa/cbt/konfirmasi.phpnu[PK\\嶝9>>members/siswa/tugas/view.phpnu[PK\\7SQQQmembers/siswa/tugas/data.phpnu[PK\\z ># members/siswa/index.htmlnu[PK\\6{5{5x9 members/siswa/catatan/data.phpnu[PK\\P&GPGPAo members/siswa/absensi/data.phpnu[PK\\ֿ pengumuman/index.htmlnu[PK\\;HСС pengumuman/data.phpnu[PK\\ M>Nq!pengumuman/add.phpnu[PK\\Hn!kelas/materi/data1.phpnu[PK\\ھٚٚ-"kelas/materi/data.phpnu[PK\\4ii"kelas/materi/add.phpnu[PK\\8pp2#kelas/absenbulanan/data.phpnu[PK\\Y%W%W#kelas/nilai/data.phpnu[PK\\ƞ&[&[%#kelas/jadwal/data.phpnu[PK\\xۄwwV$kelas/materijadwal/data.phpnu[PK\\_$kelas/status/data.phpnu[PK\\h!<]4]4e%kelas/absenharianmapel/data.phpnu[PK\\ ȢT%kelas/tugas/data1.phpnu[PK\\%bcbc;,&kelas/tugas/data.phpnu[PK\\2YsNsN&kelas/tugas/add.phpnu[PK\\z &kelas/index.htmlnu[PK\\ilYlY&kelas/absenharian/data.phpnu[PK\\;^ˢEEN'master/guru/detail.phpnu[PK\\7hh'master/guru/edit.phpnu[PK\\cL77x'master/guru/data_old.phpnu[PK\\E(S_S_4(master/guru/editmapel.phpnu[PK\\ƫ\4\4`(master/guru/data.phpnu[PK\\-{h{h(master/guru/add.phpnu[PK\\"5:}K}K1)master/mapel/import.phpnu[PK\\kh})master/mapel/data.phpnu[PK\\DGGH.*master/tahun/data.phpnu[PK\\sك&bv*master/alumni/edit.phpnu[PK\\_݇YPYPS+master/alumni/data.phpnu[PK\\D{VVS+master/alumni/add.phpnu[PK\\qW+master/kelas/detail.phpnu[PK\\o+master/kelas/data.phpnu[PK\\j//+master/kelas/add.phpnu[PK\\v!+!+,master/kelas/persemester.phpnu[PK\\tFF]C,master/kelas/naikkelas.phpnu[PK\\HH,master/jurusan/import.phpnu[PK\\ى4343?,master/jurusan/data.phpnu[PK\\z ,master/index.htmlnu[PK\\j-s-s,master/siswa/update.phpnu[PK\\h kԞԞaX-master/siswa/edit.phpnu[PK\\ON=ssz-master/siswa/data.phpnu[PK\\H&;;jk.master/siswa/add.phpnu[PK\\7uFFr.master/ekstra/data.phpnu[PK\\= ._templates/debug.phpnu[PK\\fBb ` ` ._templates/topnav/_header.phpnu[PK\\1F  s/_templates/topnav/_footer.phpnu[PK\\֗/_templates/topnav/_menu.phpnu[PK\\cƩq/q/ /_templates/dashboard/_header.phpnu[PK\\,!wE/_templates/dashboard/_topmenu.phpnu[PK\\휨}} N/_templates/dashboard/_footer.phpnu[PK\\ż##Ql/_templates/dashboard/navbar.phpnu[PK\\`(( /_templates/dashboard/sidebar.phpnu[PK\\'ZTq/_templates/auth/_header.phpnu[PK\\ݑ,'R/_templates/auth/_footer.phpnu[PK\\z ]/_templates/index.htmlnu[PK\\#hShS/rapor/arsiprapor.phpnu[PK\\̓Ȁ__@)1rapor/editrapor.phpnu[PK\\z 2rapor/index.htmlnu[PK\\2 __52cbt/analisis/data.phpnu[PK\\$iE2cbt/jenis/data.phpnu[PK\\j$//3cbt/nomorpeserta/data.phpnu[PK\\J;  TF3cbt/peserta/data.phpnu[PK\\1gg3cbt/sesisiswa/data1.phpnu[PK\\{[++93cbt/sesisiswa/data.phpnu[PK\\4Z@mm3cbt/nilai/detail.phpnu[PK\\0g==?4cbt/nilai/data.phpnu[PK\\Cn'D'D+5cbt/nilai/nilai_essai.phpnu[PK\\LQQ.p5cbt/jadwal/data.phpnu[PK\\5u99.6cbt/jadwal/add.phpnu[PK\\*n!n!h6cbt/status/detail.phpnu[PK\\+EuEu6cbt/status/data.phpnu[PK\\}u}}A6cbt/sesi/edit.phpnu[PK\\%7 ^7cbt/sesi/data.phpnu[PK\\44 7cbt/banksoal/detail.phpnu[PK\\o\\R8cbt/banksoal/soal.phpnu[PK\\*P*P9cbt/banksoal/import.phpnu[PK\\vy2 2 i9cbt/banksoal/data.phpnu[PK\\ 1]]r:cbt/banksoal/add.phpnu[PK\\PMoof:cbt/banksoal/detail-table.phpnu[PK\\0ΜW<cbt/ruang/data.phpnu[PK\\oڄE8E8p<cbt/alokasi/data.phpnu[PK\\z <cbt/index.htmlnu[PK\\HˆQQ<cbt/cetak/beritaacara.phpnu[PK\\ 5055WM=cbt/cetak/peserta_bak.phpnu[PK\\oӞ?B?BS=cbt/cetak/pengawas.phpnu[PK\\x:x:=cbt/cetak/peserta.phpnu[PK\\6{"">cbt/cetak/data.phpnu[PK\\CTT>cbt/cetak/pesertaujian.phpnu[PK\\ >>j>cbt/cetak/kop.phpnu[PK\\cc3>cbt/cetak/kartu.phpnu[PK\\꘧-o-o}A?cbt/cetak/absen.phpnu[PK\\?--?cbt/pengawas/data.phpnu[PK\\ ?cbt/rekap/olah.phpnu[PK\\w;JnJn7b@cbt/rekap/ekspor.phpnu[PK\\!EPP@cbt/rekap/data.phpnu[PK\\mBCC!Acbt/rekap/permapel.phpnu[PK\\'  dAcbt/token/data.phpnu[PK\\@ d=d=:zAsetting/datarapor.phpnu[PK\\phhBsetting/nilaiinduk.phpnu[PK\\ +Bsetting/manage.phpnu[PK\\Ҿ%%Bsetting/db.phpnu[PK\\;fQee Csetting/induk.phpnu[PK\\T,,qCsetting/rapor.phpnu[PK\\z Csetting/index.htmlnu[PK\\'ĥNNCsetting/data.phpnu[PK\\K~))Dauth/new_login.phpnu[PK\\?s Dauth/forgot_password.phpnu[PK\\d" .%Dauth/login.phpnu[PK\\SD))ADauth/edit_group.phpnu[PK\\SJQQ~CDauth/reset_password.phpnu[PK\\Ŀ}}HDauth/deactivate_user.phpnu[PK\\  JDauth/manage_user.phpnu[PK\\33kDauth/create_group.phpnu[PK\\"nDauth/email/forgot_password.tpl.phpnu[PK\\E~oDauth/email/activate.tpl.phpnu[PK\\CpDauth/change_password.phpnu[PK\\OZZ*tDauth/index.phpnu[PK\\CyHHzDauth/edit_user.phpnu[PK\\z LDauth/index.htmlnu[PK\\Luu}Dauth/create_user.phpnu[PK\\t&&6Dusers/guru/edit.phpnu[PK\\z Dusers/guru/index.htmlnu[PK\\@ͩDDDusers/guru/data.phpnu[PK\\*|lCCTDusers/admin/edit.phpnu[PK\\z z6Eusers/admin/index.htmlnu[PK\\CCLEusers/admin/data.phpnu[PK\\Ξ 9cEusers/edit.phpnu[PK\\z Eusers/index.htmlnu[PK\\>BBGEusers/data.phpnu[PK\\̰DzEusers/siswa/edit.phpnu[PK\\z Eusers/siswa/index.htmlnu[PK\\(,DDEusers/siswa/data.phpnu[PK\\}#Fdisable_login.phpnu[PK||ƒ+F