| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- <?php
- $this->loadModel('attend');
- $isLogon = $this->loadModel('user')->isLogon();
- if($isLogon and empty($this->app->user->signed) and $this->attend->checkSignIn())
- {
- $_SESSION['user']->signed = true;
- $this->app->user->signed = true;
- }
- if($isLogon and isset($_SESSION['user']) and (!isset($this->app->user->mustSignOut) or $this->app->user->mustSignOut != $this->config->attend->mustSignOut))
- {
- $_SESSION['user']->mustSignOut = $this->config->attend->mustSignOut;
- $this->app->user->mustSignOut = $this->config->attend->mustSignOut;
- }
- ?>
- <?php if($isLogon and empty($this->app->user->signed)) $this->attend->signIn($this->app->user->account);?>
- <script>
- <?php if($isLogon and !empty($this->app->user->signed) and $this->app->user->mustSignOut == 'no'):?>
- $.get(createLink('attend', 'signOut'));
- <?php endif;?>
- <?php if($isLogon and $this->app->user->mustSignOut == 'yes'):?>
- $('#poweredBy').append(<?php echo json_encode(html::a($this->createLink('user', 'logout'), $lang->logout, '', "class='btn btn-sm btn-danger' id='signOut' style='color:#fff;'"));?>)
- <?php if(strpos(",{$this->config->attend->noAttendUsers},", ",{$this->app->user->account},") === false and $this->config->attend->signOutLimit):?>
- if(new Date().getTime() < '<?php echo strtotime(date("Y-m-d") . ' ' . $this->config->attend->signOutLimit) * 1000;?>')
- {
- $('#poweredBy #signOut').click(function()
- {
- if(!confirm(<?php echo json_encode($lang->attend->confirmEarly);?>)) return false;
- })
- }
- <?php endif;?>
- <?php endif;?>
- <?php $moduleName = $this->app->getModuleName();?>
- <?php if(isset($lang->oa->menu->$moduleName)):?>
- $('#footer #crumbs').append("<i class='icon-angle-right'></i> <?php echo $title?>");
- <?php endif;?>
- $.extend(
- {
- setAjaxForm: function(formID, callback, beforeSubmit)
- {
- if($(document).data('setAjaxForm:' + formID)) return;
- form = $(formID);
- var options =
- {
- target : null,
- timeout : config.timeout,
- dataType:'json',
- success: function(response)
- {
- var submitButton = $(formID).find(':input[type=submit], .submit');
- /* The response is not an object, some error occers, bootbox.alert it. */
- if($.type(response) != 'object')
- {
- $.enableForm(formID);
- if(response) return bootbox.alert(response);
- return bootbox.alert('No response.');
- }
- /* The response.result is success. */
- if(response.result == 'success')
- {
- if(response.message && response.message.length)
- {
- submitButton.popover($.extend(
- {
- trigger: 'manual',
- content: response.message,
- tipClass: 'popover-success popover-form-result',
- placement: response.placement ? response.placement : 'right'
- }, submitButton.data())).popover('show');
- setTimeout(function(){submitButton.popover('destroy')}, 2000);
- }
- if($.isFunction(callback)) return callback(response);
- if($('#responser').length && response.message && response.message.length)
- {
- $('#responser').html(response.message).addClass('red f-12px').show().delay(3000).fadeOut(100);
- }
- if(response.closeModal)
- {
- setTimeout($.zui.closeModal, 1200);
- }
- if(response.callback)
- {
- var rcall = window[response.callback];
- if($.isFunction(rcall))
- {
- if(rcall() === false)
- {
- return;
- }
- }
- }
- if(response.locate)
- {
- if(response.locate == 'loadInModal')
- {
- var modal = $('.modal');
- setTimeout(function()
- {
- modal.load(modal.attr('ref'), function(){$(this).find('.modal-dialog').css('width', $(this).data('width'));
- $.zui.ajustModalPosition()})
- }, 1000);
- }
- else if(response.locate == 'parent')
- {
- setTimeout(function(){window.parent.location.reload();}, 1200);
- }
- else
- {
- var reloadUrl = response.locate == 'reload' ? location.href : response.locate;
- setTimeout(function(){location.href = reloadUrl;}, 1200);
- }
- }
- if(response.ajaxReload)
- {
- var $target = $(response.ajaxReload);
- if($target.length === 1)
- {
- $target.load(document.location.href + ' ' + response.ajaxReload, function()
- {
- // $target.dataTable();
- $target.find('[data-toggle="modal"]').modalTrigger();
- });
- }
- }
- return true;
- }
- /**
- * The response.result is fail.
- */
- $.enableForm(formID);
- /* The result.message is just a string. */
- if($.type(response.message) == 'string')
- {
- if($('#responser').length == 0)
- {
- submitButton.popover($.extend(
- {
- trigger: 'manual',
- content: response.message,
- tipClass: 'popover-danger popover-form-result',
- placement: response.placement ? response.placement : 'right'
- }, submitButton.data())).popover('show');
- setTimeout(function(){submitButton.popover('destroy')}, 2000);
- }
- $('#responser').html(response.message).addClass('red small text-danger').show().delay(5000).fadeOut(100);
- }
- /* The result.message is just a object. */
- if($.type(response.message) == 'object')
- {
- $.each(response.message, function(key, value)
- {
- /* Define the id of the error objecjt and it's label. */
- var errorOBJ = '#' + key;
- var errorLabel = key + 'Label';
- /* Create the error message. */
- var errorMSG = '<span id="' + errorLabel + '" for="' + key + '" class="text-error red">';
- if($.type(value) == 'string')
- {
- errorMSG += value;
- }
- else
- {
- $.each(value, function(subKey, subValue)
- {
- errorMSG += subKey != value.length - 1 ? subValue.replace(/[\。|\.]/, ';') : subValue;
- })
- }
- errorMSG += '</span>';
- /* Append error message, set style and set the focus events. */
- $('#' + errorLabel).remove();
- var $errorOBJ = $(formID).find(errorOBJ);
- if($errorOBJ.closest('.input-group').length > 0)
- {
- $errorOBJ.closest('.input-group').after(errorMSG)
- }
- else
- {
- $errorOBJ.parent().append(errorMSG);
- }
- $errorOBJ.css('margin-bottom', 0);
- $errorOBJ.css('border-color','#953B39')
- $errorOBJ.change(function()
- {
- $errorOBJ.css('margin-bottom', 0);
- $errorOBJ.css('border-color','')
- $('#' + errorLabel).remove();
- });
- })
- /* Focus the first error field thus to nitify the user. */
- var firstErrorField = $('#' +$('span.red').first().attr('for'));
- var topOffset;
- if(firstErrorField.length) topOffset = parseInt(firstErrorField.offset().top) - 20; // 20px offset more for margin.
- /* If there's the navbar-fixed-top element, minus it's height. */
- if($('.navbar-fixed-top').size())
- {
- topOffset = topOffset - parseInt($('.navbar-fixed-top').height());
- }
- /* Scroll to the error field and foucus it. */
- $(document).scrollTop(topOffset);
- firstErrorField.focus();
- }
- if($.isFunction(callback)) return callback(response);
- },
- /* When error occers, alert the response text, status and error. */
- error: function(jqXHR, textStatus, errorThrown)
- {
- $.enableForm(formID);
- if(textStatus == 'timeout')
- {
- bootbox.alert(v.lang.timeout);
- return false;
- }
- bootbox.alert(jqXHR.responseText + textStatus + errorThrown);
- }
- };
- /* Call ajaxSubmit to sumit the form. */
- $(document).on('submit', formID, function()
- {
- $.disableForm(formID);
- if(!beforeSubmit || beforeSubmit() !== false)
- {
- $(this).ajaxSubmit(options);
- }
- else
- {
- $.enableForm(formID);
- }
- return false; // Prevent the submitting event of the browser.
- }).data('setAjaxForm:' + formID, true);
- },
- /* Disable a form. */
- disableForm:function(formID)
- {
- $(formID).find(':submit').attr('disabled', true);
- },
- /**
- * Set ajax loader.
- *
- * Bind click event for some elements thus when click them,
- * use $.load to load page into target.
- *
- * @param string selector
- * @param string target
- */
- setAjaxLoader: function(selector, target)
- {
- /* Avoid duplication of binding */
- var data = $('body').data('ajaxLoader');
- if(data && data[selector]) return;
- if(!data) data = {};
- data[selector] = true;
- $('body').data('ajaxLoader', data);
- $(document).on('click', selector, function()
- {
- var url = $(this).attr('href');
- if(!url) url = $(this).data('rel');
- if(!url) return false;
- var $target = $(target);
- if(!$target.size()) return false;
- var width = $(this).data('width');
- $target.load(url, function()
- {
- if(width) $target.find('.modal-dialog').css('width', width);
- if($target.hasClass('modal') && $.zui.ajustModalPosition)
- {
- $.zui.ajustModalPosition();
- $target.find('.modal-dialog .modal-body').resize(function(){$.zui.ajustModalPosition();});
- }
- });
- return false;
- });
- },
- /**
- * Set ajax jsoner.
- *
- * @param string selector
- * @param object callback
- */
- setAjaxJSONER: function(selector, callback)
- {
- $(document).on('click', selector, function()
- {
- /* Try to get the href of current element, then try it's data-rel attribute. */
- url = $(this).attr('href');
- if(!url) url = $(this).data('rel');
- if(!url) return false;
- $.getJSON(url, function(response)
- {
- /* If set callback, call it. */
- if($.isFunction(callback)) return callback(response);
- /* If the response has message attribute, show it in #responser or alert it. */
- if(response.message)
- {
- if($('#responser').length)
- {
- $('#responser').html(response.message);
- $('#responser').addClass('text-info f-12px');
- $('#responser').show().delay(3000).fadeOut(100);
- }
- else
- {
- bootbox.alert(response.message);
- }
- }
- /* If the response has locate param, locate the browse. */
- if(response.locate) return location.href = response.locate;
- /* If target and source returned in reponse, update target with the source. */
- if(response.target && response.source)
- {
- $(response.target).load(response.source);
- }
- });
- return false;
- });
- },
- /**
- * Set ajax deleter.
- *
- * @param string $selector
- * @access public
- * @return void
- */
- setAjaxDeleter: function (selector, callback)
- {
- $(selector).each(function()
- {
- href = $(this).attr('href');
- $(this).attr('href', '###').attr('data-href', href);
- })
- $(document).on('click', selector, function()
- {
- if(confirm('<?php echo $lang->confirmDelete?>'))
- {
- var deleter = $(this);
- deleter.text('<?php echo $lang->deleteing?>');
- $.getJSON(deleter.attr('data-href'), function(data)
- {
- callback && callback(data);
- if(data.result == 'success')
- {
- if(deleter.parents('#ajaxModal').size()) return $.reloadAjaxModal(1200);
- if(data.locate) return location.href = data.locate;
- return location.reload();
- }
- else
- {
- alert(data.message);
- return location.reload();
- }
- });
- }
- return false;
- });
- return false;
- },
- /**
- * Set reload deleter.
- *
- * @param string $selector
- * @access public
- * @return void
- */
- setReloadDeleter: function (selector)
- {
- href = $(selector).attr('href');
- $(selector).attr('href', '###').attr('data-href', href);
- $(document).on('click', selector, function()
- {
- if(confirm('<?php echo $lang->confirmDelete?>'))
- {
- var deleter = $(this);
- deleter.text('<?php echo $lang->deleteing?>');
- $.getJSON(deleter.attr('data-href'), function(data)
- {
- var afterDelete = deleter.data('afterDelete');
- if($.isFunction(afterDelete))
- {
- $.proxy(afterDelete, deleter)(data);
- }
- if(data.result == 'success')
- {
- var table = $(deleter).closest('table');
- var replaceID = table.attr('id');
- table.wrap("<div id='tmpDiv'></div>");
- var $tmpDiv = $('#tmpDiv');
- $tmpDiv.load(document.location.href + ' #' + replaceID, function()
- {
- $tmpDiv.replaceWith($tmpDiv.html());
- var $target = $('#' + replaceID);
- $target.find('.reloadDeleter').data('afterDelete', afterDelete);
- $target.find('[data-toggle="modal"]').modalTrigger();
- if($target.hasClass('table-data'))
- {
- $target.dataTable();
- }
- if(typeof sortTable == 'function')
- {
- sortTable();
- }
- else
- {
- $('tfoot td').css('background', 'white').unbind('click').unbind('hover');
- }
- });
- }
- else
- {
- alert(data.message);
- }
- });
- }
- return false;
- });
- },
- /**
- * Set reload.
- *
- * @param string $selector
- * @access public
- * @return void
- */
- setReload: function (selector)
- {
- $(document).on('click', selector, function()
- {
- var reload = $(this);
- $.getJSON(reload.attr('href'), function(data)
- {
- if(data.result == 'success')
- {
- var table = $(reload).closest('table');
- var replaceID = table.attr('id');
- table.wrap("<div id='tmpDiv'></div>");
- $('#tmpDiv').load(document.location.href + ' #' + replaceID, function()
- {
- $('#tmpDiv').replaceWith($('#tmpDiv').html());
- if(typeof sortTable == 'function')
- {
- sortTable();
- }
- else
- {
- $('tfoot td').css('background', 'white').unbind('click').unbind('hover');
- }
- });
- }
- else
- {
- alert(data.message);
- }
- });
- return false;
- });
- },
- /**
- * Reload ajax modal.
- *
- * @param int duration
- * @access public
- * @return void
- */
- reloadAjaxModal: function(duration)
- {
- if(typeof(duration) == 'undefined') duration = 1000;
- setTimeout(function()
- {
- var modal = $('#ajaxModal');
- modal.load(modal.attr('ref'), function(){$(this).find('.modal-dialog').css('width', $(this).data('width')); $.zui.ajustModalPosition()})
- }, duration);
- }
- });
- $(function()
- {
- $.setAjaxDeleter('.deleter');
- $.setAjaxLoader('.loadInModal', '#triggerModal');
- $('[data-toggle="tooltip"]').tooltip();
- $.ajaxForm('#ajaxForm');
- })
- function setRequiredFields()
- {
- if(!config.requiredFields) return false;
- requiredFields = config.requiredFields.split(',');
- for(i = 0; i < requiredFields.length; i++)
- {
- $('#' + requiredFields[i]).closest('td,th').prepend("<div class='required required-wrapper'></div>");
- var colEle = $('#' + requiredFields[i]).closest('[class*="col-"]');
- if(colEle.parent().hasClass('form-group')) colEle.addClass('required');
- }
- }
- /**
- * The most recent month is highlighted
- */
- function addRecentlyMonthActive()
- {
- var isActive = false;
- $('.side .panel-body .tree ul').each(function()
- {
- $(this).find('li').each(function()
- {
- if($(this).hasClass('active') && !isActive) isActive = true;
- })
- });
- if(!isActive) $('.side .panel-body .tree ul:last li:last').addClass('active')
- }
- </script>
|