_db = $db; $this->_transaction_id = $transaction_id; $this->_create_date = date('Y-m-d-H:i:s'); } /** * Add database task. * * @returns int - task id */ function add($task, $table, $obj, $params = array()) { $sql_data = array(); $sql_data["`A_RECORD_CREATE_DATE`"] = "'{$this->_create_date}'"; $sql_data["`A_RECORD_CREATE_AUTHOR`"] = "'" . User::getName() . "'"; $sql_data["`TRANSACTION_ID`"] = "'{$this->_transaction_id}'"; $sql_data["`TASK`"] = "'{$task}'"; $sql_data["`DB_TABLE`"] = "'{$table}'"; $sql_data["`DB_OBJ`"] = "'" . $this->_decode_obj($obj) . "'"; $sql_data["`PARAMS`"] = "'" . $this->_decode_obj($params) . "'"; $sql_data["`TASK_DONE`"] = "'0'"; $sql = "insert into `{$this->_tbl}` (" . implode(", ", array_keys($sql_data)) . ") values (" . implode(", ", array_values($sql_data)) . ");"; $this->_db->query($sql); return $this->_db->insert_id(); } function has_todo() { $tasks = $this->_fetch_task_list(); $undone = 0; foreach ($tasks as $key => $val) { if ($val->TASK_DONE == 0) { $undone++; } } return ($undone > 0); } function has_tasks() { $tasks = $this->_fetch_task_list(); return !empty($tasks); } function _fetch_task_list($force = false) { $this->_task_list = array(); if (!empty($this->_task_list) && $force == false) { return $this->_task_list; } $sql = "select t.* from `{$this->_tbl}` as t where t.`TRANSACTION_ID`='{$this->_transaction_id}' order by `ID` ASC "; $res = $this->_db->query($sql); while ($r = $this->_db->fetch($res)) { $this->_task_list [$r->ID]= $r; } return $this->_task_list; } function get_result($task_id) { $this->_fetch_task_list(); if (!array_key_exists($task_id, $this->_task_list)) { return null; } return $this->_task_list[$task_id]->RESULT_ID; } function set_result($task_id, $res_id) { $sql_data = array(); $sql_data[] = "`A_RECORD_UPDATE_DATE`='" . date('Y-m-d-H:i:s') ."'"; $sql_data[] = "`A_RECORD_UPDATE_AUTHOR`='" . User::getName() . "'"; $sql_data[] = "`RESULT_ID`='{$res_id}'"; $sql_data[] = "`TASK_DONE`='1'"; $sql = "update `{$this->_tbl}` set " . implode("\n , ", $sql_data) . " where ID='{$task_id}';"; $this->_db->query($sql); $this->_task_list[$task_id]->RESULT_ID = $res_id; } function force_run_task($task_id) { $tasks = $this->_fetch_task_list(); if (empty($tasks)) { echo 'Brak tasków'; return true; } if (empty($tasks[$task_id])) { echo 'Brak taska'; return true; } $v_task = $tasks[$task_id]; // encode all obj and params // run task, save result $v_task->DB_OBJ = $this->_encode_obj($v_task->DB_OBJ); $v_task->params_arr = $this->_encode_to_arr($v_task->PARAMS); if (!empty($v_task->params_arr)) { foreach ($v_task->params_arr as $k_field => $v_res_id) { $v_task->DB_OBJ->$k_field = $this->get_result($v_res_id); } } echo'
tasks['.$task_id.'] (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task);echo''; if ($v_task->RESULT_ID > 0) { echo 'Task został juz wykonany wcześniej - wynik ' . $v_task->RESULT_ID; return true; } echo 'running task'; $k_task_id = $task_id; switch ($v_task->TASK) { case 'UPDATE_OBJ': echo '
' . "TODO: Run task ID {$k_task_id}: \$this->_db->UPDATE_OBJ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $affected = $this->_db->UPDATE_OBJ($v_task->DB_TABLE, $v_task->DB_OBJ); echo '
'."result: $affected".'
'; $this->set_result($k_task_id, $affected); break; case 'ADD_NEW_OBJ': echo '' . "TODO: Run task ID {$k_task_id}: \$this->_db->ADD_NEW_OBJ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $new_id = $this->_db->ADD_NEW_OBJ($v_task->DB_TABLE, $v_task->DB_OBJ); echo '
'."result: $new_id".'
'; $this->set_result($k_task_id, $new_id); break; case 'INSERT': echo '' . "TODO: Run task ID {$k_task_id}: insert ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $task_arr = (array)$v_task->DB_OBJ; $sql_arr = array(); foreach ($task_arr as $key => $val) { $sql_arr["`{$key}`"] = "'{$val}'"; } $sql = "insert into `{$v_task->DB_TABLE}` (" . implode(',', array_keys($sql_arr)) . ") values (" . implode(',', array_values($sql_arr)) . ");"; $this->_db->query($sql); $new_id = $this->_db->insert_id(); echo '
'."result: $new_id".'
'; $this->set_result($k_task_id, $new_id); break; default: echo ''."Unknown task ({$v_task->TASK}) for ID = {$k_task_id}".'
'; } } function run() { $tasks = $this->_fetch_task_list(); if (empty($tasks)) { return true; } foreach ($tasks as $k_task_id => $v_task) { if ($v_task->TASK_DONE) { continue; } // encode all obj and params // run task, save result $v_task->DB_OBJ = $this->_encode_obj($v_task->DB_OBJ); $v_task->params_arr = $this->_encode_to_arr($v_task->PARAMS); if (!empty($v_task->params_arr)) { foreach ($v_task->params_arr as $k_field => $v_res_id) { $v_task->DB_OBJ->$k_field = $this->get_result($v_res_id); } } switch ($v_task->TASK) { case 'UPDATE_OBJ': echo '' . "TODO: Run task ID {$k_task_id}: \$this->_db->UPDATE_OBJ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $affected = $this->_db->UPDATE_OBJ($v_task->DB_TABLE, $v_task->DB_OBJ); echo '
'."result: $affected".'
'; $this->set_result($k_task_id, $affected); break; case 'ADD_NEW_OBJ': echo '' . "TODO: Run task ID {$k_task_id}: \$this->_db->ADD_NEW_OBJ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $new_id = $this->_db->ADD_NEW_OBJ($v_task->DB_TABLE, $v_task->DB_OBJ); echo '
'."result: $new_id".'
'; $this->set_result($k_task_id, $new_id); break; case 'INSERT': echo '' . "TODO: Run task ID {$k_task_id}: insert ('{$v_task->DB_TABLE}', DB_OBJ)" . '
'; echo'DB_OBJ (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($v_task->DB_OBJ);echo''; $task_arr = (array)$v_task->DB_OBJ; $sql_arr = array(); foreach ($task_arr as $key => $val) { $sql_arr["`{$key}`"] = "'{$val}'"; } $sql = "insert into `{$v_task->DB_TABLE}` (" . implode(',', array_keys($sql_arr)) . ") values (" . implode(',', array_values($sql_arr)) . ");"; $this->_db->query($sql); $new_id = $this->_db->insert_id(); echo '
'."result: $new_id".'
'; $this->set_result($k_task_id, $new_id); break; default: echo ''."Unknown task ({$v_task->TASK}) for ID = {$k_task_id}".'
'; } } } function _decode_obj($obj) { $lines = array(); foreach ($obj as $k_field => $v_value) { $lines[] = "{$k_field}: {$v_value}"; } return implode("\n", $lines); } function _encode_to_arr($str) { $ret = array(); if (empty($str)) { return null; } $lines = explode("\n", $str); foreach ($lines as $v_line) { $v_args = explode(': ', $v_line, 2); // TODO: BUG A_PROBLEM_DESC: "ANEKS - Stare dane: ..." i w nowej linii "ANEKS - Stare dane: ..." z popdzedniego wpisu // if (false != strpos(' ', $v_args[0])) { // continue; // } $ret[ $v_args[0] ] = $v_args[1]; } return $ret; } function _encode_obj($str) { if (empty($str)) { return null; } $ret = $this->_encode_to_arr($str); return (object)$ret; } function get_tasks() { $tasks = $this->_fetch_task_list(); return $tasks; } }