saimod todo edit, qq, sqlite fix

This commit is contained in:
Ulf Gebhardt 2014-12-12 03:20:42 +01:00
parent 1c02883a3e
commit 8951d298b9
13 changed files with 155 additions and 35 deletions

View File

@ -26,7 +26,7 @@ class ConnectionSQLite extends ConnectionAbstr {
if(!($result = $prepStmt->execute())){
throw new \SYSTEM\LOG\ERROR("Could not execute prepare statement: ". $error);}
return new ResultSQLite($result,$this);
return new ResultSQLite($result,$prepStmt);
}
public function close(){
@ -39,7 +39,7 @@ class ConnectionSQLite extends ConnectionAbstr {
if($result === TRUE){
return TRUE;}
return new ResultSQLite($result);
return new ResultSQLite($result,null);
}
public function exec($query){

View File

@ -26,7 +26,7 @@ class QQ {
return self::QQ()->next();}
public static function QI(){
$qq = self::QQ();
return $qq->affectedRows() != (0||null);}
return $qq;}
//override this
protected static function query(){
throw new \SYSTEM\LOG\ERROR('query function of your QQ Class not overwritten!');}

View File

@ -17,7 +17,9 @@ class ResultSQLite extends \SYSTEM\DB\Result{
$this->close();}
public function close(){
$this->stmt->close();}
if($this->stmt){
$this->stmt->close();}
}
public function count(){
throw new Exception("Problem SQLite");

View File

@ -131,6 +131,8 @@ INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `nam
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1002, 42, 2, 1000, 'open', 'todo', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1003, 42, 2, 1000, 'close', 'todo', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1004, 42, 2, 1000, 'add', 'todo', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1010, 42, 2, 1000, 'edit', 'todo', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1011, 42, 2, 1000, 'edit', 'message', 'STRING');
-- INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (1100, 42, 0, 0, '_SYSTEM_SAI_saimod_sys_docu', 'action', NULL);

View File

@ -21,6 +21,19 @@ function register_new(){
});
}
function register_edit(){
$('#btn_edit').click(function(){
$.ajax({ type : 'GET',
url : SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_todo&action=edit&todo='+$(this).attr('todo')+'&message='+$('#ta_message').val(),
success : function(data) {
if(data.status){
load_todo_tab('todolist');
}
}
});
});
}
function register_newform(){
$('#btn_add').click(function(){
$.ajax({ type : 'GET',
@ -45,7 +58,7 @@ function load_todo_tab(action){
return;
case 'dotolist':
$('#tab_todo').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_todo&action='+action, function(){
register_doto(false);
register_doto();
register_listclick();
$('#img_loader').hide();});
return;
@ -63,6 +76,7 @@ function register_listclick(todo){
$('.sai_todo_element').click(function(){
$('#img_loader').show();
$('#tab_todo').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_todo&action=todo&todo='+$(this).attr('todo'), function(){
register_edit();
$('#btn_back').click(function(){
if(todo){load_todo_tab('todolist');}else{load_todo_tab('dotolist');}});
if(todo){register_close();}else{register_open();}
@ -100,14 +114,37 @@ function register_close(){
}
function register_todolist(){
$('#btn_refresh').unbind('click');
$('#btn_refresh').click(function(){
load_todo_tab('todolist');});
$('#btn_close_all').unbind('click');
$('#btn_close_all').click(function(){
if (confirm('Are you sure you want to delete all open entries in the todolist?')) {
$.ajax({ type :'GET',
url : SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_todo&action=close_all',
success : function(data) {
if(data.status){
load_todo_tab('todolist');
}else{
alert('Problem: '+data);}
}
});
}
})
}
function register_doto(){
$('#btn_refresh').unbind('click');
$('#btn_refresh').click(function(){
load_todo_tab('dotolist');});
$('#btn_close_all').unbind('click');
$('#btn_close_all').click(function(){
alert('operation not possible on this list');});
}
function register_stats(){
$('#btn_refresh').unbind('click');
$('#btn_refresh').click(function(){
load_todo_tab('stats');});
$('#btn_close_all').unbind('click');
$('#btn_close_all').click(function(){
alert('operation not possible on this list');});
}

View File

@ -0,0 +1,14 @@
<?php
namespace SYSTEM\DBD;
class SYS_SAIMOD_TODO_CLOSE_ALL extends \SYSTEM\DB\QQ {
protected static function query(){
return new \SYSTEM\DB\QQuery(get_class(),
//pg
'UPDATE '.\SYSTEM\DBD\system_todo::NAME_PG.' SET '.\SYSTEM\DBD\system_todo::FIELD_STATE.'='.\SYSTEM\DBD\system_todo::FIELD_STATE_CLOSED.
' WHERE "'.\SYSTEM\DBD\system_todo::FIELD_TYPE.'"='.\SYSTEM\DBD\system_todo::FIELD_TYPE_EXCEPTION.';',
//mys
'UPDATE '.\SYSTEM\DBD\system_todo::NAME_MYS.' SET '.\SYSTEM\DBD\system_todo::FIELD_STATE.'='.\SYSTEM\DBD\system_todo::FIELD_STATE_CLOSED.
' WHERE `'.\SYSTEM\DBD\system_todo::FIELD_TYPE.'`='.\SYSTEM\DBD\system_todo::FIELD_TYPE_EXCEPTION.';'
);}}

View File

@ -8,10 +8,10 @@ class SYS_SAIMOD_TODO_DOTO_LIST extends \SYSTEM\DB\QQ {
'SELECT * FROM '.\SYSTEM\DBD\system_todo::NAME_PG.
' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_PG.' ON '.\SYSTEM\DBD\system_todo::NAME_PG.'."'.\SYSTEM\DBD\system_todo::FIELD_USER.'"='.\SYSTEM\DBD\system_user::NAME_PG.'."'.\SYSTEM\DBD\system_user::FIELD_ID.'"'.
' WHERE '.\SYSTEM\DBD\system_todo::FIELD_STATE.'='.\SYSTEM\DBD\system_todo::FIELD_STATE_CLOSED.
' ORDER BY '.\SYSTEM\DBD\system_todo::FIELD_COUNT.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_TIME.' DESC LIMIT 100;',
' ORDER BY '.\SYSTEM\DBD\system_todo::FIELD_TYPE.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_COUNT.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_TIME.' DESC LIMIT 100;',
//mys
'SELECT * FROM '.\SYSTEM\DBD\system_todo::NAME_MYS.
' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_MYS.' ON '.\SYSTEM\DBD\system_todo::FIELD_USER.'='.\SYSTEM\DBD\system_user::NAME_MYS.'.'.\SYSTEM\DBD\system_user::FIELD_ID.
' WHERE '.\SYSTEM\DBD\system_todo::FIELD_STATE.'='.\SYSTEM\DBD\system_todo::FIELD_STATE_CLOSED.
' ORDER BY '.\SYSTEM\DBD\system_todo::FIELD_COUNT.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_TIME.' DESC LIMIT 100;'
' ORDER BY '.\SYSTEM\DBD\system_todo::FIELD_TYPE.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_COUNT.' DESC, '.\SYSTEM\DBD\system_todo::FIELD_TIME.' DESC LIMIT 100;'
);}}

View File

@ -0,0 +1,15 @@
<?php
namespace SYSTEM\DBD;
class SYS_SAIMOD_TODO_EDIT extends \SYSTEM\DB\QP {
protected static function query(){
return new \SYSTEM\DB\QQuery(get_class(),
//pg
'UPDATE '.\SYSTEM\DBD\system_todo::NAME_PG.' SET '.\SYSTEM\DBD\system_todo::FIELD_MESSAGE.'= $1'.
' WHERE "'.\SYSTEM\DBD\system_todo::FIELD_ID.'"= $2;',
//mys
'UPDATE '.\SYSTEM\DBD\system_todo::NAME_MYS.' SET '.\SYSTEM\DBD\system_todo::FIELD_MESSAGE.'= ?, '
.\SYSTEM\DBD\system_todo::FIELD_MESSAGE_HASH.'= SHA1(?)'.
' WHERE '.\SYSTEM\DBD\system_todo::FIELD_ID.'= ?;'
);}}

View File

@ -25,33 +25,41 @@ class saimod_sys_todo extends \SYSTEM\SAI\SaiModule {
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_todolist(){
$result = '';
$result = $result_user = '';
$res = \SYSTEM\DBD\SYS_SAIMOD_TODO_TODO_LIST::QQ();
$count = \SYSTEM\DBD\SYS_SAIMOD_TODO_TODO_COUNT::Q1()['count'];
while($row = $res->next()){
$row['class_by_type'] = self::trclassbytype($row['type']);
$row['class_row'] = self::trclass($row['type'],$row['class']);
$row['time_elapsed'] = self::time_elapsed_string(strtotime($row['time']));
$row['report_type'] = self::reporttype($row['type']);
//$row['report_type'] = self::reporttype($row['type']);
$row['state_string'] = self::state($row['count']);
$row['state_btn'] = self::statebtn($row['count']);
$result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row);
}
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_list_elements' => $result, 'count' => $count));
if($row['type'] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){
$row['message'] = str_replace("\r", '<br/>', $row['message']);
$result_user .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_user_list_element.tpl'), $row);
} else {
$result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row);
}}
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_user_list_elements' => $result_user,'todo_list_elements' => $result, 'count' => $count));
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_dotolist(){
$result = '';
$result = $result_user = '';
$res = \SYSTEM\DBD\SYS_SAIMOD_TODO_DOTO_LIST::QQ();
$count = \SYSTEM\DBD\SYS_SAIMOD_TODO_DOTO_COUNT::Q1()['count'];
while($row = $res->next()){
$row['class_by_type'] = self::trclassbytype($row['type']);
$row['class_row'] = self::trclass($row['type'],$row['class']);
$row['time_elapsed'] = self::time_elapsed_string(strtotime($row['time']));
$row['report_type'] = self::reporttype($row['type']);
$row['state_string'] = self::state($row['count']);
$row['state_btn'] = self::statebtn($row['count']);
$result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row);
if($row['type'] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){
$row['message'] = str_replace("\r", '<br/>', $row['message']);
$result_user .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_user_list_element.tpl'), $row);
} else {
$result .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list_element.tpl'), $row);
}
}
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_list_elements' => $result, 'count' => $count));
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/todo_list.tpl'), array('todo_user_list_elements' => $result_user,'todo_list_elements' => $result, 'count' => $count));
}
public static function statistics(){
@ -121,29 +129,38 @@ class saimod_sys_todo extends \SYSTEM\SAI\SaiModule {
return '<input type="submit" class="btn-danger" value="reopen">';}
return '<input type="submit" class="btn-danger" value="close">';}
private static function reporttype($type){
switch($type){
case 0: return 'Feature Request';
case 1: return 'Error Report';
case 2: return 'Unasigned Category';
default: return 'Note';
private static function trclass($type,$class){
if($type == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER){
return 'success';}
switch($class){
case 'SYSTEM\LOG\INFO': case 'INFO': case 'SYSTEM\LOG\COUNTER':
return 'success';
case 'SYSTEM\LOG\DEPRECATED': case 'DEPRECATED':
return 'info';
case 'SYSTEM\LOG\ERROR': case 'ERROR': case 'Exception': case 'SYSTEM\LOG\ERROR_EXCEPTION':
case 'ErrorException': case 'SYSTEM\LOG\SHUTDOWN_EXCEPTION':
return 'error';
case 'SYSTEM\LOG\WARNING': case 'WARNING':
return 'warning';
default:
return '';
}
}
private static function trclassbytype($type){
switch($type){
case 0: return 'info';
case 1: return 'error';
case 2: return 'warning';
case 3: return 'success';
default: return '';
}
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_close_all(){
\SYSTEM\DBD\SYS_SAIMOD_TODO_CLOSE_ALL::QI();
return \SYSTEM\LOG\JsonResult::ok();}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_edit($todo, $message){
\SYSTEM\DBD\SYS_SAIMOD_TODO_EDIT::QI(array($message,$message,$todo));
return \SYSTEM\LOG\JsonResult::ok();}
public static function sai_mod__SYSTEM_SAI_saimod_sys_todo_action_todo($todo){
$vars = \SYSTEM\DBD\SYS_SAIMOD_TODO_TODO::QQ(array($todo))->next();
$vars = \SYSTEM\DBD\SYS_SAIMOD_TODO_TODO::Q1(array($todo));
$vars['trace'] = implode('</br>', array_slice(explode('#', $vars['trace']), 1, -1));
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl'), $vars);}
return $vars[\SYSTEM\DBD\system_todo::FIELD_TYPE] == \SYSTEM\DBD\system_todo::FIELD_TYPE_USER ?
\SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/saimod_sys_todo_todo_user.tpl'), $vars) :
\SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_todo/tpl/saimod_sys_todo_todo.tpl'), $vars);}
public static function html_li_menu(){return '<li><a href="#" saimenu=".SYSTEM.SAI.saimod_sys_todo">ToDo</a></li>';}
public static function right_public(){return false;}

View File

@ -7,6 +7,7 @@
<li><a href="#tab_todo" action="stats">Statistics</a></li>
<img id="img_loader" src="${PICPATH}ajax-loader.gif" style="margin-left: 10px; margin-top: 10px; display: none; float: left"/>
<button id="btn_refresh" class="btn-primary" style="margin-right: 15px; height: 32px; font-size: 13px; float: right;">Refresh</button>
<button id="btn_close_all" class="btn-danger" style="margin-right: 15px; height: 32px; font-size: 13px; float: right;">Close All</button>
<button id="btn_new" class="btn-success" style="margin-right: 15px; height: 32px; font-size: 13px; float: right;">Add</button>
</ul>
<div class="tab-content">

View File

@ -0,0 +1,16 @@
<h3>ToDo ${ID}</h3>
<table class="table table-hover table-condensed">
<tr><th>Property</th><th>Value</th></tr>
<tr><td>ID</td><td>${ID}</td></tr>
<tr><td>ip</td><td>${ip}</td></tr>
<tr><td>querytime</td><td>${querytime}</td></tr>
<tr><td>time</td><td>${time}</td></tr>
<tr><td>http_referer</td><td>${http_referer}</td></tr>
<tr><td>http_user_agent</td><td>${http_user_agent}</td></tr>
<tr><td>user</td><td>${username}</td></tr>
<tr><td>message</td><td><textarea id="ta_message">${message}</textarea></td></tr>
</table>
<button id="btn_back" class="btn-success" style="margin-right: 15px; height: 32px; font-size: 13px; float: left;">Back</button>
<button id="btn_edit" class="btn-danger" style="margin-right: 15px; height: 32px; font-size: 13px; float: right;" todo="${ID}">Edit</button>
<button id="btn_close" class="btn-danger" style="display: none; margin-right: 15px; height: 32px; font-size: 13px; float: right;" todo="${ID}">Close</button>
<button id="btn_open" class="btn-danger" style="display: none; margin-right: 15px; height: 32px; font-size: 13px; float: right;" todo="${ID}">Open</button>

View File

@ -1,5 +1,16 @@
<div id="table-wrapper">
Rows: ${count}
<h5>User ToDo's</h5>
<table class="table table-hover table-condensed">
<tr>
<th>time ago</th>
<th>message</th>
<th>user</th>
</tr>
${todo_user_list_elements}
</table>
<hr>
<h5>Generated ToDo's</h5>
<table class="table table-hover table-condensed">
<tr>
<th>time ago</th>

View File

@ -0,0 +1,5 @@
<tr class="sai_todo_element ${class_row}" todo="${ID}">
<td>${time_elapsed}</td>
<td style="word-break: break-all;">${message}</td>
<td>${username}</td>
</tr>