function ValidateEmail(email) { if(IsEmpty(email) || email.trim()=='') return { status:false, message:'email_cannot_be_empty' }; var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var result=re.test(String(email).toLowerCase()); return { status:result, message:(result ? 'OK' : 'invalid_email_address') }; } function Post(url, params, on_success, on_error) { $.ajax({ url: url, type: 'post', data: params, dataType: 'json', success: function (response) { if(!IsEmpty(on_success)) on_success(response); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); if(!IsEmpty(on_error)) on_error(jqXHR, textStatus, errorThrown); } }); } function PostUpload(url, params, on_success, on_error) { $.ajax({ url : url, type : 'post', data : params, processData: false, contentType: false, dataType: 'json', timeout: 60000, xhr: function () { var myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { myXhr.upload.addEventListener('progress', function (event) { try { var percent = 0; var position = event.loaded || event.position; var total = event.total; var progress_bar_id = "#progress-wrp"; if (event.lengthComputable) percent = Math.ceil(position / total * 100); $(progress_bar_id + " .progress-bar").css("width", +percent + "%"); $(progress_bar_id + " .status").text(percent + "%"); } catch(e) { } }, false); } return myXhr; }, success: function (response) { if(!IsEmpty(on_success)) on_success(response); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); if(!IsEmpty(on_error)) on_error(jqXHR, textStatus, errorThrown); } }); } function ForceHideModal() { $('#app_modal').modal('hide'); $('body').removeClass('modal-open'); $('.modal-backdrop').remove(); } function ShowModal(title, message, button_positive, button_action, on_close_action) { message = message.replace(/(?:\r\n|\r|\n)/g, '
'); if($('#app_modal').length) $('#app_modal').remove(); var m='\ \ '; $('body').append(m); $('#app_modal').modal('show'); $('#app_modal').on('hidden.bs.modal', function () { if(!IsEmpty(on_close_action)) eval(on_close_action); }); } function Redirect(url) { var u=url.split('?'); var action=u[0]; var inputs=''; var params=u.length>1 ? u[1].split('&') : []; for(var i=0;i'; } if($('#form_redirect').length) $('#form_redirect').remove(); var html='
' + inputs + '
'; $('body').append(html); setTimeout(function() { $('#form_redirect').submit(); }, 500); } /* function ValidateEmail(email) { var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; return regex.test(email); } */ function ValidateFormByType(form) { var has_error=false; $("input", form).each(function( index ) { $(this).removeClass('erroneous'); if($(this).attr('offline')!=undefined) return; if($(this).attr('dont_check')!=undefined) return; if($(this).attr('type').toLowerCase()=='text' || $(this).attr('type').toLowerCase()=='email') { if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') { $(this).addClass('erroneous'); has_error=true; } else if($(this).attr('type').toLowerCase()=='email' && $(this).val().trim()!='' && ValidateEmail($(this).val()).status==false) { $(this).addClass('erroneous'); has_error=true; } else if($(this).attr('id').toLowerCase()=='afm' && $(this).val().trim()!='' && ValidateAfm($(this).val())==false) { $(this).addClass('erroneous'); has_error=true; } } else if($(this).attr('type').toLowerCase()=='number') { if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') { $(this).addClass('erroneous'); has_error=true; } else if(!$(this)[0].hasAttribute('not_null') && $(this).val().trim()!='' && isNaN(parseInt($(this).val().trim()))) { $(this).addClass('erroneous'); has_error=true; } } else if($(this).attr('type').toLowerCase()=='password' && $(this).val().trim()=='') { $(this).addClass('erroneous'); has_error=true; } else if($(this).attr('type').toLowerCase()=='file' && $(this).val().trim()=='') { $(this).addClass('erroneous'); has_error=true; } }); $("textarea", form).each(function( index ) { $(this).removeClass('erroneous'); if($(this).attr('offline')!=undefined) return; if($(this).attr('dont_check')!=undefined) return; if($(this)[0].hasAttribute('not_null') && $(this).val().trim()=='') { $(this).addClass('erroneous'); has_error=true; } }); return !has_error; } function PostEditForm(form) { var has_upload=false; var params={}; var upload_form_data=new FormData(); $("textarea", form).each(function( index ) { if($(this).attr('offline')!=undefined) return; params[$(this).attr('id')]=$(this).val(); upload_form_data.append($(this).attr('id'), $(this).val()); }); $("input:not(:checkbox):not(:file)", form).each(function( index ) { if($(this).attr('offline')!=undefined) return; params[$(this).attr('id')]=$(this).val(); upload_form_data.append($(this).attr('id'), $(this).val()); }); $("input:checkbox", form).each(function( index ) { if($(this).attr('offline')!=undefined) return; params[$(this).attr('id')]=$(this).is(':checked') ? 1 : 0; upload_form_data.append($(this).attr('id'), $(this).is(':checked') ? 1 : 0); }); $("input:file", form).each(function( index ) { if($(this).attr('offline')!=undefined) return; has_upload=true; params[$(this).attr('id')]= $(this)[0].files[0]; upload_form_data.append($(this).attr('id'), $(this)[0].files[0]); }); $("select", form).each(function( index ) { if($(this).attr('offline')!=undefined) return; params[$(this).attr('id')]=$(this).val(); upload_form_data.append($(this).attr('id'), $(this).val()); }); if(has_upload) { $(form).css('filter', 'blur(3px)').css('webkitFilter', 'blur(3px)').css('mozFilter', 'blur(3px)').css('oFilter', 'blur(3px)').css('msFilter', 'blur(3px)').css('cursor', 'wait').prop('disable', true); PostUpload($(form).attr('save_link'), upload_form_data, function (response) { $(form).css('cursor', 'default'); if(IsEmpty(response) || response.is_error==undefined) { alert('Invalid server response'); } else if(response.is_error) { alert(response.message); } else { window.location=$(form).attr('after_save_link'); } $(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false); }, function(jqXHR, textStatus, errorThrown) { alert(textStatus); $(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false); } ); } else { $(form).css('filter', 'blur(3px)').css('webkitFilter', 'blur(3px)').css('mozFilter', 'blur(3px)').css('oFilter', 'blur(3px)').css('msFilter', 'blur(3px)').css('cursor', 'wait').prop('disable', true); Post($(form).attr('save_link'), params, function (response) { $(form).css('cursor', 'default'); if(IsEmpty(response) || response.is_error==undefined) { alert('Invalid server response'); } else if(response.is_error) { alert(response.message); } else { window.location=$(form).attr('after_save_link'); } $(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false); }, function(jqXHR, textStatus, errorThrown) { alert(textStatus); $(form).css('filter', 'blur(0px)').css('webkitFilter', 'blur(0px)').css('mozFilter', 'blur(0px)').css('oFilter', 'blur(0px)').css('msFilter', 'blur(0px)').css('cursor', 'default').prop('disable', false); } ); } } var simple_checkbox = function ( data, type, full, meta ) { var is_checked = data == true || data == 1 ? "checked" : ""; return ''; } function ViewDocument(document_id) { if(IsEmpty(document_id)) return; Post('/api/', { controller: 'document', action: 'view', id: document_id }, function (response) { if(IsEmpty(response) || response.is_error==undefined) { ShowModal('Document', 'Invalid server response'); } else if(response.is_error) { ShowModal('Document', response.message); } else { ShowModal('Document', response.data, 'Download', 'window.open(\'/api/?controller=document&action=get&dispose=1&id=' + document_id + '\', \'_blank\');'); } }, function(jqXHR, textStatus, errorThrown) { ShowModal('Dowcument', textStatus + '\n' + jqXHR.responseText); } ); } function IsSet(look) { return look!=undefined && look!=null; } function IsEmpty(look) { return look==undefined || look==null || look==''; } function Includes(haystack, needle) { if(haystack==undefined || haystack==null || haystack=='') return false; else if(needle==undefined || needle==null || needle=='') return false; else return haystack.indexOf(needle)>=0; } var entity_map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', '`': '`', '=': '=' }; function EscapeHtml(string) { return String(string).replace(/[&<>"'`=\/]/g, function (s) { return entity_map[s]; }); } var Trim=function(text) { return String(text).replace(/^\s+|\s+$/gm,''); } function ValidateAfm(afm) { if (!afm.match(/^\d{9}$/) || afm == '000000000') return false; var m = 1, sum = 0; for(var i=7;i>=0;i--) { m*= 2; sum+=afm.charAt(i) * m; } return sum % 11 % 10 == afm.charAt(8); } function ReloadPage() { window.location.reload(); } function isValidUrl(str) { const pattern = new RegExp( '^([a-zA-Z]+:\\/\\/)?' + // protocol '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string '(\\#[-a-z\\d_]*)?$', // fragment locator 'i' ); return pattern.test(str); }