Revize 671
Přidáno uživatelem Michal Kliment před asi 14 roky(ů)
freenetis/trunk/kohana/media/css/style.css | ||
---|---|---|
font-weight:normal;
|
||
padding-bottom:5px;
|
||
}
|
||
#menu li.account, #menu li.transfer, #menu li.users, #menu li.networks, #menu li.administration, #menu li.redirection, #menu li.backup, #menu li.help {
|
||
#menu li.account, #menu li.transfer, #menu li.users, #menu li.approval, #menu li.networks, #menu li.administration, #menu li.redirection, #menu li.backup, #menu li.help {
|
||
padding-left:45px;
|
||
padding-top:10px;
|
||
list-style-type:none;
|
||
... | ... | |
#menu li.users {
|
||
background: #FFFFFF url(../images/menu/kuser.png) 5px 5px no-repeat;
|
||
}
|
||
#menu li.approval {
|
||
background: #FFFFFF url(../images/menu/approval.png) 5px 5px no-repeat;
|
||
}
|
||
#menu li.networks {
|
||
background: #FFFFFF url(../images/menu/gnome-fs-network.png) 5px 5px no-repeat;
|
||
}
|
||
... | ... | |
|
||
.ico_add {
|
||
margin-left: 5px;
|
||
}
|
||
|
||
.grid_table tr td .textarea {
|
||
width: 200px;
|
||
}
|
||
|
||
th.header {
|
||
cursor: pointer;
|
||
}
|
freenetis/trunk/kohana/media/js/jquery.tablesorter.min.js | ||
---|---|---|
|
||
(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'.',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}var rows=table.tBodies[0].rows;if(table.tBodies[0].rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,cells[i]);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,node){var l=parsers.length;for(var i=1;i<l;i++){if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)){return parsers[i];}}return parsers[0];}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=table.tBodies[0].rows[i],cols=[];cache.row.push($(c));for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));}cols.push(i);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){if(!node)return"";var t="";if(config.textExtraction=="simple"){if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){t=node.childNodes[0].innerHTML;}else{t=node.innerHTML;}}else{if(typeof(config.textExtraction)=="function"){t=config.textExtraction(node);}else{t=$(node).text();}}return t;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){rows.push(r[n[i][checkCell]]);if(!table.config.appender){var o=r[n[i][checkCell]];var l=o.length;for(var j=0;j<l;j++){tableBody[0].appendChild(o[j]);}}}if(table.config.appender){table.config.appender(table,rows);}rows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false,tableHeadersRows=[];for(var i=0;i<table.tHead.rows.length;i++){tableHeadersRows[i]=0;};$tableHeaders=$("thead th",table);$tableHeaders.each(function(index){this.count=0;this.column=index;this.order=formatSortingOrder(table.config.sortInitialOrder);if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(!this.sortDisabled){$(this).addClass(table.config.cssHeader);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders);}return $tableHeaders;};function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){i=(v.toLowerCase()=="desc")?1:0;}else{i=(v==(0||1))?v:0;}return i;}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;if(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(getCachedSortType(table.config.parsers,c)=="text")?((order==0)?"sortText":"sortTextDesc"):((order==0)?"sortNumeric":"sortNumericDesc");var e="e"+i;dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"]); ";dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function sortText(a,b){return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.headerList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){var DECIMAL='\\'+config.decimal;var exp='/(^[+]?0('+DECIMAL+'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)'+DECIMAL+'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*'+DECIMAL+'0+$)/';return RegExp(exp).test($.trim(s));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[£$€?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}$("tr:visible",table.tBodies[0]).filter(':even').removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0]).end().filter(':odd').removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery);
|
freenetis/trunk/kohana/media/js/js.js | ||
---|---|---|
|
||
}
|
||
|
||
function add_work_row(i, keys)
|
||
{
|
||
i++;
|
||
|
||
var add_work_row_tr = document.getElementById("add_work_row_tr");
|
||
var table = document.getElementById("form_table");
|
||
var tbody = table.children[0];
|
||
|
||
var new_work_group_tr = document.createElement("tr");
|
||
new_work_group_tr.setAttribute("id", "work_group_"+i);
|
||
var new_work_group_th = document.createElement("th");
|
||
new_work_group_th.setAttribute("colspan", "3");
|
||
new_work_group_th.setAttribute("class", "group");
|
||
var new_work_group_text = document.createTextNode(keys[0]+" (");
|
||
var new_work_delete_link = document.createElement("a");
|
||
new_work_delete_link.setAttribute("href", "#");
|
||
new_work_delete_link.setAttribute("onclick", "return delete_work_row("+i+")");
|
||
var new_work_delete_link_text = document.createTextNode("Smazat");
|
||
new_work_delete_link.appendChild(new_work_delete_link_text);
|
||
new_work_group_th.appendChild(new_work_group_text);
|
||
var new_work_group_text = document.createTextNode(") ");
|
||
new_work_group_th.appendChild(new_work_delete_link);
|
||
new_work_group_th.appendChild(new_work_group_text);
|
||
new_work_group_tr.appendChild(new_work_group_th);
|
||
tbody.insertBefore(new_work_group_tr, add_work_row_tr);
|
||
|
||
var new_work_description_tr = document.createElement("tr");
|
||
new_work_description_tr.setAttribute("id", "work_description_"+i);
|
||
var new_work_description_th = document.createElement("th");
|
||
new_work_description_th.setAttribute("class", "work_description["+i+"]");
|
||
var new_work_description_label = document.createElement("label");
|
||
new_work_description_label.setAttribute("for", "work_description["+i+"]");
|
||
var new_work_description_label_text = document.createTextNode(keys[1]+": *");
|
||
new_work_description_label.appendChild(new_work_description_label_text);
|
||
new_work_description_th.appendChild(new_work_description_label);
|
||
new_work_description_tr.appendChild(new_work_description_th);
|
||
|
||
var new_work_description_input_td = document.createElement("td");
|
||
var new_work_description_input_td_textarea = document.createElement("textarea");
|
||
new_work_description_input_td_textarea.setAttribute("name", "work_description["+i+"]");
|
||
new_work_description_input_td_textarea.setAttribute("class", "textarea required");
|
||
new_work_description_input_td.appendChild(new_work_description_input_td_textarea);
|
||
new_work_description_tr.appendChild(new_work_description_input_td);
|
||
|
||
var new_work_description_help_td = document.createElement("td");
|
||
new_work_description_tr.appendChild(new_work_description_help_td);
|
||
|
||
tbody.insertBefore(new_work_description_tr, add_work_row_tr);
|
||
|
||
var new_work_date_tr = document.createElement("tr");
|
||
new_work_date_tr.setAttribute("id", "work_date_"+i);
|
||
var new_work_date_th = document.createElement("th");
|
||
new_work_date_th.setAttribute("class", "work_date["+i+"]");
|
||
var new_work_date_label = document.createElement("label");
|
||
new_work_date_label.setAttribute("for", "work_date["+i+"]");
|
||
var new_work_date_label_text = document.createTextNode(keys[2]+": *");
|
||
new_work_date_label.appendChild(new_work_date_label_text);
|
||
new_work_date_th.appendChild(new_work_date_label);
|
||
new_work_date_tr.appendChild(new_work_date_th);
|
||
|
||
var new_work_date_input_td = document.createElement("td");
|
||
var date = new Date();
|
||
var new_work_date_input_td_select_day = document.createElement("select");
|
||
new_work_date_input_td_select_day.setAttribute("name", "work_date["+i+"][day]");
|
||
new_work_date_input_td_select_day.setAttribute("class", "dropdown required");
|
||
var option = new Array();
|
||
var option_text = new Array();
|
||
var day = date.getDate();
|
||
for(j=1;j<=31;j++)
|
||
{
|
||
option[j] = document.createElement("option");
|
||
option_text[j] = document.createTextNode(j);
|
||
option[j].appendChild(option_text[j]);
|
||
option[j].setAttribute("value", j);
|
||
if (j == day)
|
||
option[j].setAttribute('selected', '');
|
||
new_work_date_input_td_select_day.appendChild(option[j]);
|
||
}
|
||
new_work_date_input_td.appendChild(new_work_date_input_td_select_day);
|
||
var new_work_date_input_td_select_month = document.createElement("select");
|
||
new_work_date_input_td_select_month.setAttribute("name", "work_date["+i+"][month]");
|
||
new_work_date_input_td_select_month.setAttribute("class", "dropdown required");
|
||
var option = new Array();
|
||
var option_text = new Array();
|
||
var month = date.getMonth()+1;
|
||
for(j=1;j<=12;j++)
|
||
{
|
||
option[j] = document.createElement("option");
|
||
option_text[j] = document.createTextNode(j);
|
||
option[j].appendChild(option_text[j]);
|
||
option[j].setAttribute("value", j);
|
||
if (j == month)
|
||
option[j].setAttribute('selected', '');
|
||
new_work_date_input_td_select_month.appendChild(option[j]);
|
||
}
|
||
new_work_date_input_td.appendChild(new_work_date_input_td_select_month);
|
||
var new_work_date_input_td_select_year = document.createElement("select");
|
||
new_work_date_input_td_select_year.setAttribute("name", "work_date["+i+"][year]");
|
||
new_work_date_input_td_select_year.setAttribute("class", "dropdown required");
|
||
var option = new Array();
|
||
var option_text = new Array();
|
||
var year = date.getFullYear();
|
||
for(j=(year-10);j<=year;j++)
|
||
{
|
||
option[j] = document.createElement("option");
|
||
option_text[j] = document.createTextNode(j);
|
||
option[j].appendChild(option_text[j]);
|
||
option[j].setAttribute("value", j);
|
||
if (j == year)
|
||
option[j].setAttribute('selected', '');
|
||
new_work_date_input_td_select_year.appendChild(option[j]);
|
||
}
|
||
new_work_date_input_td.appendChild(new_work_date_input_td_select_year);
|
||
new_work_date_tr.appendChild(new_work_date_input_td);
|
||
|
||
var new_work_date_help_td = document.createElement("td");
|
||
new_work_date_tr.appendChild(new_work_date_help_td);
|
||
|
||
tbody.insertBefore(new_work_date_tr, add_work_row_tr);
|
||
|
||
var new_work_hours_tr = document.createElement("tr");
|
||
new_work_hours_tr.setAttribute("id", "work_hours_"+i);
|
||
var new_work_hours_th = document.createElement("th");
|
||
new_work_hours_th.setAttribute("class", "work_hours["+i+"]");
|
||
var new_work_hours_label = document.createElement("label");
|
||
new_work_hours_label.setAttribute("for", "work_hours["+i+"]");
|
||
var new_work_hours_label_text = document.createTextNode(keys[3]+": *");
|
||
new_work_hours_label.appendChild(new_work_hours_label_text);
|
||
new_work_hours_th.appendChild(new_work_hours_label);
|
||
new_work_hours_tr.appendChild(new_work_hours_th);
|
||
|
||
var new_work_hours_input_td = document.createElement("td");
|
||
new_work_hours_input_td.setAttribute("class", "work_hours["+i+"]");
|
||
var new_work_hours_input_td_input = document.createElement("input");
|
||
new_work_hours_input_td_input.setAttribute("type", "text");
|
||
new_work_hours_input_td_input.setAttribute("name", "work_hours["+i+"]");
|
||
new_work_hours_input_td_input.setAttribute("maxlength", "250");
|
||
new_work_hours_input_td_input.setAttribute("class", "textbox required number");
|
||
new_work_hours_input_td.appendChild(new_work_hours_input_td_input);
|
||
new_work_hours_tr.appendChild(new_work_hours_input_td);
|
||
|
||
var new_work_hours_help_td = document.createElement("td");
|
||
new_work_hours_tr.appendChild(new_work_hours_help_td);
|
||
|
||
tbody.insertBefore(new_work_hours_tr, add_work_row_tr);
|
||
|
||
var new_work_km_tr = document.createElement("tr");
|
||
new_work_km_tr.setAttribute("id", "work_km_"+i);
|
||
var new_work_km_th = document.createElement("th");
|
||
new_work_km_th.setAttribute("class", "work_km["+i+"]");
|
||
var new_work_km_label = document.createElement("label");
|
||
new_work_km_label.setAttribute("for", "work_km["+i+"]");
|
||
var new_work_km_label_text = document.createTextNode(keys[4]+": *");
|
||
new_work_km_label.appendChild(new_work_km_label_text);
|
||
new_work_km_th.appendChild(new_work_km_label);
|
||
new_work_km_tr.appendChild(new_work_km_th);
|
||
|
||
var new_work_km_input_td = document.createElement("td");
|
||
new_work_km_input_td.setAttribute("class", "work_km["+i+"]");
|
||
var new_work_km_input_td_input = document.createElement("input");
|
||
new_work_km_input_td_input.setAttribute("type", "text");
|
||
new_work_km_input_td_input.setAttribute("name", "work_km["+i+"]");
|
||
new_work_km_input_td_input.setAttribute("maxlength", "250");
|
||
new_work_km_input_td_input.setAttribute("class", "textbox number");
|
||
new_work_km_input_td.appendChild(new_work_km_input_td_input);
|
||
new_work_km_tr.appendChild(new_work_km_input_td);
|
||
|
||
var new_work_km_help_td = document.createElement("td");
|
||
new_work_km_tr.appendChild(new_work_km_help_td);
|
||
|
||
tbody.insertBefore(new_work_km_tr, add_work_row_tr);
|
||
|
||
var new_work_suggest_amount_tr = document.createElement("tr");
|
||
new_work_suggest_amount_tr.setAttribute("id", "work_suggest_amount_"+i);
|
||
var new_work_suggest_amount_th = document.createElement("th");
|
||
new_work_suggest_amount_th.setAttribute("class", "work_suggest_amount["+i+"]");
|
||
var new_work_suggest_amount_label = document.createElement("label");
|
||
new_work_suggest_amount_label.setAttribute("for", "work_suggest_amount["+i+"]");
|
||
var new_work_suggest_amount_label_text = document.createTextNode(keys[5]+": *");
|
||
new_work_suggest_amount_label.appendChild(new_work_suggest_amount_label_text);
|
||
new_work_suggest_amount_th.appendChild(new_work_suggest_amount_label);
|
||
new_work_suggest_amount_tr.appendChild(new_work_suggest_amount_th);
|
||
|
||
var new_work_suggest_amount_input_td = document.createElement("td");
|
||
new_work_suggest_amount_input_td.setAttribute("class", "work_suggest_amount["+i+"]");
|
||
var new_work_suggest_amount_input_td_input = document.createElement("input");
|
||
new_work_suggest_amount_input_td_input.setAttribute("type", "text");
|
||
new_work_suggest_amount_input_td_input.setAttribute("name", "work_suggest_amount["+i+"]");
|
||
new_work_suggest_amount_input_td_input.setAttribute("maxlength", "250");
|
||
new_work_suggest_amount_input_td_input.setAttribute("class", "textbox required number");
|
||
new_work_suggest_amount_input_td.appendChild(new_work_suggest_amount_input_td_input);
|
||
new_work_suggest_amount_tr.appendChild(new_work_suggest_amount_input_td);
|
||
|
||
var new_work_suggest_amount_help_td = document.createElement("td");
|
||
new_work_suggest_amount_tr.appendChild(new_work_suggest_amount_help_td);
|
||
|
||
tbody.insertBefore(new_work_suggest_amount_tr, add_work_row_tr);
|
||
|
||
keys_str = implode("','", keys);
|
||
var add_work_row_link = document.getElementById('add_work_row_link');
|
||
add_work_row_link.setAttribute("onclick", "return add_work_row("+i+", new Array('"+keys_str+"'));");
|
||
return false;
|
||
}
|
||
|
||
function delete_work_row(i)
|
||
{
|
||
var table = document.getElementById("form_table");
|
||
var tbody = table.children[0];
|
||
|
||
var work_group = document.getElementById("work_group_"+i);
|
||
var work_description = document.getElementById("work_description_"+i);
|
||
var work_date = document.getElementById("work_date_"+i);
|
||
var work_hours = document.getElementById("work_hours_"+i);
|
||
var work_km = document.getElementById("work_km_"+i);
|
||
var work_suggest_amount = document.getElementById("work_suggest_amount_"+i);
|
||
|
||
tbody.removeChild(work_group);
|
||
tbody.removeChild(work_description);
|
||
tbody.removeChild(work_date);
|
||
tbody.removeChild(work_hours);
|
||
tbody.removeChild(work_km);
|
||
tbody.removeChild(work_suggest_amount);
|
||
|
||
return false;
|
||
}
|
||
|
||
function set_class(select, id)
|
||
{
|
||
var text = select.options[select.selectedIndex].text;
|
freenetis/trunk/kohana/media/js/jquery.metadata.js | ||
---|---|---|
/*
|
||
* Metadata - jQuery plugin for parsing metadata from elements
|
||
*
|
||
* Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
|
||
*
|
||
* Dual licensed under the MIT and GPL licenses:
|
||
* http://www.opensource.org/licenses/mit-license.php
|
||
* http://www.gnu.org/licenses/gpl.html
|
||
*
|
||
* Revision: $Id$
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property
|
||
* in the JSON will become a property of the element itself.
|
||
*
|
||
* There are three supported types of metadata storage:
|
||
*
|
||
* attr: Inside an attribute. The name parameter indicates *which* attribute.
|
||
*
|
||
* class: Inside the class attribute, wrapped in curly braces: { }
|
||
*
|
||
* elem: Inside a child element (e.g. a script tag). The
|
||
* name parameter indicates *which* element.
|
||
*
|
||
* The metadata for an element is loaded the first time the element is accessed via jQuery.
|
||
*
|
||
* As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
|
||
* matched by expr, then redefine the metadata type and run another $(expr) for other elements.
|
||
*
|
||
* @name $.metadata.setType
|
||
*
|
||
* @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
|
||
* @before $.metadata.setType("class")
|
||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
|
||
* @desc Reads metadata from the class attribute
|
||
*
|
||
* @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
|
||
* @before $.metadata.setType("attr", "data")
|
||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
|
||
* @desc Reads metadata from a "data" attribute
|
||
*
|
||
* @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
|
||
* @before $.metadata.setType("elem", "script")
|
||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
|
||
* @desc Reads metadata from a nested script element
|
||
*
|
||
* @param String type The encoding type
|
||
* @param String name The name of the attribute to be used to get metadata (optional)
|
||
* @cat Plugins/Metadata
|
||
* @descr Sets the type of encoding to be used when loading metadata for the first time
|
||
* @type undefined
|
||
* @see metadata()
|
||
*/
|
||
|
||
(function($) {
|
||
|
||
$.extend({
|
||
metadata : {
|
||
defaults : {
|
||
type: 'class',
|
||
name: 'metadata',
|
||
cre: /({.*})/,
|
||
single: 'metadata'
|
||
},
|
||
setType: function( type, name ){
|
||
this.defaults.type = type;
|
||
this.defaults.name = name;
|
||
},
|
||
get: function( elem, opts ){
|
||
var settings = $.extend({},this.defaults,opts);
|
||
// check for empty string in single property
|
||
if ( !settings.single.length ) settings.single = 'metadata';
|
||
|
||
var data = $.data(elem, settings.single);
|
||
// returned cached data if it already exists
|
||
if ( data ) return data;
|
||
|
||
data = "{}";
|
||
|
||
if ( settings.type == "class" ) {
|
||
var m = settings.cre.exec( elem.className );
|
||
if ( m )
|
||
data = m[1];
|
||
} else if ( settings.type == "elem" ) {
|
||
if( !elem.getElementsByTagName )
|
||
return undefined;
|
||
var e = elem.getElementsByTagName(settings.name);
|
||
if ( e.length )
|
||
data = $.trim(e[0].innerHTML);
|
||
} else if ( elem.getAttribute != undefined ) {
|
||
var attr = elem.getAttribute( settings.name );
|
||
if ( attr )
|
||
data = attr;
|
||
}
|
||
|
||
if ( data.indexOf( '{' ) <0 )
|
||
data = "{" + data + "}";
|
||
|
||
data = eval("(" + data + ")");
|
||
|
||
$.data( elem, settings.single, data );
|
||
return data;
|
||
}
|
||
}
|
||
});
|
||
|
||
/**
|
||
* Returns the metadata object for the first member of the jQuery object.
|
||
*
|
||
* @name metadata
|
||
* @descr Returns element's metadata object
|
||
* @param Object opts An object contianing settings to override the defaults
|
||
* @type jQuery
|
||
* @cat Plugins/Metadata
|
||
*/
|
||
$.fn.metadata = function( opts ){
|
||
return $.metadata.get( this[0], opts );
|
||
};
|
||
|
||
})(jQuery);
|
freenetis/trunk/kohana/application/i18n/cs_CZ/texts.php | ||
---|---|---|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||
|
||
$lang = array
|
||
(
|
||
'0 means unlimited limit' => '0 znamená neomezený limit.',
|
||
'99% chance you won\'t need to change this value' => '99% šance, že nebudete chtít měnit tuto hodnotu.',
|
||
'abstain' => 'Zdržet se',
|
||
'about sms' => 'Informace o SMS',
|
||
'access rights' => 'Přístupová práva',
|
||
'access to system' => 'Přístup do systému',
|
||
... | ... | |
'add new whole device' => 'Přidat nové celé zařízení',
|
||
'add new whole device for user' => 'Přidat nové celé zařízení pro uživatele',
|
||
'add new work' => 'Přidat novou práci',
|
||
'add new work report' => 'Přidat nový pracovní výkaz',
|
||
'add smokeping menu item' => 'Přidat položku menu smokepingu',
|
||
'add smokeping record' => 'Přidat záznam smokepingu',
|
||
'add voip account' => 'Přidat VoIP účet',
|
||
'add vote' => 'Přidat hlas',
|
||
'add vote about work' => 'Přidat hlas o práci',
|
||
'add wireless setting' => 'Přidat bezdrátové nastavení',
|
||
'added by' => 'Přidal',
|
||
'additional_contacts_infotext' => 'Další kontaktní informace',
|
||
... | ... | |
'advanced information' => 'Pokročilé informace',
|
||
'after you\'ve done that, click login' => 'Poté, co to dokončíte, klikněte na "Přihlásit".',
|
||
'after you\'ve done that, you can continue' => 'Poté, co tak učiníte, můžete pokračovat.',
|
||
'agree' => 'Souhlas',
|
||
'all' => 'Všichni',
|
||
'all redirected' => 'Všichni přesměrovaní',
|
||
'all transfers' => 'Všechny převody',
|
||
... | ... | |
'answer to this message' => 'Odpovědet na tuto zprávu',
|
||
'applicant' => 'Čekatel na členství',
|
||
'application password' => 'Aplikační heslo',
|
||
'approval' => 'Hlasování',
|
||
'approved' => 'Schváleno',
|
||
'approved works' => 'Schválené práce',
|
||
'april' => 'Duben',
|
||
'are you really sure that this database server is working fine?' => 'Jste si opravdu jistí, že tento databázový server funguje správně?',
|
||
'are you really sure that you entered correct address database server?' => 'Jste si opravdu jisti, že jste zadali správnou adresu databázového serveru?',
|
||
... | ... | |
'back to interfaces list' => 'Zpět na seznam rozhraní',
|
||
'back to ip address' => 'Zpět na IP adresu',
|
||
'back to ip addresses list' => 'Zpět na seznam IP adres',
|
||
'back to list' => 'Zpět na seznam',
|
||
'back to list of all address points' => 'Zpět na seznam všech adresních bodů',
|
||
'back to list of routerboard backups' => 'Zpět na seznam záloh routerboardů',
|
||
'back to list of all confirmed works' => 'Zpět na seznam všech potvrzených prací',
|
||
'back to list of all devices' => 'Zpět na seznam všech zařízení',
|
||
'back to list of all fees' => 'Zpět na seznam všech poplatků',
|
||
'back to list of all invoices' => 'Zpět na seznam všech faktur',
|
||
'back to list of all members' => 'Zpět na seznam všech členů',
|
||
'back to list of all pending works' => 'Zpět na seznam všech nerozhodnutých prací',
|
||
'back to list of all streets' => 'Zpět na seznam všech ulic',
|
||
'back to list of all towns' => 'Zpět na seznam všech měst',
|
||
'back to list of all unconfirmed works' => 'Zpět na seznam všech nepotvrzených prací',
|
||
'back to list of all users works' => 'Zpět na seznam všech prací uživatele',
|
||
'back to list of enum types' => 'Zpět na seznam všech výčtů',
|
||
'back to list of groups' => 'Zpět na seznam skupin',
|
||
'back to list of members' => 'Zpět na seznam členů',
|
||
'back to list of routerboard backups' => 'Zpět na seznam záloh routerboardů',
|
||
'back to list of translations' => 'Zpět na seznam překladů',
|
||
'back to list of works of user' => 'Zpět na seznam prací uživatele',
|
||
'back to login' => 'Zpět na přihlášení',
|
||
... | ... | |
'back to the subnet' => 'Zpět na podsíť',
|
||
'back to the user' => 'Zpět na uživatele',
|
||
'back to the work' => 'Zpět k práci',
|
||
'back to the work report' => 'Zpět k pracovnímu výkazu',
|
||
'back to this account' => 'Zpět na tento účet',
|
||
'back to this user' => 'Zpět na tohoto uživatele',
|
||
'back to transfers of member' => 'Zpět na převody člena',
|
||
... | ... | |
'dhcp configuration file was successfully generated' => 'Konfigurační soubor pro DHCP byl úspěšně vygenerován',
|
||
'directory upload for file uploading is not writable' => 'Do adresáře upload pro nahrávání souborů nelze zapisovat.',
|
||
'disabled' => 'Vypnuto',
|
||
'disagree' => 'Nesouhlas',
|
||
'display member' => 'Zobraz člena',
|
||
'display user' => 'Zobraz uživatele',
|
||
'dns configuration' => 'Konfigurace DNS',
|
||
'dns configuration files were successfully generated' => 'Konfigurační soubory pro DNS byly úspěšně vygenerovány',
|
||
'do transfer' => 'Proveď transakci',
|
||
'do you really want to delete this record' => 'Chcete opravdu smazat tento záznam',
|
||
'do you want to cancel this redirection' => 'Chcete zrušit toto přesměrování',
|
||
'do you want to cancel this backup' => 'Chcete zrušit toto zálohování',
|
||
'do you want to delete this address point' => 'Chcete smazat tento adresní bod',
|
||
... | ... | |
'edit vlan interface' => 'Úprava VLAN rozhraní',
|
||
'edit vlan' => 'Úprava VLANu',
|
||
'edit voicemail' => 'Upravit hlasovou schránku',
|
||
'edit vote about work' => 'Upravit hlas o práci',
|
||
'edit wireless setting' => 'Upravit bezdrátové nastavení',
|
||
'edited' => 'Upravil',
|
||
'editing of account' => 'Úprava účtu',
|
||
... | ... | |
'ip addresses' => 'IP adresy',
|
||
'ip_address' => 'IP adresa',
|
||
'it can means that username/password/host are bad or host is unavailable' => 'To může znamenat, že uživatelské jméno/heslo/hostitel je špatné nebo je hostitel nedostupný.',
|
||
'it is not possible vote about locked work' => 'Není možné hlasovat o zamčené práci.',
|
||
'it is possible to deduct fees only in one year' => 'Členské příspěvky je možné strhávat jen v rámci jednoho roku.',
|
||
'it\'s not possible to write your htacess file for clean urls' => 'Není možné zapsat váš soubor .htacess pro čistá URL.',
|
||
'item number' => 'Položka č.',
|
||
... | ... | |
'limit of member' => 'Limit člena',
|
||
'limit has been successfully changed' => 'Limit byl úspěšně změněn.',
|
||
'list of all address points' => 'Seznam všech adresních bodů',
|
||
'list of all approved works' => 'Seznam všech schválených prací',
|
||
'list of all backups' => 'Seznam všech záloh konfigurací',
|
||
'list of all calls' => 'Výpis všech hovorů',
|
||
'list of all clouds' => 'Seznam všech oblastí',
|
||
... | ... | |
'list of all redirection messages' => 'Seznam všech zpráv přesměrování',
|
||
'list of all members' => 'Seznam všech členů',
|
||
'list of all member calls' => 'Výpis všech hovorů člena',
|
||
'list of all pending work reports' => 'Seznam všech nerozhodnutých pracovních výkazů',
|
||
'list of all pending works' => 'Seznam všech nerozhodnutých prací',
|
||
'list of all redirected records' => 'Seznam všech přesměrovaných záznamů',
|
||
'list of all redirection messages' => 'Seznam všech zpráv přesměrování',
|
||
'list of all smokeping records' => 'Seznam všech záznamů smokepingu',
|
||
'list of all streets' => 'Seznam všech ulic',
|
||
'list of all towns' => 'Seznam všech měst',
|
||
'list of all transactions' => 'Seznam všech převodů',
|
||
'list of all rejected works' => 'Seznam všech zamítnutých prací',
|
||
'list of all unconfirmed works' => 'Seznam všech nepotvrzených prací',
|
||
'list of all users' => 'Seznam všech uživatelů',
|
||
'list of calls' => 'Výpis hovorů',
|
||
... | ... | |
'number of the hours' => 'počet hodin',
|
||
'o' => 'V',
|
||
'october' => 'Říjen',
|
||
'of all approved works' => 'všech schválených prací',
|
||
'of all pending work reports' => 'všech nerozhodnutých pracovních výkazů',
|
||
'of all pending works' => 'všech nerozhodnutých prací',
|
||
'of all rejected works' => 'všech zamítnutých prací',
|
||
'of all users work reports' => 'všech pracovních výkazů uživatele',
|
||
'of all users works' => 'všech prací uživatele',
|
||
'old password' => 'Staré heslo',
|
||
'opening balance' => 'Počáteční zůstatek',
|
||
'operating account' => 'Provozní účet',
|
||
... | ... | |
'penalty and fee' => 'Poplatky a pokuty',
|
||
'penalty for unidentified transfer' => 'Pokuta za neidentifikovanou platbu',
|
||
'penalty have to be a number' => 'Pokuta musí být číslo',
|
||
'pending' => 'Nerozhodnuto',
|
||
'pending works' => 'Nerozhodnuté práce',
|
||
'pending work reports' => 'Nerozhodnuté pracovní výkazy',
|
||
'permanent' => 'Trvalé',
|
||
'permit extensions' => 'Povolená předčíslí',
|
||
'personal comment from administrator' => 'Osobní komentář od administrátora',
|
||
... | ... | |
'remove broadcast ip address' => 'Odebrat IP adresu broadcastu',
|
||
'remove network ip address' => 'Odebrat IP adresu sítě',
|
||
'request for membership' => 'Žádost o členství',
|
||
'requests' => 'Požadavky',
|
||
'resize' => 'Změnit velikost',
|
||
'restore membership' => 'Obnovit členství',
|
||
'reverse dns' => 'Zpětné DNS',
|
||
... | ... | |
'show user' => 'Ukaž uživatele',
|
||
'show voip account' => 'Zobrazit VoIP účet',
|
||
'show work' => 'Zobrazit práci',
|
||
'show work report' => 'Zobrazit pracovní výkaz',
|
||
'show works' => 'Zobrazit práce',
|
||
'signature of applicant member' => 'podpis žadatele - člena',
|
||
'signature and stamp' => 'Podpis a razítko',
|
||
... | ... | |
'subnets' => 'Podsítě',
|
||
'suffix' => 'Přípona',
|
||
'suffix has to start with slash character and has to end with slash character' => 'Přípona musí začínat lomítkem a musí končit lomítkem.',
|
||
'suggest amount' => 'Navrhovaná částka',
|
||
'sum' => 'Součet',
|
||
'summary' => 'Sumarizace',
|
||
'supplier' => 'Dodavatel',
|
||
... | ... | |
'type of the recipient' => 'Typ příjemce',
|
||
'type of redirection' => 'Typ přesměrování',
|
||
'type' => 'Typ',
|
||
'rejected' => 'Zamítnuto',
|
||
'rejected works' => 'Zamítnuté práce',
|
||
'unconfirmed works' => 'Nepotvrzené práce',
|
||
'unidentified transfers' => 'Neidentifikované platby',
|
||
'unknown ip address' => 'Neznámá IP adresa',
|
||
... | ... | |
'vlans' => 'VLANy',
|
||
'voicemail for voip account' => 'Hlasová schránka pro VoIP účet',
|
||
'voicemail password for voip account' => 'Heslo hlasové schránky pro VoIP účet',
|
||
'vote' => 'Hlas',
|
||
'welcome to freenetis' => 'Vítejte ve FreeNetISu','voicemail password for voip account' => 'Heslo hlasové schránky pro VoIP účet',
|
||
'welcome to freenetis installation' => 'Vítejte ve FreeNetIS instalaci.',
|
||
'wireless setting' => 'Bezdrátové nastavení',
|
||
... | ... | |
'work has been successfully deleted' => 'Práce byla úspěšně smazána',
|
||
'work has been successfully updated' => 'Práce byla úspěšně aktualizována',
|
||
'work hasn\'t been successfully confirmed' => 'Práce nebyla úspěšně akutualizována',
|
||
'work report' => 'Pracovní výkaz',
|
||
'work reports' => 'Pracovní výkazy',
|
||
'works' => 'Práce',
|
||
'vote has been successfully added' => 'Hlas byl úspěšně přidán.',
|
||
'vote has been successfully deleted' => 'Hlas byl úspěšně smazán.',
|
||
'vote has been successfully updated' => 'Hlas byl úspěšně aktualizován.',
|
||
'write email' => 'Napsat e-mail',
|
||
'wrong password' => 'Špatné heslo',
|
||
'year' => 'Rok',
|
||
'yes' => 'ano',
|
||
'you can simply open config-samplephp in a text editor, fill in your information, and save it as configphp' => 'Můžete jednoduše otevřít config-sample.php v textovém editoru, doplnit vaše údaje a uložit jej jako config.php.',
|
||
'you cannot vote twice about same work!' => 'Nemůžete hlasovat dvakrát o stejné práci!',
|
||
'you are in debt' => 'Máte dluh',
|
||
'you have been successfully logged out' => 'Byl jste úspěšně odhlášen.',
|
||
'you have no permission to access redirection' => 'Nemáte práva k zobrazení přesměrování',
|
freenetis/trunk/kohana/application/helpers/form.php | ||
---|---|---|
else
|
||
{
|
||
$sel = ($selected === $key) ? ' selected' : '';
|
||
$input .= '<option value="'.$key.'"'.$sel.'>'.$val.'</option>'."\n";
|
||
$input .= '<option value';
|
||
if ($key!='')
|
||
$input.= '="'.$key.'"';
|
||
$input .= $sel.'>'.$val.'</option>'."\n";
|
||
}
|
||
}
|
||
$input .= '</select>';
|
freenetis/trunk/kohana/application/models/job.php | ||
---|---|---|
* @param $filter_values
|
||
* @return ORM Iterator
|
||
*/
|
||
public function get_all_confirmed_works($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
public function get_all_approved_works($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
{
|
||
|
||
|
||
$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
/*$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
if (isset($filter_values['user_id'])) $where .= 'u.id = '.$filter_values['user_id'];
|
||
if (isset($filter_values['description'])) $where .= ($where!='WHERE ') ? ' AND j.description LIKE \'%'.$filter_values['description'].'%\'' : 'j.description LIKE \'%'.$filter_values['description'].'%\'';
|
||
if (isset($filter_values['day']))
|
||
... | ... | |
return self::$db->query('SELECT j.id, concat(u.name,\' \',u.surname) as user_name, j.description, j.date, j.hours, j.km, concat(c.name,\' \',c.surname) as confirm_user, t.creation_datetime as confirm_time, t.amount as rating FROM jobs j
|
||
LEFT JOIN users u ON j.user_id = u.id
|
||
LEFT JOIN transfers t ON j.transfer_id = t.id
|
||
LEFT JOIN users c ON j.confirmed_by_id = c.id '.$where.' ORDER BY '.$order_by.' '.$order_by_direction);
|
||
LEFT JOIN users c ON j.confirmed_by_id = c.id '.$where.' ORDER BY '.$order_by.' '.$order_by_direction); */
|
||
|
||
return self::$db->query('SELECT q.id, q.job_report_id, r.description as work_report, q.user_id, CONCAT(u.name,\' \', u.surname) AS uname, q.description, q.date, q.hours, q.km, q.transfer_id, t.amount as rating
|
||
FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0 AND j.job_report_id IS NULL
|
||
GROUP BY j.id) as q
|
||
LEFT JOIN users u ON q.user_id = u.id
|
||
LEFT JOIN job_reports r ON q.job_report_id = r.id
|
||
LEFT JOIN transfers t ON q.transfer_id = t.id
|
||
WHERE q.sum > 0 ORDER BY '.$order_by.' '.$order_by_direction.' LIMIT '.$limit_from.', '.$limit_results);
|
||
}
|
||
|
||
public function get_all_unconfirmed_works($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
public function get_all_rejected_works($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
{
|
||
|
||
|
||
$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
/*$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
if (isset($filter_values['user_id'])) $where .= 'u.id = '.$filter_values['user_id'];
|
||
if (isset($filter_values['description'])) $where .= ($where!='WHERE ') ? ' AND j.description LIKE \'%'.$filter_values['description'].'%\'' : 'j.description LIKE \'%'.$filter_values['description'].'%\'';
|
||
if (isset($filter_values['day']))
|
||
... | ... | |
|
||
return self::$db->query('SELECT j.id, concat(u.name,\' \',u.surname) as user_name, j.description, j.date, j.hours, j.km, concat(c.name,\' \',c.surname) as confirm_user FROM jobs j
|
||
LEFT JOIN users u ON j.user_id = u.id
|
||
LEFT JOIN users c ON j.confirmed_by_id = c.id '.$where.' ORDER BY '.$order_by.' '.$order_by_direction);
|
||
LEFT JOIN users c ON j.confirmed_by_id = c.id '.$where.' ORDER BY '.$order_by.' '.$order_by_direction);*/
|
||
|
||
return self::$db->query('SELECT q.id, q.job_report_id, r.description as work_report, q.user_id, CONCAT(u.name,\' \', u.surname) AS uname, q.description, q.date, q.hours, q.km, q.suggest_amount
|
||
FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0 AND j.job_report_id IS NULL
|
||
GROUP BY j.id) as q
|
||
LEFT JOIN users u ON q.user_id = u.id
|
||
LEFT JOIN job_reports r ON q.job_report_id = r.id
|
||
LEFT JOIN transfers t ON q.transfer_id = t.id
|
||
WHERE q.sum <= 0 ORDER BY '.$order_by.' '.$order_by_direction.' LIMIT '.$limit_from.', '.$limit_results);
|
||
}
|
||
|
||
public function get_all_pending_works($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
{
|
||
/*return self::$db->query('SELECT q.id, q.job_report_id, r.description as work_report, q.user_id, CONCAT(u.name,\' \', u.surname) AS uname, q.description, q.date, q.hours, q.km, q.suggest_amount
|
||
FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked = 0
|
||
GROUP BY j.id) as q
|
||
LEFT JOIN users u ON q.user_id = u.id
|
||
LEFT JOIN job_reports r ON q.job_report_id = r.id
|
||
LEFT JOIN transfers t ON q.transfer_id = t.id
|
||
ORDER BY '.$order_by.' '.$order_by_direction.' LIMIT '.$limit_from.', '.$limit_results);*/
|
||
|
||
return self::$db->query('SELECT j.id, j.job_report_id, r.description AS work_report, j.user_id, CONCAT( u.name, \' \', u.surname ) AS uname, j.description, j.date, j.hours, j.km, j.suggest_amount, v.vote, v.comment
|
||
FROM jobs j
|
||
LEFT JOIN users u ON j.user_id = u.id
|
||
LEFT JOIN job_reports r ON j.job_report_id = r.id
|
||
LEFT JOIN transfers t ON j.transfer_id = t.id
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type =1 AND v.user_id = '.Session::instance()->get('user_id').'
|
||
WHERE j.locked = 0 AND j.job_report_id IS NULL
|
||
ORDER BY '.$order_by.' '.$order_by_direction.' LIMIT '.$limit_from.', '.$limit_results);
|
||
}
|
||
|
||
/**
|
||
* @author Michal Kliment
|
||
... | ... | |
* @param $filter_values
|
||
* @return count of all works
|
||
*/
|
||
public function count_all_confirmed_works($filter_values = array())
|
||
public function count_all_approved_works($filter_values = array())
|
||
{
|
||
$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
/*$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
if (isset($filter_values['user_id'])) $where .= 'u.id = '.$filter_values['user_id'];
|
||
if (isset($filter_values['description'])) $where .= ($where!='WHERE ') ? ' AND j.description LIKE \'%'.$filter_values['description'].'%\'' : 'j.description LIKE \'%'.$filter_values['description'].'%\'';
|
||
if (isset($filter_values['day']))
|
||
... | ... | |
else $where.=' AND j.confirmed_by_id IS NOT NULL';
|
||
|
||
$works = self::$db->query('SELECT j.id, concat(u.name,\' \',u.surname) as user_name, j.description, j.date, j.hours, j.km FROM jobs j
|
||
LEFT JOIN users u ON j.user_id = u.id '.$where);
|
||
LEFT JOIN users u ON j.user_id = u.id '.$where);*/
|
||
|
||
$works = self::$db->query('SELECT q.id FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0 AND j.job_report_id IS NULL
|
||
GROUP BY j.id) AS q
|
||
WHERE q.sum > 0');
|
||
|
||
return count($works);
|
||
|
||
}
|
||
|
||
public function count_all_unconfirmed_works($filter_values = array())
|
||
public function count_all_rejected_works($filter_values = array())
|
||
{
|
||
$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
/*$where = (count($filter_values)) ? 'WHERE ' : '';
|
||
if (isset($filter_values['user_id'])) $where .= 'u.id = '.$filter_values['user_id'];
|
||
if (isset($filter_values['description'])) $where .= ($where!='WHERE ') ? ' AND j.description LIKE \'%'.$filter_values['description'].'%\'' : 'j.description LIKE \'%'.$filter_values['description'].'%\'';
|
||
if (isset($filter_values['day']))
|
||
... | ... | |
else $where.=' AND j.confirmed_by_id IS NULL';
|
||
|
||
$works = self::$db->query('SELECT j.id, concat(u.name,\' \',u.surname) as user_name, j.description, j.date, j.hours, j.km FROM jobs j
|
||
LEFT JOIN users u ON j.user_id = u.id '.$where);
|
||
LEFT JOIN users u ON j.user_id = u.id '.$where);*/
|
||
|
||
$works = self::$db->query('SELECT q.id FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0 AND j.job_report_id IS NULL
|
||
GROUP BY j.id) AS q
|
||
WHERE q.sum <= 0');
|
||
|
||
return count($works);
|
||
|
||
}
|
||
|
||
public function count_all_pending_works($filter_values = array())
|
||
{
|
||
$works = self::$db->query('SELECT j.* FROM jobs j
|
||
WHERE j.locked = 0 AND j.job_report_id IS NULL');
|
||
|
||
return count($works);
|
||
|
||
}
|
||
|
||
public function get_all_pending_works_by_user($user_id)
|
||
{
|
||
return self::$db->query('SELECT j.id, j.user_id, j.job_report_id, r.description AS work_report, j.description, j.date, j.hours, j.km, j.suggest_amount, v.vote, v.comment
|
||
FROM jobs j
|
||
LEFT JOIN job_reports r ON j.job_report_id = r.id
|
||
LEFT JOIN transfers t ON j.transfer_id = t.id
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type =1 AND v.user_id = '.Session::instance()->get('user_id').'
|
||
WHERE j.locked = 0 AND j.job_report_id IS NULL AND j.user_id = '.$user_id);
|
||
}
|
||
|
||
public function get_all_approved_works_by_user ($user_id)
|
||
{
|
||
return self::$db->query('SELECT q.id, q.job_report_id, r.description as work_report, q.description, q.date, q.hours, q.km, q.transfer_id, t.amount as rating
|
||
FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0
|
||
GROUP BY j.id) as q
|
||
LEFT JOIN job_reports r ON q.job_report_id = r.id
|
||
LEFT JOIN transfers t ON q.transfer_id = t.id
|
||
WHERE q.sum > 0 AND j.job_report_id IS NULL AND q.user_id = '.$user_id);
|
||
}
|
||
|
||
public function get_all_rejected_works_by_user ($user_id)
|
||
{
|
||
return self::$db->query('SELECT q.id, q.job_report_id, r.description as work_report, q.description, q.date, q.hours, q.km, q.suggest_amount
|
||
FROM (SELECT j.*, SUM(v.vote) AS sum, COUNT(v.vote) AS count FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1
|
||
WHERE j.locked > 0
|
||
GROUP BY j.id) as q
|
||
LEFT JOIN job_reports r ON q.job_report_id = r.id
|
||
LEFT JOIN transfers t ON q.transfer_id = t.id
|
||
WHERE q.sum <= 0 AND j.job_report_id IS NULL AND q.user_id = '.$user_id);
|
||
}
|
||
|
||
/*
|
||
public function get_all_confirmed_works_by_member_id($member_id)
|
||
{
|
||
... | ... | |
LEFT JOIN users c ON j.confirmed_by_id = c.id WHERE j.confirmed_by_id IS NULL AND u.member_id = '.$member_id);
|
||
}
|
||
*/
|
||
|
||
public function get_all_works_by_job_report_id ($job_report_id)
|
||
{
|
||
return self::$db->query('SELECT j.id, j.user_id, j.description, j.suggest_amount, date, hours, km, v.vote, v.comment FROM jobs j
|
||
LEFT JOIN votes v ON j.id = v.fk_id AND v.type = 1 AND v.user_id = '.Session::instance()->get('user_id').'
|
||
WHERE j.job_report_id = '.$job_report_id.'
|
||
ORDER BY date');
|
||
}
|
||
|
||
|
||
public function get_all_users()
|
||
{
|
||
return self::$db->query('SELECT u.id, CONCAT(u.name,\' \',u.surname) as name FROM jobs j LEFT JOIN users u ON j.user_id = u.id GROUP BY user_id ORDER BY u.surname');
|
||
}
|
||
|
||
public function get_all_users()
|
||
{
|
||
return self::$db->query('SELECT u.id, CONCAT(u.name,\' \',u.surname) as name FROM jobs j LEFT JOIN users u ON j.user_id = u.id GROUP BY user_id ORDER BY u.surname');
|
||
}
|
||
|
||
|
||
/**
|
||
* Function gets confirmed works of given user.
|
freenetis/trunk/kohana/application/models/job_report.php | ||
---|---|---|
<?php
|
||
class Job_report_Model extends ORM {
|
||
protected $belongs_to = array('user');
|
||
|
||
public function get_work_report ($work_report_id)
|
||
{
|
||
return self::$db->query('SELECT r.id, j.user_id, u.member_id, CONCAT(u.name, \' \', u.surname) as uname, r.description, SUM(j.suggest_amount) AS suggest_amount, MIN(j.date) AS date_from, MAX(j.date) AS date_to,
|
||
SUM(j.hours) AS hours, SUM(j.km) AS km, MAX(j.locked) AS locked FROM job_reports r
|
||
LEFT JOIN jobs j ON r.id = j.job_report_id
|
||
LEFT JOIN users u ON j.user_id = u.id
|
||
GROUP BY r.id
|
||
HAVING r.id = '.$work_report_id)->current();
|
||
}
|
||
|
||
public function get_all_pending_work_reports ($limit_from = 0, $limit_results = 50, $order_by = 'id', $order_by_direction = 'ASC', $filter_values = array())
|
||
{
|
||
return self::$db->query('SELECT r.id, j.user_id, CONCAT(u.name, \' \', u.surname) as uname, r.description, SUM(j.suggest_amount) AS suggest_amount, MIN(j.date) AS date_from, MAX(j.date) AS date_to,
|
||
SUM(j.hours) AS hours, SUM(j.km) AS km, MAX(j.locked) AS locked FROM job_reports r
|
||
LEFT JOIN jobs j ON r.id = j.job_report_id
|
||
LEFT JOIN users u ON j.user_id = u.id
|
||
GROUP BY r.id
|
||
HAVING locked = 0
|
||
ORDER BY '.$order_by.' '.$order_by_direction.' LIMIT '.$limit_from.', '.$limit_results);
|
||
}
|
||
|
||
public function count_all_pending_work_reports ($filter_values = array())
|
||
{
|
||
$work_reports = self::$db->query('SELECT r.id, j.user_id, r.description, SUM(j.suggest_amount) AS suggest_amount, MIN(j.date) AS begin_date, MAX(j.date) AS end_date,
|
||
SUM(j.hours) AS hours, SUM(j.km) AS km, MAX(j.locked) AS locked FROM job_reports r
|
||
LEFT JOIN jobs j ON r.id = j.job_report_id
|
||
GROUP BY r.id
|
||
HAVING locked = 0');
|
||
|
||
return count ($work_reports);
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/trunk/kohana/application/models/vote.php | ||
---|---|---|
<?php
|
||
class Vote_Model extends ORM {
|
||
protected $belongs_to = array('user');
|
||
|
||
public static $work = 1;
|
||
|
||
function get_all_votes_by_work($work_id)
|
||
{
|
||
self::$db->query('SELECT * FROM votes v
|
||
WHERE v.type = 1 AND v.fk_id = '.$work_id);
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/trunk/kohana/application/controllers/upgrade_sql_652.php | ||
---|---|---|
<?php
|
||
|
||
// array of sql queries that upgrade database
|
||
$upgrade_sql[652] = array(
|
||
"INSERT INTO `axo_map` (`acl_id`, `section_value`, `value`) VALUES ('59', 'Users_Controller', 'additional_contacts');"
|
||
|
||
);
|
||
?>
|
freenetis/trunk/kohana/application/controllers/votes.php | ||
---|---|---|
<?php
|
||
/**
|
||
* Votes controller
|
||
*
|
||
* @author Michal Kliment
|
||
* @copyright (c) 2010 Kliment Michal
|
||
* @license GNU GPLv3
|
||
* @license http://www.gnu.org/licenses/gpl.txt
|
||
*/
|
||
|
||
class Votes_Controller extends Controller
|
||
{
|
||
|
||
/**
|
||
* Function adds vote to work
|
||
* @author Michal Kliment
|
||
* @param int id of work
|
||
*/
|
||
function add_to_work($work_id = NULL)
|
||
{
|
||
// is parameter set?
|
||
if (!$work_id || !is_numeric($work_id))
|
||
Controller::warning(PARAMETER);
|
||
|
||
// create work object
|
||
$work = new Job_Model($work_id);
|
||
|
||
// work doesn't exist
|
||
if (!$work->id)
|
||
Controller::error(RECORD);
|
||
|
||
// access control
|
||
if (!$this->acl_check_new(get_class($this), 'work', $this->session->get('member_id')))
|
||
Controller::error(ACCESS);
|
||
|
||
// work is locked => cannot add vote
|
||
if ($work->locked)
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.It is not possible vote about locked work.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
$vote_model = new Vote_Model();
|
||
$vote = $vote_model->where('user_id', $this->session->get('user_id'))->where('type',Vote_Model::$work)->where('fk_id', $work->id)->find();
|
||
|
||
// vote about this work already exists
|
||
if ($vote && $vote->id)
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.You cannot vote twice about same work!'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
if ($work->user_id != $this->session->get('user_id'))
|
||
{
|
||
$vote_options = array(1 => url_lang::lang('texts.Agree'),
|
||
-1 => url_lang::lang('texts.Disagree'),
|
||
0 => url_lang::lang('texts.Abstain'));
|
||
}
|
||
else
|
||
{
|
||
// nobody cannot approve his own work
|
||
$vote_options = array(0 => url_lang::lang('texts.Abstain'));
|
||
}
|
||
|
||
$form = new Forge(url::base().url::current(TRUE), '', 'POST', array('id' => 'article_form'));
|
||
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
|
||
$form->dropdown('vote')->label(url_lang::lang('texts.Vote'))->options($vote_options);
|
||
$form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,65535]');
|
||
$form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
|
||
// form is valid
|
||
if ($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
$vote = new Vote_Model();
|
||
$vote->user_id = $this->session->get('user_id');
|
||
$vote->type = Vote_Model::$work;
|
||
$vote->fk_id = $work->id;
|
||
$vote->vote = $form_data['vote'];
|
||
$vote->comment = $form_data['comment'];
|
||
$vote->save();
|
||
|
||
$this->session->set_flash('message', url_lang::lang('texts.Vote has been successfully added.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
$view = new View('main');
|
||
$view->title = url_lang::lang('texts.Add vote about work');
|
||
$view->content = new View('form');
|
||
$view->content->headline = url_lang::lang('texts.Add vote about work');
|
||
$view->content->link_back = html::anchor(url_lang::base().'works/show/'.$work->id, url_lang::lang('texts.Back to the work'));
|
||
$view->content->form = $form->html();
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Function edits vote
|
||
* @author Michal Kliment
|
||
* @param int id of vote to edit
|
||
*/
|
||
function edit ($vote_id = NULL)
|
||
{
|
||
// is parameter set
|
||
if (!$vote_id || !is_numeric($vote_id))
|
||
Controller::warning(PARAMETER);
|
||
|
||
// create vote object
|
||
$vote = new Vote_Model($vote_id);
|
||
|
||
// vote doesn't exist
|
||
if (!$vote->id)
|
||
Controller::error(RECORD);
|
||
|
||
// test type of vote
|
||
switch ($vote->type)
|
||
{
|
||
// vote about work
|
||
case Vote_Model::$work:
|
||
// access control
|
||
if (!$this->acl_check_edit(get_class($this), 'work', $vote->user->member_id))
|
||
Controller::error(ACCESS);
|
||
$work = new Job_Model($vote->fk_id);
|
||
// work is locked => cannot edit vote
|
||
if ($work->locked)
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.It is not possible vote about locked work.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
if ($work->user_id != $this->session->get('user_id'))
|
||
{
|
||
$vote_options = array(1 => url_lang::lang('texts.Agree'),
|
||
-1 => url_lang::lang('texts.Disagree'),
|
||
0 => url_lang::lang('texts.Abstain'));
|
||
}
|
||
else
|
||
{
|
||
// nobody cannot approve his own work
|
||
$vote_options = array(0 => url_lang::lang('texts.Abstain'));
|
||
}
|
||
$title = url_lang::lang('texts.Edit vote about work');
|
||
$link_back = html::anchor(url_lang::base().'works/show/'.$work->id, url_lang::lang('texts.Back to the work'));
|
||
break;
|
||
}
|
||
|
||
$form = new Forge(url::base().url::current(TRUE), '', 'POST', array('id' => 'article_form'));
|
||
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
|
||
$form->dropdown('vote')->label(url_lang::lang('texts.Vote'))->options($vote_options)->selected($vote->vote);
|
||
$form->textarea('comment')->label(url_lang::lang('texts.Comment').':')->rules('length[0,65535]')->value($vote->comment);
|
||
$form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
|
||
// form is valid
|
||
if ($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
$vote = new Vote_Model($vote_id);
|
||
$vote->vote = $form_data['vote'];
|
||
$vote->comment = $form_data['comment'];
|
||
$vote->save();
|
||
|
||
|
||
$this->session->set_flash('message', url_lang::lang('texts.Vote has been successfully updated.'));
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
$view = new View('main');
|
||
$view->title = $title;
|
||
$view->content = new View('form');
|
||
$view->content->headline = $title;
|
||
$view->content->link_back = $link_back;
|
||
$view->content->form = $form->html();
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
/**
|
||
* Function deletes vote
|
||
* @author Michal Kliment
|
||
* @param int id of vote to delete
|
||
*/
|
||
function delete ($vote_id = NULL)
|
||
{
|
||
// is parameter set
|
||
if (!$vote_id || !is_numeric($vote_id))
|
||
Controller::warning (PARAMETER);
|
||
|
||
// creates vote object
|
||
$vote = new Vote_Model($vote_id);
|
||
|
||
// vote doesn't exist
|
||
if (!$vote->id)
|
||
Controller::error(RECORD);
|
||
|
||
// test type of vote
|
||
switch ($vote->type)
|
||
{
|
||
case Vote_Model::$work:
|
||
// access control
|
||
if (!$this->acl_check_delete(get_class($this), 'work', $vote->user->member_id))
|
||
Controller::error(ACCESS);
|
||
$work = new Job_Model($vote->fk_id);
|
||
// work is locked => cannot edit vote
|
||
if ($work->locked)
|
||
{
|
||
$this->session->set_flash('message', url_lang::lang('texts.It is not possible vote about locked work.'));
|
||
}
|
||
else
|
||
{
|
||
$vote->delete();
|
||
$this->session->set_flash('message', url_lang::lang('texts.Vote has been successfully deleted.'));
|
||
}
|
||
url::redirect(url_lang::base().'works/show/'.$work->id);
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
?>
|
freenetis/trunk/kohana/application/controllers/work_reports.php | ||
---|---|---|
<?php
|
||
|
||
class Work_reports_Controller extends Controller {
|
||
|
||
|
||
public function index()
|
||
{
|
||
url::redirect (url_lang::base().'work_reports/pending');
|
||
}
|
||
|
||
public function pending($limit_results = 100, $order_by = 'id', $order_by_direction = 'ASC', $page_word = null, $page = 1)
|
||
{
|
||
// acccess control
|
||
if (!$this->acl_check_view('Users_Controller','work'))
|
||
Controller::error(ACCESS);
|
||
|
||
// gets new selector
|
||
if (is_numeric($this->input->get('record_per_page')))
|
||
$limit_results = (int) $this->input->get('record_per_page');
|
||
|
||
// parameters control
|
||
//$allowed_order_type = array('id','user_name','description','date','hours','km','confirm_user','confirm_time','rating');
|
||
//if (!in_array(strtolower($order_by), $allowed_order_type)) $order_by = 'id';
|
||
//if (strtolower($order_by_direction) != 'asc' && strtolower($order_by_direction) != 'desc') $order_by_direction = 'asc';
|
||
|
||
$work_report_model = new Job_report_Model();
|
||
$total_work_reports = $work_report_model->count_all_pending_work_reports();
|
||
|
||
if (($sql_offset = ($page - 1) * $limit_results) > $total_work_reports)
|
||
$sql_offset = 0;
|
||
|
||
$work_reports = $work_report_model->get_all_pending_work_reports($sql_offset, (int)$limit_results, $order_by, $order_by_direction);
|
||
|
||
// create grid
|
||
$grid = new Grid(url_lang::base().'work_reports/pending', url_lang::lang('texts.List of all pending work reports'), array(
|
||
//'separator' => '',
|
||
'use_paginator' => true,
|
||
'use_selector' => true,
|
||
'current' => $limit_results, //current selected 'records_per_page' value
|
||
'selector_increace' => 100, // increace
|
||
'selector_min' => 100, // minimum where selector start
|
||
'selector_max_multiplier' => 20,
|
||
'base_url' => Config::get('lang').'/work_reports/pending/'.$limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
||
'uri_segment' => 'page', // pass a string as uri_segment to trigger former 'label' functionality
|
||
'total_items' => $total_work_reports, // use db count query here of course
|
||
'items_per_page' => $limit_results, // it may be handy to set defaults for stuff like this in config/pagination.php
|
||
'style' => 'classic',
|
||
'order_by' => $order_by,
|
||
'order_by_direction' => $order_by_direction,
|
||
'limit_results' => $limit_results,
|
||
//'query_string' => $query_string
|
||
));
|
||
|
||
if ($this->acl_check_new('Users_Controller','work'))
|
||
$grid->add_new_button(url_lang::base().'work_reports/add', url_lang::lang('texts.Add new work report'));
|
||
|
||
$grid->order_field('id')->label(url_lang::lang('texts.Id'));
|
||
$grid->order_callback_field('uname')->label(url_lang::lang('texts.User name'))->callback('Works_Controller::user_name');
|
||
$grid->order_field('description')->label(url_lang::lang('texts.Description'));
|
||
$grid->order_field('date_from')->label(url_lang::lang('texts.Date from'));
|
||
$grid->order_field('date_to')->label(url_lang::lang('texts.Date to'));
|
||
$grid->order_field('hours')->label(url_lang::lang('texts.Hours'));
|
||
$grid->order_field('km')->label(url_lang::lang('texts.Km'));
|
||
$grid->order_callback_field('suggest_amount')->label(url_lang::lang('texts.Suggest amount'))->callback('Works_Controller::suggest_amount');
|
||
|
||
// access control
|
||
if ($this->acl_check_view('Users_Controller','work'))
|
||
$grid->action_field('id')->label(url_lang::lang('texts.Show')) ->url(url_lang::base().'work_reports/show') ->action(url_lang::lang('texts.Show'))->class('center');
|
||
|
||
$grid->datasource($work_reports);
|
||
|
||
$view = new View('main');
|
||
$view->title = url_lang::lang('texts.Pending work reports');
|
||
$view->content = new View('work_reports');
|
||
$view->content->grid = $grid;
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
public function show($work_report_id = NULL)
|
||
{
|
||
if (!$work_report_id || !is_numeric($work_report_id))
|
||
Controller::warning (PARAMETER);
|
||
|
||
$work_report_model = new Job_report_Model();
|
||
$work_report = $work_report_model->get_work_report($work_report_id);
|
||
|
||
if (!$work_report || !$work_report->id)
|
||
Controller::error (RECORD);
|
||
|
||
$work_model = new Job_Model();
|
||
$works = $work_model->get_all_works_by_job_report_id($work_report->id);
|
||
|
||
// create grid
|
||
$works_grid = new Grid(url_lang::base().'work_reports/show/'.$work_report->id, '', array(
|
||
//'separator' => '',
|
||
'use_paginator' => false,
|
||
'use_selector' => false,
|
||
'total_items' => count ($works)
|
||
));
|
||
|
||
$works_grid->field('id')->label(url_lang::lang('texts.Id'));
|
||
$works_grid->field('description')->label(url_lang::lang('texts.Description'));
|
||
$works_grid->field('date')->label(url_lang::lang('texts.Date'));
|
||
$works_grid->field('hours')->label(url_lang::lang('texts.Hours'));
|
||
$works_grid->field('km')->label(url_lang::lang('texts.Km'));
|
||
|
||
if ($this->acl_check_new('Votes_Controller', 'work', $this->session->get('member_id')))
|
||
{
|
||
$works_grid->form_field('vote')->label(url_lang::lang('texts.Vote'))->type('dropdown')->rules('required')->options(array(NULL => '----------------', 1 => url_lang::lang('texts.Agree'), -1 => url_lang::lang('texts.Disagree'), 0 => url_lang::lang('texts.Abstain')))->callback('Works_Controller::vote_form_field');
|
||
$works_grid->form_field('comment')->label(url_lang::lang('texts.Comment'))->type('textarea');
|
||
}
|
||
|
||
// access control
|
||
if ($this->acl_check_view('Users_Controller','work'))
|
||
$works_grid->action_field('id')->label(url_lang::lang('texts.Show')) ->url(url_lang::base().'works/show') ->action(url_lang::lang('texts.Show'))->class('center');
|
||
|
||
$works_grid->datasource($works);
|
||
|
||
if ($work_report->locked)
|
||
{
|
||
$link_back = '';
|
||
}
|
||
else
|
||
{
|
||
$state = url_lang::lang('texts.Pending');
|
||
$link_back = html::anchor(url_lang::base().'work_reports/pending', url_lang::lang('texts.of all pending work reports'));
|
||
$sum = 0;
|
||
}
|
||
|
||
if (isset ($_POST) && count ($_POST))
|
||
{
|
||
$vote_model = new Vote_Model();
|
||
$post_votes = $_POST['vote'];
|
||
$comments = $_POST['comment'];
|
||
|
||
foreach ($post_votes as $id => $post_vote)
|
||
{
|
||
$vote = $vote_model->where('user_id',$this->session->get('user_id'))->where('fk_id', $id)->where('type',Vote_Model::$work)->find();
|
||
|
||
if (!$vote->id && $post_vote=="")
|
||
continue;
|
||
|
||
if ($vote->id && $post_vote=="")
|
||
{
|
||
$vote->delete();
|
||
continue;
|
||
}
|
||
|
||
if ($vote->id && $post_vote!="")
|
||
{
|
||
$vote->vote = $post_vote;
|
||
$vote->comment = $comments[$id];
|
||
$vote->save();
|
||
continue;
|
||
}
|
||
|
||
if (!$vote->id)
|
||
{
|
||
$vote->clear();
|
||
$vote->user_id = $this->session->get('user_id');
|
||
$vote->fk_id = $id;
|
||
$vote->type = Vote_Model::$work;
|
||
$vote->vote = $post_vote;
|
||
$vote->comment = $comments[$id];
|
||
$vote->save();
|
||
}
|
||
}
|
||
url::redirect(url::base().url::current(TRUE));
|
||
}
|
||
|
||
$view = new View('main');
|
||
$view->title = url_lang::lang('texts.Show work report');
|
||
$view->content = new View('work_reports_show');
|
||
$view->content->work_report = $work_report;
|
||
$view->content->link_back = $link_back;
|
||
$view->content->state = $state;
|
||
$view->content->works_grid = $works_grid;
|
||
$view->render(TRUE);
|
||
}
|
||
|
||
public function add($user_id = NULL)
|
||
{
|
||
if ($user_id)
|
||
{
|
||
if (!is_numeric($user_id))
|
||
Controller::warning(PARAMETER);
|
||
$user = new User_Model($user_id);
|
||
if (!$user->id)
|
||
Controller::error(RECORD);
|
||
if (!$this->acl_check_new('Users_Controller','work', $user->member_id))
|
||
Controller::error(ACCESS);
|
||
$selected = $user->id;
|
||
$arr_users[$user->id] = $user->surname.' '.$user->name.' - '.$user->login;
|
||
}
|
||
else
|
||
{
|
||
// access control
|
||
if (!$this->acl_check_new('Users_Controller', 'work'))
|
||
Controller::error(ACCESS);
|
||
$user_model = new User_Model();
|
||
$users = $user_model->select('id','name','surname','login')->orderby('id')->find_all();
|
||
$selected = NULL;
|
||
foreach ($users as $user)
|
||
{
|
||
$arr_users[$user->id] = $user->surname.' '.$user->name.' - '.$user->login;
|
||
}
|
||
asort($arr_users, SORT_LOCALE_STRING);
|
||
$arr_users = arr::merge (array(NULL => '----- '.url_lang::lang('texts.select user').' -----'), $arr_users);
|
||
}
|
||
// creates form
|
||
$form = new Forge(url_lang::base().'work_reports/add'.(isset($user_id)?'/'.$user_id:''), '', 'POST', array('id' => 'article_form'));
|
||
$form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
|
||
$form->group('')->label(url_lang::lang('texts.Basic information'));
|
||
$form->dropdown('user_id')->label(url_lang::lang('texts.User'))->options($arr_users)->rules('required')->selected($selected);
|
||
$form->textarea('description')->label(url_lang::lang('texts.Description').':')->rules('required|length[0,65535]');
|
||
$form->group('')->label(url_lang::lang('texts.Work'));
|
||
$form->textarea('work_description[1]')->label(url_lang::lang('texts.Description').':')->rules('required|length[0,65535]');
|
||
$form->date('work_date[1]')->label(url_lang::lang('texts.Date').':')->years(date('Y')-10, date('Y'))->rules('required');
|
||
$form->input('work_hours[1]')->label(url_lang::lang('texts.Hours').':')->rules('required|length[0,250]|valid_numeric');
|
||
$form->input('work_km[1]')->label(url_lang::lang('texts.Km').':')->rules('length[0,250]|valid_numeric');
|
||
$form->input('work_suggest_amount[1]')->label(url_lang::lang('texts.Suggest amount').':')->rules('required|valid_numeric');
|
||
|
||
$form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
special::required_forge_style($form, ' *', 'required');
|
||
|
||
if ($form->validate())
|
||
{
|
||
//$form_data = $form->as_array();
|
||
|
||
$form_data = $_POST;
|
||
$issaved = TRUE;
|
||
|
||
$work_report = new Job_report_Model();
|
||
$work_report->description = $form_data["description"];
|
||
$issaved = $issaved && $work_report->save();
|
||
|
||
foreach ($form_data["work_description"] as $i => $work_description)
|
||
{
|
||
$work = new Job_Model();
|
||
$work->job_report_id = $work_report->id;
|
||
$work->user_id = $form_data["user_id"];
|
||
$work->description = $work_description;
|
||
$work->suggest_amount = $form_data["work_suggest_amount"][$i];
|
Také k dispozici: Unified diff
Miliony zmen:
1. Nejvice prace provedeny na procesu schvalovani praci a obecneho schvalovani (vykazu, pozadavku). Bohuzel zatim stale nedodelane, protoze jsem na navrh zbyl sam :-/ Proto nenasazovat na ostry server!!!
2. Opraveno strankovani (sorry, moje chyba :-))
3. Pridan novy js radic tabulek u gridu (vyhodne pouzivat u mensich gridu - vypis seznamu rozhrani u zarizeni, atd.)
.4. Pridan novy typ sloupce do gridu - form_field - nyni je mozne v gridu mit formular.
Na dalsi zmeny si uz nevzpominam, sorry :-)