ID_PROCES_INIT = V::get('proces_id', '', $_GET, 'int'); $sql_obj->ID_STANOWISKO = V::get('stanowisko_id', '', $_GET, 'int'); $sql_obj->TEST_TYPE = V::get('test_type', '', $_GET); $sql_obj->ID_TESTER = User::getID(); // validate $has_errors = false; if ($sql_obj->ID_PROCES_INIT <= 0) { App::add_error("Bledny numer procesu!"); $has_errors = true; } if ($sql_obj->ID_STANOWISKO <= 0) { App::add_error("Bledny numer stanowiska!"); $has_errors = true; } if (!in_array($sql_obj->TEST_TYPE, array('TEORETYCZNY', 'PRAKTYCZNY'))) { App::add_error("Bledny typ testu!"); $has_errors = true; } if (!$has_errors) { $new_id = DB::ADD_NEW_OBJ( 'CRM_TESTY', $sql_obj ); if ($new_id > 0) { $redirect = "?task="."CRM_TEST"."&test_id=".$new_id;// TODO: hide_menu - hide user panel App::add_msg("Rozpocznij test"); } else { App::add_error("Error przy dodawaniu rekordu!"); } } App::redirect($redirect, $msg); } /** * @param $_GET['kandydat_id'] - kandydat id */ function fun_CRM_TESTY_RELOGIN_AS_KANDYDAT() { $redirect = "?task=" . "CRM_TESTY"; $msg = ''; $kandydat_id = V::get('kandydat_id', 0, $_POST, 'int'); session_destroy(); session_start(); SEF('AUTHORIZE_USER_LOGIN'); AUTHORIZE_USER_LOGIN( 'Kandydat.'.$kandydat_id, 'Kandydat' ); if (User::logged()) { // ok } else { // not ok - log in } App::redirect($redirect, $msg); } /** * Add kandydat to `ADMIN_USERS`. * @param $_POST['f_name'] * @param $_POST['f_tel'] * @param $_POST['f_email'] */ function fun_CRM_TESTY_ADD_KANDYDAT() { $redirect = "?task=".App::get_task(); $msg = ''; $sql_obj = new stdClass(); $sql_obj->ADM_NAME = V::get('f_name', '', $_POST); $sql_obj->ADM_PHONE = V::get('f_tel', '', $_POST); $sql_obj->EMAIL = V::get('f_email', '', $_POST); $sql_obj->ADM_PASSWD = md5('Kandydat'); $sql_obj->ADM_ADMIN_LEVEL = 6; $sql_obj->A_STATUS = 'WAITING'; $sql_obj->ADM_ACCOUNT = 'Kandydat'; $sql_obj->ADM_AREA = 'KANDYDAT'; $sql_obj->ADM_ADMIN_DESC = 'Kandydat'; $error = false; if (!$sql_obj->ADM_NAME) { App::add_error("Podaj imie i nazwisko"); $error = true; } if (!$sql_obj->ADM_PHONE) { App::add_error("Podaj numer telefonu"); $error = true; } if (!$sql_obj->EMAIL) { App::add_error("Podaj adres e-mail"); $error = true; } if ($error) { //App::redirect($redirect, $msg); return; } $db = DB::getDB(); $new_id = $db->ADD_NEW_OBJ( 'ADMIN_USERS', $sql_obj ); if ($new_id > 0) { App::add_msg("Dodano nowego kandydata"); // update login name `ADM_ACCOUNT` to uniq name $sql_obj = new stdClass(); $sql_obj->ID = $new_id; $sql_obj->ADM_ACCOUNT = 'Kandydat.'.$new_id; $affected = $db->UPDATE_OBJ( 'ADMIN_USERS', $sql_obj ); if ($affected == 2) { App::add_msg("ok"); } else if ($affected == 1) { // nie zapisano historii - ok } else { App::add_error("Error przy zmianie loginu kandydata!".$db->error()); } } else { App::add_error("Error przy dodawaniu kandydata!!"); } App::redirect($redirect, $msg); } /** * @param $_GET['test_id'] - ID rekordu. */ function fun_CRM_TEST_EDIT() { $test_id = V::get('test_id', 0, $_GET, 'int'); $redirect = "?task=".App::get_task()."&test_id=".$test_id; $msg = ''; $sql_obj = new stdClass(); $test_obj = DB::get_by_id( 'CRM_TESTY', $test_id ); $subtask = V::get('subtask', '', $_REQUEST); if ($subtask == 'INIT') { if ($test_obj->A_STATUS == 'WAITING') { $sql_obj->ID = $test_obj->ID; $sql_obj->A_STATUS = 'MONITOR'; $sql_obj->TEST_INIT = 'NOW()'; $affected = DB::UPDATE_OBJ( 'CRM_TESTY', $sql_obj ); if ($affected == 2) { App::add_msg("Test rozpoczety"); } else if ($affected == 1) { App::add_error("Zmienio rekord (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas edytowania rekordu - nic nie zmieniono"); } } else { // TODO: mozna sprawdzic aktualny status - msg App::add_error("Nie mozna rozpoczac testu"); } } else if ($subtask == 'START') { if ($test_obj->A_STATUS == 'MONITOR') { $sql_obj->ID = $test_obj->ID; $sql_obj->A_STATUS = 'MONITOR';// start test $sql_obj->TEST_START = 'NOW()'; $affected = DB::UPDATE_OBJ( 'CRM_TESTY', $sql_obj ); if ($affected == 2) { App::add_msg("Uruchomiono test"); } else if ($affected == 1) { App::add_error("Zmienio rekord (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas edytowania rekordu - nic nie zmieniono"); } } else { // TODO: mozna sprawdzic aktualny status - msg App::add_error("Nie mozna rozpoczac testu"); } } else if ($subtask == 'SAVE') {// zapisz podane odpowiedzi Lib::loadClass( 'ProcesTestyHelper' ); $odpowiedzi = ProcesTestyHelper::get_odpowiedzi( $test_obj->ID ); $pytania_id = array(); foreach ($odpowiedzi as $k_id_proces => $v_odp) { foreach ($v_odp as $k_id_pyt => $v_pyt) { $pytania_id[$k_id_pyt] = $v_pyt; }//end foreach }//end foreach $user_odpowiedzi = array(); if (!empty($_POST)) { foreach ($_POST as $k => $v) { if (substr($k, 0, 4) == 'ODP_') { $k_id_pyt = substr($k, 4); if (strpos($k_id_pyt, '_ODP_') !== false) { $k_id_pyt_arr = explode('_ODP_', $k_id_pyt); if (count($k_id_pyt_arr) == 2) { $user_odpowiedzi[ $k_id_pyt_arr[0] ][ $k_id_pyt_arr[1] ] = $v; } } else { $user_odpowiedzi[ $k_id_pyt ] = $v; } } }//end foreach } foreach ($user_odpowiedzi as $k_id_pyt => $v_odp) { if (array_key_exists($k_id_pyt, $pytania_id)) { // update odp $sql_obj = new stdClass(); $sql_obj->ID = $pytania_id[$k_id_pyt]->ID; $sql_obj->ID_TEST = $test_obj->ID; $sql_obj->ID_PYTANIE = $k_id_pyt; $sql_obj->ODPOWIEDZ = ''; $sql_obj->ODP_0 = ''; $sql_obj->ODP_1 = ''; $sql_obj->ODP_2 = ''; $sql_obj->ODP_3 = ''; $sql_obj->ODP_4 = ''; $is_odp = false; if (is_array($v_odp)) { for ($i = 0; $i < 5; $i++) { if (isset($v_odp[$i])) { $is_odp = true; $field = "ODP_".$i; $sql_obj->$field = $v_odp[$i]; } } } else { $is_odp = true; $sql_obj->ODPOWIEDZ = $v_odp; } if ($is_odp) {// pomin puste $affected = DB::UPDATE_OBJ( 'CRM_TESTY_ODPOWIEDZI', $sql_obj ); if ($affected == 2) { App::add_msg("Zapisano odpowiedz do [".$k_id_pyt."]"); } else if ($affected == 1) { App::add_error("Zapisano odpowiedz do [".$k_id_pyt."] (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas zapisu odpowiedzi do [".$k_id_pyt."]"); } } } else { // add odp $sql_obj = new stdClass(); $sql_obj->ID_TEST = $test_obj->ID; $sql_obj->ID_PYTANIE = $k_id_pyt; $sql_obj->ODPOWIEDZ = ''; $sql_obj->ODP_0 = ''; $sql_obj->ODP_1 = ''; $sql_obj->ODP_2 = ''; $sql_obj->ODP_3 = ''; $sql_obj->ODP_4 = ''; $is_odp = false; if (is_array($v_odp)) { for ($i = 0; $i < 5; $i++) { if (!empty($v_odp[$i])) { $is_odp = true; $field = "ODP_".$i; $sql_obj->$field = $v_odp[$i]; } } } else { if (!empty($v_odp)) { $is_odp = true; $sql_obj->ODPOWIEDZ = $v_odp; } } if ($is_odp) { $new_id = DB::ADD_NEW_OBJ( 'CRM_TESTY_ODPOWIEDZI', $sql_obj ); if ($new_id > 0) { App::add_msg("Zapisano odpowiedz do [".$k_id_pyt."]"); } else { App::add_error("Blad podczas zapisu odpowiedzi do [".$k_id_pyt."]"); } } } }//end foreach // zakoncz test if (!empty($_POST['save_and_end']) && $test_obj->A_STATUS == 'MONITOR') { $sql_obj = new stdClass(); $sql_obj->ID = $test_obj->ID; $sql_obj->A_STATUS = 'NORMAL';// start test $sql_obj->TEST_END = 'NOW()'; $affected = DB::UPDATE_OBJ( 'CRM_TESTY', $sql_obj ); if ($affected == 2) { App::add_msg("Zakonczono test"); } else if ($affected == 1) { App::add_error("Zmienio rekord (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas edytowania rekordu - nic nie zmieniono"); } } } else if ($subtask == 'OCEN') {// zapisz ocen $kandydat_id = V::get('kandydat_id', 0, $_GET, 'int'); $redirect .= "&kandydat_id=".$kandydat_id; if ($test_obj->A_STATUS == 'NORMAL' || $test_obj->A_STATUS == 'OFF_HARD') { $oceny = array();// zazanczone oceny ($_POST) $oceny_id = array();// [ID_PYT] = {ID,ID_PYTANIE,ID_PROCES,ODPOWIEDZ,ODP_0/1/2/3/4,OCENA} $oceny_empty = array();// zazanczone oceny ($_POST), ale brak rekordow w tabeli odpowiedzi - user not answer $pytania_empty = array();// j/w $ocena_srednia = 0;// TODO: RMME $avg_odpowiedzi_pyt = array();// wszystkie odpowiedzi [ID_PROCES][ID_PYT] = OCENA Lib::loadClass( 'ProcesTestyHelper' ); $odpowiedzi = ProcesTestyHelper::get_odpowiedzi( $test_obj->ID ); $pytania_id = array(); foreach ($odpowiedzi as $k_id_proces => $v_odp) { foreach ($v_odp as $k_id_pyt => $v_pyt) { $oceny_id[$k_id_pyt] = $v_pyt; }//end foreach }//end foreach // zaznaczone oceny if (!empty($_POST)) { $req_prefix = 'ocena_'; foreach ($_POST as $k => $v) { if (substr($k, 0, strlen($req_prefix)) == $req_prefix) { $id_pyt = substr($k, strlen($req_prefix)); $oceny[ $id_pyt ] = $v; if (!array_key_exists($id_pyt, $oceny_id)) { $oceny_empty [$id_pyt] = true; } } }//end foreach } //echo'
oceny: ';print_r($oceny);echo'
'; //echo'
oceny_id: ';print_r($oceny_id);echo'
'; // dla kazdego procesu obliczyc srednia na podstawie ocen odpowiedzi na pytania //echo'
oceny_empty: ';print_r($oceny_empty);echo'
'; if (!empty($oceny_empty)) { $pytania_empty = ProcesTestyHelper::get_pytania_by_id( array_keys($oceny_empty) ); //echo'
pytania_empty: ';print_r($pytania_empty);echo'
'; } foreach ($oceny as $k_id_pyt => $v_odp) { if (array_key_exists($k_id_pyt, $oceny_id)) { // update odp $odp_row = $oceny_id[$k_id_pyt]; $sql_obj = new stdClass(); $sql_obj->ID = $odp_row->ID; $sql_obj->OCENA = $oceny[$k_id_pyt]; $avg_odpowiedzi_pyt[$odp_row->ID_PROCES][$odp_row->ID_PYTANIE] = $oceny[$k_id_pyt]; $affected = DB::UPDATE_OBJ( 'CRM_TESTY_ODPOWIEDZI', $sql_obj ); if ($affected == 2) { App::add_msg("Zapisano ocene do [".$k_id_pyt."]"); } else if ($affected == 1) { App::add_error("Zapisano ocene do [".$k_id_pyt."] (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas zapisu oceny do [".$k_id_pyt."]"); } } else if (array_key_exists($k_id_pyt, $pytania_empty)) { // error odpowiedz not exists, add OCENA = 0 - nic $pyt_row = $pytania_empty[$k_id_pyt]; $avg_odpowiedzi_pyt[$pyt_row->ID_PROCES][$pyt_row->ID] = $oceny[$k_id_pyt]; } else { // TODO: error unknown! } }//end foreach $ocena_avg = 0; // oblicz srednia dla kazdego procesu if (!empty($avg_odpowiedzi_pyt)) { $avg_odpowiedzi = array();// wszystkie odpowiedzi [ID_PROCES] = OCENA (avg from $avg_odpowiedzi_pyt[ID_PROCES]) $avg_max = 0; $avg_sum = 0; //echo'
avg_odpowiedzi_pyt: ';print_r($avg_odpowiedzi_pyt);echo'
'; foreach ($avg_odpowiedzi_pyt as $k_id_proces => $v_odp) { if (!empty($v_odp)) { $p_avg_sum = 0; foreach ($v_odp as $k_id_pyt => $v_ocena) { $p_avg_sum += $v_ocena; }//end foreach $p_avg_max = count($v_odp);// max 3 za pytanie $p_avg = floatval($p_avg_sum) / $p_avg_max;// srednia procesu $k_id_proces $avg_odpowiedzi[$k_id_proces] = $p_avg; $avg_sum += $p_avg; } }//end foreach if (!empty($avg_odpowiedzi)) { $avg_max = count($avg_odpowiedzi); $ocena_avg = round($avg_sum / $avg_max, 2); //echo'
avg_odpowiedzi: ';print_r($avg_odpowiedzi);echo'
'; //echo'{AVG: '.$avg_sum.'/'.$avg_max.' = '.($avg_sum / $avg_max).' ~ '.$ocena_avg.'}'; } } $sql_obj = new stdClass(); $sql_obj->ID = $test_obj->ID; $sql_obj->A_STATUS = 'OFF_HARD';// test oceniony $sql_obj->UWAGI = V::get('f_uwagi', '', $_POST); $sql_obj->OCENA = $ocena_avg; $affected = DB::UPDATE_OBJ( 'CRM_TESTY', $sql_obj ); if ($affected == 2) { App::add_msg("Oceniono test: $ocena_avg/3"); } else if ($affected == 1) { App::add_error("Oceniono test (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas oceniania testu - nic nie zmieniono"); } } } else if ($subtask == 'EDIT') {// zapisz dane if ($test_obj->A_STATUS == 'OFF_HARD') { $sql_obj->ID = $test_obj->ID; $sql_obj->UWAGI = V::get('UWAGI', '', $_POST); $sql_obj->COST = V::get('COST', 0, $_POST, 'double'); $sql_obj->DISCOUNT = V::get('DISCOUNT', 0, $_POST, 'double'); $sql_obj->ID_ORGANIZER = V::get('ID_ORGANIZER', 0, $_POST, 'int'); $sql_obj->TEST_PLACE = V::get('TEST_PLACE', '', $_POST); $sql_obj->SHOW_IN_CERT = V::get('SHOW_IN_CERT', '', $_POST); $affected = DB::UPDATE_OBJ( 'CRM_TESTY', $sql_obj ); if ($affected == 2) { App::add_msg("Zapisano zmiany"); } else if ($affected == 1) { App::add_error("Zmienio rekord (Error: nie zapisano hostorii)"); } else if ($affected < 0) { App::add_error("Blad podczas edytowania rekordu - nic nie zmieniono"); } } } else { App::add_error("Wrong task"); } App::redirect($redirect, $msg); } /** * @param $_GET['test_id'] - ID z tabeli CRM_TESTY */ function task_CRM_TEST() { $test_id = V::get('test_id', 0, $_GET, 'int'); Lib::loadClass('ProcesTestyHelper'); if ($test_id <= 0) { echo'

'."Wrong ID".'

'; return; } $test_obj = DB::get_by_id( 'CRM_TESTY', $test_id ); if (!$test_obj) { echo'

'."Wrond ID.".'

'; return; } $stanowisko = DB::get_by_id( 'CRM_LISTA_ZASOBOW', $test_obj->ID_STANOWISKO ); $proces = DB::get_by_id( 'CRM_PROCES', $test_obj->ID_PROCES_INIT ); echo'

'."Test procesu ".''."[".$proces->ID."] ".$proces->DESC.''; //echo'
'.''.$proces->OPIS.''; echo'

'; echo'

'."dla stanowiska ".''."[".$stanowisko->ID."] ".$stanowisko->DESC.''; //echo'
'.''.$stanowisko->OPIS.''; echo'

'; //echo'
test : ';print_r($test_obj);echo'
'; /* * WAITING - nowy test - oczekiwanie na rozpoczecie testu * MONITOR - test rozpoczety z data TEST_INIT * NORMAL - test zakonczony - do ocenienia TEST_END * OFF_HARD - test oceniony */ if ($test_obj->A_STATUS == 'WAITING') {// nowy test - oczekiwanie na rozpoczecie testu echo App::link("Rozpocznij", array('task'=>App::get_task(), 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'INIT', 'test_id'=>$test_obj->ID), array('class'=>'btn-p5')); } else if ($test_obj->A_STATUS == 'MONITOR' && $test_obj->TEST_START == '0000-00-00 00:00:00') {// czytanie - test rozpoczety z data TEST_INIT $id_proces = $test_obj->ID_PROCES_INIT; $p = DB::get_by_id('CRM_PROCES', $id_proces); if (!$p) { echo '
' . "Proces {$id_proces} nie istnieje" . '
'; return; } Lib::loadClass('TreeListView'); $treeList = new TreeListView('CRM_PROCES', $id_proces, 'PARENT_ID'); $treeList->fetchTreeFlat(); $listFlat = $treeList->generateListFlat(); $treeList->fetchData(); $ids = $treeList->getListIds(); $wskazniki = ProcesHelper::getWskaznikiByIds($ids, array('group_stanowiska' => 1)); if(V::get('DBG_TF', '', $_GET) > 1){echo'
$wskazniki (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($wskazniki);echo'
';} $gotoLinks = array(); $gotoIds = array(); foreach ($listFlat as $vItem) { $item = $treeList->getData($vItem->ID); if ($item->IF_TRUE_GOTO > 0) { $gotoIds[] = $item->IF_TRUE_GOTO; } } if (!empty($gotoIds)) { $db = DB::getDB(); $sqlIds = implode(",", $gotoIds); $sql = "select p.`ID`, p.`DESC`, p.`OPIS` from `CRM_PROCES` as p where p.`A_STATUS` in('WAITING', 'NORMAL') and p.`ID` in({$sqlIds}) "; $res = $db->query($sql); while ($r = $db->fetch($res)) { $gotoLinks[$r->ID] = $r->DESC; } } foreach ($listFlat as $vItem) { $item = $treeList->getData($vItem->ID); if(V::get('DBG_TF', '', $_GET) > 0){echo'
wskazniki['.$item->ID.'] (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($wskazniki[$item->ID]);echo'
';} $vItem->gotoOut = ''; if ($item->IF_TRUE_GOTO > 0) { $gotoLink = "{{$item->IF_TRUE_GOTO}}"; if (!V::get('HIDE_PANEL', 0, $_GET, 'int')) { $gotoLink = App::link($gotoLink, array('task'=>'PROCES_VIEW_LIST', 'id_proces'=>$item->IF_TRUE_GOTO)); } if ($item->IF_TRUE_GOTO_FLAG == 'GOTO') { $vItem->gotoOut .= "Przejdź do procesu {$gotoLink}"; } else if ($item->IF_TRUE_GOTO_FLAG == 'GOTO_AND_RETURN') { $vItem->gotoOut .= "Przejdź do procesu {$gotoLink} i wróć po jego zakończeniu"; } else if ($item->IF_TRUE_GOTO_FLAG == 'FORK') { $vItem->gotoOut .= "Uruchom propces {$gotoLink}"; } if (!empty($vItem->gotoOut) && !empty($gotoLinks[$item->IF_TRUE_GOTO])) { $vItem->gotoOut .= ": {$gotoLinks[$item->IF_TRUE_GOTO]}"; } $vItem->gotoOut .= "."; } } $imgSize = (V::get('show_big_img', '', $_GET))? '600x600' : '200x200'; ?>
getData($vItem->ID); ?>

listNr; ?>. DESC; ?> {ID; ?>}

A_HAS_IMAGE > 0) : ?> A_HAS_IMAGE; $i++) : ?> OPIS; ?>

ID, $wskazniki)) : ?>
ID]['stanowiska'])) : ?>
Stanowiska:
    ID]['stanowiska'] as $vWsk) : ?>
  • DESC; ?> [ID; ?>]
ID]['inne'])) : ?>
Użyte zasoby:
    ID]['inne'] as $vWsk) : ?>
  • A_HAS_IMAGE > 0) : ?> A_HAS_IMAGE; $i++) : ?> CW_A_HAS_IMAGE > 0) : ?> CW_A_HAS_IMAGE; $i++) : ?> DESC_PL))? $vWsk->DESC_PL : $vWsk->DESC; ?> OPIS))? " ({$vWsk->OPIS})." : ''; ?> OPIS_ZASOB))? "
    {$vWsk->OPIS_ZASOB}" : ''; ?> [ID; ?>]
gotoOut) : ?>
gotoOut; ?>
';// .container ?>

App::get_task(), 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'START', 'test_id'=>$test_obj->ID), array('class'=>'btn btn-primary')); ?>

Po rozpoczęciu testu nie ma możliwości powrotu do procesu.
Test wielokrotnego wyboru, należy odpowiedzieć na wszystkie pytania zaznaczając TAK lub NIE

A_STATUS == 'MONITOR' && $test_obj->TEST_START != '0000-00-00 00:00:00') {// wype??nianie - test rozpoczety z data TEST_INIT $tbl = 'CRM_PROCES'; if ($test_obj->TEST_START == '0000-00-00 00:00:00') { $clbk = 'tree_callback__show_item_from_'.$tbl; } else { $clbk = 'tree_callback__show_test_item_from_'.$tbl; } $tree_params = array(); $tree_params['rozwin'] = true; $tree_params['editable'] = false; $tree_params['rozwin_proces'] = true; $tree_params['filtr_img'] = true; $tree_params['rozwin_zasoby'] = true; $tree_params['rozwin_opis'] = true; $tree_params['style'] = 'NOWY'; $tree_params['TEST_TYPE'] = $test_obj->TEST_TYPE; $odpowiedzi = ProcesTestyHelper::get_odpowiedzi( $test_obj->ID, $test_obj->TEST_TYPE ); foreach ($odpowiedzi as $k_id_proces => $v_odp) { foreach ($v_odp as $k_id_pyt => $v_pyt) { $tree_params[ 'ODP_'.$k_id_pyt ] = $v_pyt->ODPOWIEDZ; for ($i = 0; $i < 5; $i++) { $v_pyt_field = "ODP_".$i; $tree_params[ 'ODP_'.$k_id_pyt.'_ODP_'.$i ] = $v_pyt->$v_pyt_field; } $tree_params[ 'ocena_'.$k_id_pyt ] = $v_pyt->OCENA; }//end foreach }//end foreach if (!empty($_POST)) { foreach ($_POST as $k => $v) { if (substr($k, 0, 4) == 'ODP_') { $tree_params[ $k ] = $v;// overwrite in tree params } }//end foreach } if ($test_obj->TEST_START != '0000-00-00 00:00:00') { echo'
'; echo''; echo''; } action_VIEW_SUBTREE($tbl, $test_obj->ID_PROCES_INIT, $clbk, $tree_params); echo'

'; if ($test_obj->TEST_START == '0000-00-00 00:00:00') { echo "Przeczytalem - "; echo App::link("rozpocznij test", array('task'=>App::get_task(), 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'START', 'test_id'=>$test_obj->ID), array('class'=>'btn-p5')); } else { echo ""; //echo App::link("Zapisz i zakoncz", array('task'=>App::get_task(), 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'END', 'test_id'=>$test_obj->ID), array('class'=>'btn-p5')); echo''; echo' lub '; echo''; } echo'

'; if ($test_obj->TEST_START != '0000-00-00 00:00:00') { echo'
'; } } else if ($test_obj->A_STATUS == 'NORMAL') {// test zakonczony - do ocenienia TEST_END echo '

' . "Test uruchomiono: " . $test_obj->TEST_INIT . '

'; echo '

' . "Test rozpoczeto: " . $test_obj->TEST_START . '

'; echo '

' . "Test zakonczono: " . $test_obj->TEST_END . '

'; echo '
'; echo '

' . "Rozpocznij nowy " . App::link("TEST", array('task'=>'CRM_TESTY__ADD_TEST')) . '

'; } else if ($test_obj->A_STATUS == 'OFF_HARD') {// test oceniony echo '

' . "Test oceniony na " . $test_obj->OCENA . '

'; } // $item_id isset // TODO: check if exists in db // TODO: run test - show ajax clock - prevent logout } function task_CRM_TESTY__LIST() { Lib::loadClass('ProcesTestyHelper'); echo '

'; echo App::link("Testy", array('task'=>"CRM_TESTY")); echo " » "; echo App::link("Twoje testy", array('task'=>"CRM_TESTY__LIST")); echo '

'; // aktualne testy pracownika/kandydata $params = array(); $params['limit'] = V::get('_limit', 20, $_GET, 'int'); $params['offset'] = V::get('_offset', 0, $_GET, 'int'); $params['order_by'] = V::get('_order_by', 'ID', $_GET); $params['order_dir'] = V::get('_order_dir', 'DESC', $_GET); $params['id_tester'] = User::getID(); // validate params if ($params['offset'] < 0) $params['offset'] = 0; $lista_cnt = ProcesTestyHelper::get_testy_total( $params ); if ($lista_cnt > 0) { if ($params['offset'] > $lista_cnt) $params['offset'] = $lista_cnt - ($lista_cnt % $params['limit']); echo ''; $testy_arr = ProcesTestyHelper::get_testy( $params ); $cols = array(); $cols ['ID'] = "ID"; $cols ['ID_PROCES_INIT'] = "Proces ID"; $cols ['Stanowisko'] = "Stanowisko"; $cols ['TEST_TYPE'] = "Rodzaj testu"; $cols ['TEST_INIT'] = "Rozpoczeto czytanie"; $cols ['TEST_START'] = "Rozpoczeto odpowiadanie"; $cols ['TEST_END'] = "Zakonczono"; echo ''; echo ''; echo ''; foreach ($cols as $k => $v) { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $t = 0; echo ''; if (!empty($testy_arr)) { foreach ($testy_arr as $r) { echo ''; foreach ($cols as $k => $v) { $cls = ''; if ($k == 'TEST_TYPE') { $cls = 'cell-' . strtolower($k) . '-' . strtolower($r->$k); } if ($cls) $cls = ' class="' . $cls . '"'; echo '' . $r->$k . ''; } echo ''; echo ''; } echo ''; echo '
' . $v . '' . " " . '
'; $page_nav = new stdClass(); $page_nav->total = $lista_cnt; $page_nav->limit = $params['limit']; $page_nav->current = $params['offset']; $page_nav->offset_start = 0; $page_nav->offset_prev = $page_nav->current - $page_nav->limit; $page_nav->offset_next = $page_nav->current + $page_nav->limit; $page_nav->offset_end = floor($lista_cnt / $page_nav->limit) * $page_nav->limit; $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_start); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo App::link("<<", $link_params, array('class'=>'btn-p5')); $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_prev); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' ' . App::link("< -".$page_nav->limit, $link_params, array('class'=>'btn-p5')); echo ' ' . $page_nav->current.' ('.$page_nav->total.') '; $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_next); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' ' . App::link("+".$page_nav->limit." >", $link_params, array('class'=>'btn-p5')); $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_end); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' ' . App::link(">>", $link_params, array('class'=>'btn-p5')); echo '
'; if ($r->A_STATUS == 'WAITING') { echo App::link("rozpocznij", array('task'=>'CRM_TEST', 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'INIT', 'test_id'=>$r->ID), array('class'=>'btn-p5')); } else if ($r->A_STATUS == 'MONITOR') { if ($r->TEST_INIT == '0000-00-00 00:00:00') { echo App::link("rozpocznij", array('task'=>'CRM_TEST', 'function_init'=>'fun_CRM_TEST_EDIT', 'subtask'=>'INIT', 'test_id'=>$r->ID), array('class'=>'btn-p5')); } else { echo ' ' . App::link("test", array('task'=>'CRM_TEST', 'test_id'=>$r->ID), array('class'=>'btn-p5')); } } else if ($r->A_STATUS == 'NORMAL') { echo 'Test zakonczono'; } else if ($r->A_STATUS == 'OFF_HARD') { // test oceniony } else { //echo '{'.$r->A_STATUS.'}'; } echo '
'; } } else { echo '

' . "Brak testów." . '

'; } } function task_CRM_TESTY__ADD_KANDYDAT() { Lib::loadClass('ProcesTestyHelper'); echo '

'; echo App::link("Testy", array('task'=>"CRM_TESTY")); echo " » "; echo App::link("Dodaj Kandydata i zaloguj się do testów", array('task'=>"CRM_TESTY__ADD_KANDYDAT")); echo '

'; if (User::get('ADM_ADMIN_LEVEL') < 6 && substr(User::get('ADM_ADMIN_DESC'), 0, strlen('Kandydat')) != 'Kandydat') { } else { echo '

' . "Brak uprawnień!" . '

'; return; } echo'
'; // choose kandydat $params = array(); $params ['order by'] = "ADM_NAME"; $kandydaci = ProcesTestyHelper::get_kandydaci( $params ); if (!empty($kandydaci)) { $js = "return stopTimer();"; echo '
'; echo '

' . "Wybierz kandydata i zaloguj sie do testow: " . '

'; echo ''; $kandydaci_cnt = count($kandydaci); $sel_size = ($kandydaci_cnt < 10)? $kandydaci_cnt : 10; echo ''; echo '
'; echo ''; echo '
'; echo '
'; } // add new kandydat echo '
'; echo '

' . "Dodaj nowego kandydata:" . '

'; echo ''; echo '

'; echo "Imie i nazwisko: "; echo ''; echo '

'; echo '

'; echo "Nr telefonu: "; echo ''; echo '

'; echo '

'; echo "Adres e-mail: "; echo ''; echo '

'; echo ''; echo '
'; echo '
';// .box-blue } /** * $_GET['stanowisko_id'] */ function task_CRM_TESTY__ADD_TEST() { $arg_stanowisko_id = V::get('stanowisko_id', 0, $_GET, 'int'); echo '

'; echo App::link("Testy", array('task'=>"CRM_TESTY")); echo " » " . App::link("Uruchom nowy test", array('task'=>"CRM_TESTY__ADD_TEST")); if ($arg_stanowisko_id > 0) { echo " » " . "Testy dla stanowiska [" . $arg_stanowisko_id . "]"; } echo '

'; function this_CRM_TESTY_proces($proces, $stanowisko) { echo'

'; echo App::link("Testy", array('task'=>App::get_task())); echo' - '; echo App::link("Testy dla stanowiska ".''.$stanowisko->DESC.'', array('task'=>App::get_task(), 'stanowisko_id'=>$stanowisko->ID)); echo' - '; echo "Testy procesu ".''.$proces->p__ID.''; echo'

'; //echo'
'.$proces->p__ID.': ';print_r($proces);echo'
'; echo'
'; echo'

'."Dane osoby testujacej:".'

'; echo'
'; echo''; echo'

'; echo "Imie i nazwisko: "; echo''; echo'

'; echo'

'; echo "Nr telefonu: "; echo''; echo'

'; echo'

'; echo "Adres e-mail: "; echo''; echo'

'; echo''; echo'
'; echo'
';// .box-blue } function this_CRM_TESTY_stanowisko($stanowisko) { $procesy = array(); $db = DB::getDB(); $sql = "select w.`ID_PROCES` as w__ID_PROCES , w.`OPIS_ZASOB` as w__OPIS_ZASOB , p.`ID` as p__ID , p.`DESC` as p__DESC , p.`OPIS` as p__OPIS , p_root.`ID` as p_root__ID , p_root.`DESC` as p_root__DESC , p_root.`OPIS` as p_root__OPIS from `CRM_WSKAZNIK` as w left join `CRM_PROCES` as p on (p.`ID`=w.`ID_PROCES`) left join `CRM_PROCES` as p_root on (p_root.`ID`=p.`PARENT_ID`) where w.`ID_ZASOB`={$stanowisko->ID} and w.`A_STATUS` in('WAITING', 'NORMAL') "; $res = $db->query($sql); while ($r = $db->fetch($res)) { $procesy[$r->w__ID_PROCES][] = $r; } $procesy_init = array(); function this_CRM_TESTY_stanowisko_find_proces_init_rec($procesy_id, &$procesy_init, &$pomin_id = array(), $rec_limit = 50) { //echo'

'."F.rec(limit:$rec_limit, proces_id:".implode(',', $procesy_id).") ...".'

'; if ($rec_limit-- <= 0) return;// recursion limit foreach ($procesy_id as $id) { $pomin_id []= $id; } $find_procesy_id = array(); $db = DB::getDB(); $sql = "select p.`ID`, p.`PARENT_ID`, p.`TYPE`, p.`DESC`, p.`OPIS`, p.`TEST_SORT_PRIO` from `CRM_PROCES` as p where p.`ID` in(".implode(',', $procesy_id).") "; $res = $db->query($sql); while ($r = $db->fetch($res)) { if ($r->TYPE == 'PROCES_INIT') { $procesy_init[$r->ID] = $r; } else if (!in_array($r->PARENT_ID, $pomin_id)) { $find_procesy_id[] = $r->PARENT_ID; } } if (!empty($find_procesy_id)) { this_CRM_TESTY_stanowisko_find_proces_init_rec($find_procesy_id, $procesy_init, $pomin_id, $rec_limit); } } this_CRM_TESTY_stanowisko_find_proces_init_rec(array_keys($procesy), $procesy_init); $proces_id = V::get('proces_id', '', $_GET, 'int'); if ($proces_id > 0) { if (!array_key_exists($proces_id, $procesy)) { echo'
'; echo "Wrong ID"; echo'
'; } else { this_CRM_TESTY_proces(reset($procesy[$proces_id]), $stanowisko); return; } } function this_CRM_TESTY_sort_testy_callback($a, $b) { return $b->TEST_SORT_PRIO - $a->TEST_SORT_PRIO; } uasort($procesy_init, 'this_CRM_TESTY_sort_testy_callback'); echo '

' . "Stanowisko [" . $stanowisko->ID . "]: " . $stanowisko->DESC . '

'; echo '

' . "Wybierz proces do przetestowania:" . '

'; if (empty($procesy_init)) { echo '
'; echo "Brak danych"; echo '
'; return; } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; if (V::get('DBG_SORT', 0, $_GET)) echo ''; echo ''; echo ''; echo ''; $t = 0; foreach ($procesy_init as $k_id => $v_proces) { echo ''; echo ''; echo ''; if (V::get('DBG_SORT', 0, $_GET)) echo ''; echo ''; } echo ''; echo '
' . "PROCES ID" . '' . "NAZWA / OPIS" . 'SORT
'; echo App::link('' . "Start " . $k_id . " (Teoretyczny)" . '', array('task'=>App::get_task(), 'function_init'=>'fun_CRM_TESTY_ADD', 'stanowisko_id'=>$stanowisko->ID, 'proces_id'=>$k_id, 'test_type'=>'TEORETYCZNY'), array('class'=>'btn-p5 btn-test-teoretyczny', 'title'=>"Uruchom test teoretyczny dla procesu ".$k_id)); echo '
'; echo '
'; echo App::link('' . "Start " . $k_id . " (Praktyczny)" . '', array('task'=>App::get_task(), 'function_init'=>'fun_CRM_TESTY_ADD', 'stanowisko_id'=>$stanowisko->ID, 'proces_id'=>$k_id, 'test_type'=>'PRAKTYCZNY'), array('class'=>'btn-p5 btn-test-praktyczny', 'title'=>"Uruchom test praktyczny dla procesu ".$k_id)); echo '
'; echo '

'; echo ' ' . $v_proces->DESC . ''; echo '
'; echo '' . $v_proces->OPIS . ''; echo '

'; echo '
'.$v_proces->TEST_SORT_PRIO.'
'; } function this_print_tree_rec( $user_menu_tree, &$user_menu, $parent_id = null ) { $cls = ($parent_id === null)? ' class="user-menu-tree tree-wrap"' : ''; echo ''; $list_total = count($user_menu_tree); foreach ($user_menu_tree as $k_id => $v_arr) { echo '
  • '; if (array_key_exists($k_id, $user_menu)) { $z =& $user_menu[$k_id]; echo '' . $z->ID . ''; echo ''; echo 'TYPE == 'STANOWISKO')? ' class="desc-red"' : '') . '>' . $z->TYPE . ''; echo ' ' . $z->DESC; echo ' ' . $z->OPIS . ' '; echo ' '; if ($z->TYPE == 'STANOWISKO') { echo App::link("Testy", "?stanowisko_id=" . $k_id, array('class'=>'btn-p5', 'title'=>'Przegladaj proces ' . $k_id)); } } else { echo '' . $k_id . ''; } if (!empty($v_arr)) { this_print_tree_rec($v_arr, $user_menu, $k_id); } echo '
  • '; } echo ''; } function this_tree_fetch_data_rec(&$user_menu, $user_menu_tree_flat) { $sql_ids = array(); $sql_ids = array_keys($user_menu_tree_flat); // add tree parent proces info if (!empty($sql_ids)) { $sql = "select z.`ID`, z.`PARENT_ID`, z.`DESC`, z.`OPIS`, z.`TYPE` from `CRM_LISTA_ZASOBOW` as z where z.`ID` in (" . implode(", ", $sql_ids) . ") "; $res = DB::query( $sql ); while ($r = DB::fetch( $res )) { $user_menu[$r->ID] = $r; } } } // choose STANOWISKO $stanowiska = array(); // TODO: model->get_stanowiska_list() $db = DB::getDB(); $sql = "select z.`ID`, z.`PARENT_ID`, z.`DESC`, z.`OPIS`, z.`TYPE` from `CRM_LISTA_ZASOBOW` as z where z.`TYPE`='STANOWISKO' "; $res = $db->query($sql); while ($r = $db->fetch($res)) { $stanowiska[$r->ID] = $r; } $stanowisko_id = V::get('stanowisko_id', '', $_GET, 'int'); if ($stanowisko_id > 0) { if (!array_key_exists($stanowisko_id, $stanowiska)) { echo'
    '; echo "Wrong ID"; echo'
    '; } else { // show testy dla stanowiska this_CRM_TESTY_stanowisko($stanowiska[$stanowisko_id]); return; } } echo '

    ' . "Wybierz stanowisko do przetestowania:" . '

    '; echo '
    '; echo ''; echo ''; echo ' '; echo '
    '; $tree_flat = array(); foreach ($stanowiska as $k_id => $r) { $tree_flat [$r->ID] = null; $tree_flat [$r->PARENT_ID] = null; } $tree_created = TreeHelper::build_tree_flat('CRM_LISTA_ZASOBOW', $tree_flat); //echo'
    {'.$tree_created.'} Tree flat: ';print_r($tree_flat);echo'
    '; $stanowiska_tree = TreeHelper::get_tree_from_flat($tree_flat); //echo'
    stanowiska_tree: ';print_r($stanowiska_tree);echo'
    '; this_tree_fetch_data_rec($stanowiska, $tree_flat); //echo'
    stanowiska all: ';print_r($stanowiska);echo'
    '; //DEBUG_S(1,'user_menu',$user_menu, __FILE__, __FUNCTION__, __LINE__); $tree = new Tree('CRM_LISTA_ZASOBOW'); $tree->show_css(); this_print_tree_rec($stanowiska_tree[0], $stanowiska); } /** * Router for task_CRM_TESTY__LIST, task_CRM_TESTY__ADD_KANDYDAT, task_CRM_TESTY__ADD_TEST * @param $_GET['stanowisko_id'] * @param $_GET['proces_id'] */ function task_CRM_TESTY() { $tasks = array(); $tasks []= App::link("Twoje testy", array('task'=>"CRM_TESTY__LIST"), array('class'=>'btn-p5')); if (User::get('ADM_ADMIN_LEVEL') < 6 && substr(User::get('ADM_ADMIN_DESC'), 0, strlen('Kandydat')) != 'Kandydat') { $tasks []= App::link("Dodaj Kandydata i zaloguj się do testów", array('task'=>"CRM_TESTY__ADD_KANDYDAT"), array('class'=>'btn-p5')); } $tasks []= App::link("Uruchom nowy test", array('task'=>"CRM_TESTY__ADD_TEST"), array('class'=>'btn-p5')); echo '
      '; foreach ($tasks as $v_task_link) { echo '
    1. '; echo $v_task_link; echo '
    2. '; } echo '
    '; } /** * Por??wnuje wyniki zaznaczonych test??w. * @param $_COOKIE['TESTY_WYNIKI_COMPARE'] - array of TEST_ID * if all TEST_ID has the same Proces ID then compare, alse show list. */ function task_CRM_TESTY_WYNIKI_COMPARE() { $testy_id = V::get('TESTY_WYNIKI_COMPARE', '', $_COOKIE); $testy_id = trim($testy_id); if (empty($testy_id)) { echo'

    '."Brak zaznaczonych testow".'

    '; return; } $testy_id = explode(' ', trim($testy_id)); echo'
    ';print_r($testy_id);echo'
    '; } function task_CRM_TESTY_WYNIKI() { $kandydat_id = V::get('kandydat_id', 0, $_GET, 'int'); $test_id = V::get('test_id', 0, $_GET, 'int'); // TODO: if kandydat_id - lista testow kandydata, btn ocen jesli NORMAL // TODO: if kandydat_id and test_id - ocen test jesli NORMAL //TODO: uprawnienia - tester nie moze oceniac! if (User::get('ADM_ADMIN_LEVEL') > 2) { echo'

    '."Brak uprawnien!".'

    '; return; } echo ''; echo ''; echo ''; echo ''; echo ''; echo '
    '; Lib::loadClass('ProcesTestyHelper'); { $params = array(); $params ['order by'] = "ADM_NAME"; $kandydaci = ProcesTestyHelper::get_kandydaci( $params ); echo'

    '."Wybierz kandydata".'

    '; echo'
    '; echo''; //$kandydaci_cnt = count($kandydaci); $sel_size = 10;// ($kandydaci_cnt < 10)? $kandydaci_cnt : 10; echo''; echo '
    '; echo' '; echo'
    '; } echo '
    '; Lib::loadClass('UsersHelper'); { $params = array(); $pracownicy = UsersHelper::get_users_list($params, 0, 0, 'ADM_NAME', 'ASC'); echo'

    '."lub pracownika".'

    '; echo'
    '; echo''; //$pracownicy_cnt = count($pracownicy); $sel_size = 10;// ($pracownicy_cnt < 10)? $pracownicy_cnt : 10; echo''; echo '
    '; echo' '; echo'
    '; } echo '
    '; if ($kandydat_id > 0) { //echo''; echo App::link("Certyfikat", array('task'=>'CRM_TESTY_WYNIKI_CERTYFIKAT', 'kandydat_id'=>$kandydat_id, 'HIDE_PANEL'=>1), array('target'=>'_blank', 'ico_after_text'=>'print')); //echo''; echo '
    '; } if ($test_id <= 0) { echo''; //echo App::link("CRM_TESTY_WYNIKI_COMPARE", array('task'=>"CRM_TESTY_WYNIKI_COMPARE")); $params = array(); $params['limit'] = V::get('_limit', 20, $_GET, 'int'); $params['offset'] = V::get('_offset', 0, $_GET, 'int'); $params['order_by'] = V::get('_order_by', 'ID', $_GET); $params['order_dir'] = V::get('_order_dir', 'DESC', $_GET); if ($kandydat_id > 0) { $params['id_tester'] = $kandydat_id; } $params['organizer_name'] = true; // validate params if ($params['offset'] < 0) $params['offset'] = 0; $lista_cnt = ProcesTestyHelper::get_testy_total( $params ); if ($lista_cnt <= 0) { echo "Brak testów"; return; } if ($params['offset'] > $lista_cnt) $params['offset'] = $lista_cnt - ($lista_cnt % $params['limit']); $testy_arr = ProcesTestyHelper::get_testy( $params ); $cols = array(); $cols ['ID'] = "ID"; $cols ['TEST_TYPE'] = "Rodzaj testu"; $cols ['Kandydat'] = "Kandydat"; $cols ['ID_PROCES_INIT'] = "Proces ID"; $cols ['Stanowisko'] = "Stanowisko"; $cols ['TEST_INIT'] = "Rozpoczeto czytanie"; $cols ['TEST_START'] = "Rozpoczeto odpowiadanie"; $cols ['TEST_END'] = "Zakonczono"; $cols ['OCENA'] = "Ocena"; $cols ['COST'] = "Koszt"; $cols ['DISCOUNT'] = "Rabat"; $cols ['TEST_PLACE'] = "Miejsce"; $cols ['Organizer'] = "Organizator"; $cols ['UWAGI'] = "Uwagi"; $cols ['SHOW_IN_CERT'] = "Pokaż na cert."; echo ''; echo '

    ' . '' . "Wybierz test " . '' . " - "; echo App::link("Ustal kolejność testów", array('task'=>'TEST_SORT')); echo '

    '; echo''; echo''; echo''; foreach ($cols as $k => $v) { echo''; }//end foreach echo''; echo''; echo''; echo''; echo''; echo''; echo''; if (!empty($testy_arr)) { foreach ($testy_arr as $r) { echo''; foreach ($cols as $k => $v) { if ($k == 'COST' || $k == 'DISCOUNT') { echo ''; } else { $cls = ''; if ($k == 'TEST_TYPE') { $cls = 'cell-' . strtolower($k) . '-' . strtolower($r->$k); } if ($cls) $cls = ' class="' . $cls . '"'; echo '' . $r->$k . ''; } }//end foreach echo''; echo''; }//end foreach echo''; echo'
    '.$v.''." ".'
    '; $page_nav = new stdClass(); $page_nav->total = $lista_cnt; $page_nav->limit = $params['limit']; $page_nav->current = $params['offset']; $page_nav->offset_start = 0; $page_nav->offset_prev = $page_nav->current - $page_nav->limit; $page_nav->offset_next = $page_nav->current + $page_nav->limit; $page_nav->offset_end = floor($lista_cnt / $page_nav->limit) * $page_nav->limit; $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_start); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo App::link("<<", $link_params, array('class'=>'btn-p5')); $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_prev); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' '.App::link("< -".$page_nav->limit, $link_params, array('class'=>'btn-p5')); echo ' '.$page_nav->current.' ('.$page_nav->total.') '; $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_next); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' '.App::link("+".$page_nav->limit." >", $link_params, array('class'=>'btn-p5')); $link_params = array('task'=>App::get_task(), '_offset'=>$page_nav->offset_end); if ($kandydat_id > 0) $link_params['kandydat_id'] = $kandydat_id; echo ' '.App::link(">>", $link_params, array('class'=>'btn-p5')); echo'
    ' . number_format($r->$k, 2, ',', '') . ''; if (User::get('ADM_ADMIN_LEVEL') == 0 && $r->A_STATUS == 'OFF_HARD') {// tylko level 0 i ocenione testy // edit link echo App::link("edit", array('task'=>"CRM_TESTY_WYNIKI_EDIT", 'test_id'=>$r->ID), array('title'=>"Edytuj", 'ico'=>'edit')); } // ocena if ($r->A_STATUS == 'WAITING') { //echo'Test nie rozpoczety'; } else if ($r->A_STATUS == 'MONITOR') { //echo'Test rozpoczeto '.$r->TEST_INIT; } else if ($r->A_STATUS == 'NORMAL') { //echo'Test zakonczono '.$r->TEST_END; echo App::link("ocen odpowiedzi", array('task'=>'CRM_TESTY_WYNIKI', 'test_id'=>$r->ID, 'kandydat_id'=>$r->ID_TESTER), array('class'=>'btn-p5')); } else if ($r->A_STATUS == 'OFF_HARD') { echo App::link("odpowiedzi", array('task'=>'CRM_TESTY_WYNIKI', 'test_id'=>$r->ID, 'kandydat_id'=>$r->ID_TESTER), array('class'=>'btn-p5')); } else { //echo '{'.$r->A_STATUS.'}'; } // TODO: checked from $_COOKIE[''] //$js = "compareCheckbox(this,'".$r->ID."')"; //echo''; echo'
    '; } } if ($kandydat_id > 0 && $test_id > 0) { echo '
    '; $test_obj = DB::get_by_id('CRM_TESTY', $test_id); $odpowiedzi = ProcesTestyHelper::get_odpowiedzi($test_obj->ID, $test_obj->TEST_TYPE); $tbl = 'CRM_PROCES'; $clbk = 'tree_callback__show_wynik_item_from_' . $tbl; $tree_params = array(); $tree_params['rozwin'] = true; $tree_params['editable'] = false; $tree_params['rozwin_proces'] = true; $tree_params['filtr_img'] = true; $tree_params['rozwin_zasoby'] = true; $tree_params['rozwin_opis'] = true; $tree_params['style'] = 'NOWY'; $tree_params['show_ocen'] = true; $tree_params['TEST_TYPE'] = $test_obj->TEST_TYPE; foreach ($odpowiedzi as $k_id_proces => $v_odp) { foreach ($v_odp as $k_id_pyt => $v_pyt) { $tree_params[ 'ODP_'.$k_id_pyt ] = $v_pyt->ODPOWIEDZ; for ($i = 0; $i < 5; $i++) { $v_pyt_field = "ODP_".$i; $tree_params[ 'ODP_'.$k_id_pyt.'_ODP_'.$i ] = $v_pyt->$v_pyt_field; } $tree_params[ 'ocena_'.$k_id_pyt ] = $v_pyt->OCENA; } } echo '
    '; echo ''; echo ''; action_VIEW_SUBTREE($tbl, $test_obj->ID_PROCES_INIT, $clbk, $tree_params); echo '
    '; if ($test_obj->OCENA > 0) echo '' . "Wynik: " . $test_obj->OCENA . " / 3. " . '
    '; echo "Uwagi do oceny:"; echo '
    '; echo ''; echo '
    '; echo ''; echo '
    ';// .box-blue echo '
    '; } } function fun_CRM_TESTY_RM_PYTANIE() { $redirect = "?task=".App::get_task(); $msg = ''; $arg_id = V::get('id', 0, $_GET, 'int'); $arg_id_proces = V::get('id_proces', 0, $_GET, 'int'); if ($arg_id_proces <= 0 || $arg_id <= 0) { App::add_error("Wrong ID"); App::redirect($redirect, $msg); exit; } $redirect .= "&id_proces=".$arg_id_proces; $arg_type = V::get('_type', '', $_REQUEST); $redirect .= "&_type=".$arg_type; Lib::loadClass('ProcesTestyHelper'); $affected = ProcesTestyHelper::delete_pytanie( $arg_id, $arg_id_proces ); if ($affected == 1) { App::add_msg("Usunieto pytanie ID=".$arg_id); } else { App::add_error("Wystapil blad podczas usuwania zdjecia ID=".$arg_id); } App::redirect($redirect, $msg); } function fun_CRM_TESTY_ADD_PYTANIE() { $redirect = "?task=".App::get_task(); $msg = ''; $sql_obj = new stdClass(); $prefix = 'add_'; $arg_id_proces = V::get('id_proces', 0, $_GET, 'int'); if ($arg_id_proces <= 0) { App::add_error("Wrong ID"); App::redirect($redirect, $msg); exit; } $arg_id_wskaznik = V::get('id_wskaznik', 0, $_GET, 'int'); $arg_id_wskaznik = V::get($prefix.'ID_WSKAZNIK', $arg_id_wskaznik, $_POST, 'int'); $arg_type = V::get('_type', '', $_REQUEST); // TODO: validate $redirect .= "&_type=".$arg_type; $redirect .= "&id_proces=".$arg_id_proces; if ($arg_id_wskaznik > 0) { $redirect .= "&id_wskaznik=".$arg_id_wskaznik; } $sql_obj->TEST_TYPE = $arg_type; $sql_obj->ID_PROCES = $arg_id_proces; $sql_obj->ID_WSKAZNIK = $arg_id_wskaznik; $sql_obj->PYTANIE = V::get($prefix.'PYTANIE', '', $_POST); for ($i = 0; $i < 5; $i++) { $field = "ODP_".$i; $sql_obj->$field = V::get($prefix.$field, '', $_POST); $field = "ODP_".$i."_ODP"; $sql_obj->$field = V::get($prefix.$field, '', $_POST); } $error = false; if (!$sql_obj->PYTANIE) { App::add_error("Podaj tresc pytania"); $error = true; } if ($error) { App::redirect($redirect, $msg); return; } $new_id = DB::ADD_NEW_OBJ( 'CRM_TESTY_PYTANIA', $sql_obj ); if ($new_id > 0) { App::add_msg("Dodano nowe pytanie"); // update stat - `CRM_PROCES`.`TEST_PYTANIE` Lib::loadClass('ProcesTestyHelper'); ProcesTestyHelper::update_proces_stat( $arg_id_proces ); } else { App::add_error("Blad podczas dodawania nowego pytania!"); } App::redirect($redirect, $msg); } function task_CRM_TESTY_ADD_PYTANIA() { $id_proces = V::get('id_proces', 0, $_REQUEST, 'int'); $id_pytanie = V::get('id_pytanie', 0, $_REQUEST, 'int'); $id_wskaznik = V::get('id_wskaznik', 0, $_REQUEST, 'int'); $_type = V::get('_type', 0, $_REQUEST); Lib::loadClass('ProcesTestyHelper'); $types_allowed = ProcesTestyHelper::get_allowed_types(); if (!array_key_exists($_type, $types_allowed)) { $_type = false; } {// pathway echo'

    '; echo App::link("Procesy", array('task'=>"CRM_PROCES")); if ($id_proces > 0) { echo ' » '.App::link("Pytania dla procesu [".$id_proces."]", array('task'=>App::get_task(), 'id_proces'=>$id_proces, '_type'=>$_type)); if ($id_wskaznik > 0) { echo ' » '.App::link("dla wskaznika [".$id_wskaznik."]", array('task'=>App::get_task(), 'id_proces'=>$id_proces, 'id_wskaznik'=>$id_wskaznik, '_type'=>$_type)); } } echo'

    '; }// pathway if ($id_proces <= 0) { echo'
    '; echo "Wrong ID"; echo'
    '; return; } $proces = DB::get_by_id( 'CRM_PROCES', $id_proces ); if (!$proces) { echo'
    '; echo "Proces [".$id."] not exists."; echo'
    '; return; } Lib::loadClass('ProcesHelper'); {// proces info $wsk = ProcesHelper::get_wskazniki( $proces->ID ); echo'
    '; echo'
      '; echo'
    • '; echo'
      '; echo'
      '; if (!empty($wsk)) echo'
      '; echo''.$proces->ID.''; echo''.$proces->DESC.''; echo' '.$proces->OPIS.' '; echo''; if (!empty($wsk)) echo'
      '; echo'
      '; if (!empty($wsk)) { $zasoby_id = array(); echo'
      '; echo'
        '; $wsk_cnt = count( $wsk ); foreach ($wsk as $w) { $w_parents_out = ''; $w_title_parents_out = ''; echo''; echo'

        '; echo ' '.$w->CW_ID.''; echo App::link("P+", array('task'=>App::get_task(), 'id_proces'=>$proces->ID, 'id_wskaznik'=>$w->CW_ID, '_type'=>$_type, '#'=>'frm-pytanie-add'), array('title'=>"Dodaj pytanie do wskaznika ".$w->CW_ID, 'class'=>'btn-p5')); echo ' ['.$w->ID.']'; echo ' '.$w->CP_FORM_TREAT.''; echo ''; echo ' '.$w->TYPE.''; if ($w->DESC_PL) { echo ' '.$w->DESC.' '.$w->DESC_PL.' '; } else { echo '

        '.$w->DESC.'

        '; } //if ($tree->get_param('rozwin_opis')) echo ' '.$w->OPIS.'';// opis zasobu //if ($tree->get_param('rozwin_opis')) echo ' '.$w->OPIS_ZASOB.'';// komentarz wskaznika echo'

        '; echo''; }//end foreach echo'
      '; } echo'
      '; echo'
    • '; echo'
    '; echo'
    ';// .tree-wrap }// proces info // type echo ''; echo '

    ' . '' . "Typ pytania: " . ''; //if (!$_type) { echo '

    '; //} else { // echo '' . $types_allowed[$_type] . ''; //} echo '

    '; if (!$_type) { return; } echo '
    '; function this_print_form_pytanie( &$r, $prefix, $id_pytanie_current_edit, $_type ) { $out = ''; $this_edit = false; if ($prefix != 'add_') { if ($id_pytanie_current_edit > 0 && $r->ID == $id_pytanie_current_edit) { $this_edit = true; } } $sent_key = $prefix.'sent'; if ($this_edit && V::get($sent_key, '', $_POST)) { //TODO: add/edit ; function init ? $field = "PYTANIE"; $r->$field = V::get( $prefix.$field, '', $_POST); $field = "ID_WSKAZNIK"; $r->$field = V::get( $prefix.$field, '', $_POST, 'int'); for ($i = 0; $i < 5; $i++) { $field = "ODP_".$i; $r->$field = V::get( $prefix.$field, '', $_POST); $field = "ODP_".$i."_ODP"; $r->$field = V::get( $prefix.$field, '', $_POST); }//end for // TODO: validate $errors = array(); if (empty($errors)) { $sql_obj = new stdClass(); $sql_obj->TEST_TYPE = $_type; foreach (get_object_vars($r) as $key => $val) { $sql_obj->$key = $val; }//end foreach if ($prefix == 'add_') { //$sql_ret = DB::ADD_NEW_OBJ( 'CRM_TESTY_PYTANIA', $sql_obj ); //if ($sql_ret > 0) { // echo '

    '."Dodano nowy rekord [$sql_ret]".'

    '; // return true;// exception //} else { // echo '

    '."Blad podczas dodawania nowego rekordu".'

    '; //} } else { $sql_affected = DB::UPDATE_OBJ( 'CRM_TESTY_PYTANIA', $sql_obj ); if ($sql_affected == 2) { echo '

    '."Zmienio rekord".'

    '; } else if ($sql_affected == 1) { echo '

    '."Zmieniono rekord (Error: nie zapisano hostorii)".'

    '; } else if ($sql_affected < 0) { echo '

    '."Blad podczas edytowania rekordu - nic nie zmieniono".'

    '; } } } } if ($prefix == 'add_') { unset($r->ID); } else { //$r->ID = V::get( $prefix.'ID', '', $_POST ); } if ($prefix == 'add_') { $out .= '
    '; $out .= '
    ';// box-hover-active $out .= '
    '; $out .= ''; $out .= ''."Dodaj nowe pytanie (" . $_type . ").".''." "; $out .= ''; $out .= ''; $out .= ''; if ($r->ID_WSKAZNIK > 0) { $wsk = ProcesHelper::get_wskazniki( $r->ID_PROCES ); if (array_key_exists($r->ID_WSKAZNIK, $wsk)) { } else { $r->ID_WSKAZNIK = 0; } } { $field = "ID_WSKAZNIK"; $out .= ''."Wskaznik: ".''; $out .= ''; $out .= ' (id wskaznika lub 0)'; } $out .= '
    '."Tresc pytania: "; $field = "PYTANIE"; $out .= '
    '.''; for ($i = 0; $i < 5; $i++) { $field = "ODP_".$i; $out .= '

    '; $out .= "".($i + 1).". odpowiedz: "; $out .= ''; $out .= " poprawna: "; $field = "ODP_".$i."_ODP"; $out .= ''; $out .= '

    '; } $sbmt_value = 'Zapisz'; if ($prefix == 'add_') $sbmt_value = 'Dodaj'; $out .= ''; $out .= '
    '; $out .= '
    ';// .box } else {// edit or view only $attr_readonly = ($this_edit)? '' : ' readonly="readonly"'; $st = ($this_edit)? ' style="border-color:blue;"' : ' style="background:#eee;"'; $out .= '
    ';// box-hover-active if ($this_edit) { $out .= '
    '; $out .= ''; $out .= ''; } $js_onclick = "return confirm('Czy na pewno usunac pytanie ".$r->ID." do procesu ".$r->ID_PROCES."?');"; $out .= App::link("delete", array('function_init'=>"fun_CRM_TESTY_RM_PYTANIE", 'id'=>$r->ID, 'id_proces'=>$r->ID_PROCES, '_type'=>$_type), array('title'=>"Usun pytanie", 'ico'=>'del.png', 'onclick'=>$js_onclick)); if (!$this_edit) { $js_onclick = ($id_pytanie_current_edit > 0)? "return confirm('Uwaga edytujesz pytanie ".$id_pytanie_current_edit.". Zmiany nie zostana zapisane!');" : ""; $out .= App::link("edit", array('task'=>App::get_task(), 'id_pytanie'=>$r->ID, 'id_proces'=>$r->ID_PROCES, '_type'=>$_type), array('title'=>"Edytuj pytanie", 'ico'=>'edit', 'onclick'=>$js_onclick)); } $out .= "[".$r->ID."] "; { $field = "ID_WSKAZNIK"; if ($this_edit) { $out .= ''."Wskaznik: ".''; $out .= ''; $out .= ' (id wskaznika lub 0)'; } else { if ($r->ID_WSKAZNIK > 0) { $out .= ''."Wskaznik: ".$r->ID_WSKAZNIK.".".''; } } } $out .= " Tresc pytania (" . $_type . "): "; $field = "PYTANIE"; //echo''; $out .= '
    '.''; for ($i = 0; $i < 5; $i++) { $field = "ODP_".$i; if (!$this_edit && empty($r->$field)) continue; $out .= '

    '; $out .= "".($i + 1).". odpowiedz: "; $out .= ''; $out .= " poprawna: "; $field = "ODP_".$i."_ODP"; $out .= ''; $out .= '

    '; } if ($this_edit) { $sbmt_value = 'Zapisz'; if ($prefix == 'add_') $sbmt_value = 'Dodaj'; $out .= ''; $out .= '
    '; } $out .= '
    ';// .box } return $out; } $form_sent = false; $pytania = ProcesTestyHelper::get_pytania_by_proces_id( $proces->ID, $_type ); $pytania_out = array(); if (!empty($pytania)) { foreach ($pytania as $k_id => $r) { $pytania_out []= this_print_form_pytanie( $r, 'edit_'.$k_id.'_', $id_pytanie, $_type ); }//end foreach } // TODO: link dodaj pytanie i 5 odpowiedzi TAK/NIE $new = new stdClass(); foreach (get_object_vars($r) as $key => $val) { $new->$key = ''; }//end foreach $new->ID_PROCES = $proces->ID; $new->ID_WSKAZNIK = $id_wskaznik; $pytanie_out = this_print_form_pytanie( $new, 'add_', $id_pytanie, $_type ); if ($pytanie_out === true) { $form_sent = true; } $pytania_out []= $pytanie_out; if ($form_sent) { echo App::link( "odswiez strone", array('task'=>App::get_task(), 'id_proces'=>81) ); return; } // pytania echo'

    '."Pytania testowe:".'

    '; if (empty($pytania)) { echo '

    ' . "Brak pytań typu: " . $types_allowed[$_type] . '

    '; } foreach ($pytania_out as $out) { echo $out; }//end foreach } function tree_callback__show_test_item_from_CRM_PROCES( &$r, &$tree ) { $cls = array(); $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : ''; echo ''; echo '
    '; echo ''.$r->ID.''; $tree_test_type = $tree->get_param('TEST_TYPE'); echo' '; if ($tree->get_param('show_state') == 'items') { if ($r->TEST_PYTANIE) { // pytanie ponizej } else { // TODO: brak pyta?? echo''.$r->DESC.''; } } else { echo''.$r->DESC.''; } //if ($tree->get_param('rozwin_opis') && $r->OPIS) echo' '.$r->OPIS.''; echo''; if ($tree->get_param('show_state') == 'items') { Lib::loadClass('ProcesTestyHelper'); $pytania = ProcesTestyHelper::get_pytania_by_proces_id( $r->ID, $tree_test_type ); if (!empty($pytania)) { foreach ($pytania as $p) { echo'
    '.$p->PYTANIE.' '; // TODO: nazwy pol dla pytan $field = "ODP_".$p->ID; /** * ODP_{id_pyt} * ODP_{id_pyt}_{id_odp} (TAK/NIE) */ $pytanie_otwarte = true; for ($i = 0; $i < 5; $i++) { $odp_field = "ODP_".$i; if ($p->$odp_field != '') { $pytanie_otwarte = false; echo'
    '.$p->$odp_field; $field_odpowiedz = $field."_ODP_".$i; echo' '; } } if ($pytanie_otwarte) { echo'
    '; echo''; } }//end foreach echo'
    '; echo''; } } echo'
    '."\n"; echo''."\n"; } function tree_callback__show_wynik_item_from_CRM_PROCES( &$r, &$tree ) { $cls = array(); $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : ''; echo ''; echo '
    '; $tree_test_type = $tree->get_param('TEST_TYPE'); $tree_show_state = $tree->get_param('show_state');// 'parents', 'items' echo ''.$r->ID.''; echo' '; echo''.$r->DESC.''; echo''; $oceny = array(); $oceny[0] = '0 - nic'; $oceny[1] = '1 - slabo'; $oceny[2] = '2 - prawie dobrze'; $oceny[3] = '3 - dobrze'; if ($tree_show_state == 'items') { Lib::loadClass('ProcesTestyHelper'); $pytania = ProcesTestyHelper::get_pytania_by_proces_id($r->ID, $tree_test_type); if (!empty($pytania)) { foreach ($pytania as $p) { echo'
    '; echo'ID.'">{'.$p->ID.'}'; echo' '.$p->PYTANIE.' '; // TODO: nazwy pol dla pytan $field = "ODP_".$p->ID; /** * TODO: pokaz tylko odpowiedz udzielona przez kandydata i czy jest prawidlowa * ODP_{id_pyt} * ODP_{id_pyt}_{id_odp} (TAK/NIE) */ $selected_values = array(); $pytanie_otwarte = true; $sum_odp_cnt = 0; $sum_odp_ok_cnt = 0; for ($i = 0; $i < 5; $i++) { $odp_field = "ODP_".$i; if ($p->$odp_field != '') {// jest odpowiedz do pytania $sum_odp_cnt += 1; $odp_field_prawidlowa = "ODP_".$i."_ODP"; $pytanie_otwarte = false; $field_odpowiedz = $field."_ODP_".$i; $selected_values[$i] = $tree->get_param($field_odpowiedz); echo'
    - '.$p->$odp_field.': "'.$tree->get_param($field_odpowiedz).'"'; if ($tree->get_param($field_odpowiedz) != '' && $p->$odp_field_prawidlowa == $tree->get_param($field_odpowiedz)) { $sum_odp_ok_cnt += 1; echo' '."OK".''; } else { echo' '."ZLE".' (prawidlowa odp: '.$p->$odp_field_prawidlowa.')'; } } } $ocena_post_field_name = "ocena_".$p->ID; if (!$pytanie_otwarte) { $pyt_wynik = ProcesTestyHelper::ocen_pytanie($p, $selected_values); $pyt_ocena = $oceny[$pyt_wynik]; echo''; echo'
    --- WYNIK: '.$sum_odp_ok_cnt.' dobrych odpowiedzi z '.$sum_odp_cnt.' = '.$pyt_ocena.''; } else { echo'
    '; echo''; echo'
    --- WYNIK: '; echo''; } }//end foreach } } echo'
    '."\n"; echo''."\n"; } function task_CRM_TESTY_WYNIKI_CERTYFIKAT() { $kandydat_id = V::get('kandydat_id', 0, $_GET, 'int'); if ($kandydat_id <= 0) { echo'

    '."Wrond user!".'

    '; return; } Lib::loadClass('ProcesTestyHelper'); $params = array(); $params['limit'] = V::get('_limit', 100, $_GET, 'int'); $params['offset'] = V::get('_offset', 0, $_GET, 'int'); $params['order_by'] = V::get('_order_by', 'ID', $_GET); $params['order_dir'] = V::get('_order_dir', 'DESC', $_GET); $params['id_tester'] = $kandydat_id; $params['proces_name'] = true; $params['organizer_name'] = true; $params['SHOW_IN_CERT'] = 'TAK'; // validate params if ($params['offset'] < 0) $params['offset'] = 0; $lista_cnt = ProcesTestyHelper::get_testy_total( $params ); if ($lista_cnt <= 0) { echo "Brak testów"; return; } if ($params['offset'] > $lista_cnt) $params['offset'] = $lista_cnt - ($lista_cnt % $params['limit']); $testy_arr = ProcesTestyHelper::get_testy( $params ); $testy_zakonczone = array(); foreach ($testy_arr as $test) { if ($test->A_STATUS == 'OFF_HARD' && $test->TEST_END > '0000-00-00') {// $test->OCENA > 0 $testy_zakonczone []= $test; } }//end foreach $kand = reset($testy_zakonczone); $kandydat_name = $kand->Kandydat_Name; $kandydat_stanowiska = array(); foreach ($testy_zakonczone as $kand) { $kandydat_stanowiska [$kand->Stanowisko] = true; }//end foreach $kandydat_stanowiska = implode(', ', array_keys($kandydat_stanowiska)); echo'

    ' . "Załącznik nr 1 do umowy na sfinansowanie szkoleń pracownika" . '

    '; //echo'

    ' . "Gda??sk dnia " . date("Y-m-d") . '

    '; //echo'

    '; // echo "Biall-Net Sp. z o.o." . '
    '; // echo "Otomin, ul. S??oneczna 43" . '
    '; // echo "80-174 Gda??sk" . '
    '; //echo'

    '; echo '
    '; echo'

    ' . "Certyfikat ukończenia szkolenia" . '

    '; echo'

    ' . "Niniejszym zaświadcza się, że Pan/Pani " . $kandydat_name . " ukończył/a z wynikiem pozytywnym szkolenie w zakresie " . $kandydat_stanowiska . "." . '

    '; echo'
    '; //echo'

    ' . "Uczestnik uzyska?? nast??puj??ce wyniki:" . '

    '; echo''; echo''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '';// "Data szkolenia" - drugi raz? echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; foreach ($testy_zakonczone as $test) { echo''; echo''; echo''; echo''; echo''; echo'';// ID_ORGANIZER "Organizator Szkolenia" - (uzupe??niane przy ocenianiu-select ) echo'';// TEST_PLACE "Miejsce szkolenia" - uzupe??niane przy ocenianiu - select z zasob??w+devices/telbox) echo''; echo'';// TEST_TIME "Czas szkolenia" - (uzupe??nia?? przy przy ocenianiu ) echo''; echo'';// COST "Ca??kowity koszt udzia??u jednego uczestnika w szkoleniu" - (uzupe??niane przy ocenianiu) echo''; echo''; echo''; }//end foreach echo ''; echo '
    ' . "Tytuł Szkolenia" . '' . "Data szkolenia" . '' . "Organizator Szkolenia" . '' . "Miejsce szkolenia" . '' . "Data testu" . '' . "Czas szkolenia" . '' . "Ocena" . '' . "Całkowity koszt udziału jednego uczestnika w szkoleniu" . '' . "Kwota udzielonego rabatu" . '' . "Uwagi" . '
    ' . "Numer procesu" . '' . "Nazwa procesu" . '' . "Obszar działania" . '
    ' . $test->ID_PROCES_INIT . '' . $test->Proces_Name . '' . $test->Stanowisko . '' . '' . substr($test->TEST_INIT, 0, 10) . '' . '' . $test->Organizer . '' . $test->TEST_PLACE . '' . '' . substr($test->TEST_END, 0, 10) . '' . '' . '...' . '' . $test->OCENA . '' . number_format($test->COST, 2, ',', ' ') . " zł" . '' . number_format($test->DISCOUNT, 2, ',', ' ') . " zł" . '' . $test->UWAGI . '
    '; //echo '

    ' . ".............................................................." . '
    ' . "(piecz???? firmowa i podpis prezesa)" . '

    '; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
    '; echo "Data:"; echo ''; echo '



    '; echo '

    ' . "Pracodawca" . '

    '; echo '
    '; echo '



    '; echo '

    ' . "Pracownik" . '

    '; echo '
    '; } /** * @param $_GET['id'] */ function task_CRM_TESTY_WYNIKI_EDIT() { $test_id = V::get('test_id', 0, $_GET, 'int'); echo '

    '; echo App::link("Wyniki", array('task'=>"CRM_TESTY_WYNIKI")); echo " » "; echo App::link("Edycja [" . $test_id . "]", array('task'=>"CRM_TESTY_WYNIKI_EDIT", 'test_id'=>$test_id)); echo '

    '; if (User::get('ADM_ADMIN_LEVEL') != 0) { echo '

    ' . "Error - brak uprawnień!" . '

    '; echo App::link("wróć", array('task'=>'CRM_TESTY_WYNIKI')); return; } if ($test_id <= 0) { echo '

    ' . "Error - błędny numer testu!" . '

    '; echo App::link("wróć", array('task'=>'CRM_TESTY_WYNIKI')); return; } $test_obj = DB::get_by_id( 'CRM_TESTY', $test_id ); if (!$test_obj) { echo '

    ' . "Error - test " . $test_id . " nie istnieje!" . '

    '; echo App::link("wróć", array('task'=>'CRM_TESTY_WYNIKI')); return; } // fetch POST values - TODO: use $tbl_conf $test_obj->UWAGI = V::get('UWAGI', $test_obj->UWAGI, $_POST); $test_obj->COST = V::get('COST', $test_obj->COST, $_POST, 'double'); $test_obj->ID_ORGANIZER = V::get('ID_ORGANIZER', $test_obj->ID_ORGANIZER, $_POST); $test_obj->TEST_PLACE = V::get('TEST_PLACE', $test_obj->TEST_PLACE, $_POST); $test_obj->SHOW_IN_CERT = V::get('SHOW_IN_CERT', $test_obj->SHOW_IN_CERT, $_POST); Column::init('CRM_TESTY', true);// TODO: mv to procesy5.php:134 without force=true $tbl = 'CRM_TESTY'; $tbl_conf = Column::getInstance($tbl); if (!$tbl_conf) { echo'

    '."Brak konfiguracji dla ".$tbl."!".'

    '; return; } $visible_cols = $tbl_conf->getVisibleFieldList(); echo '
    '; echo''; echo''; echo''; echo''; $t = 1; echo ''; foreach ($visible_cols as $field_id => $field_name) { $v_field = array(); $v_field['label'] = $tbl_conf->desc($field_name); if (!$v_field['label']) $v_field['label'] = $field_name; $v_field['cnt'] = ''; if ($field_name == 'ID') { $v_field['cnt'] .= ''; $v_field['cnt'] .= $test_obj->ID; $v_field['label'] = App::link("hist", array('task'=>"CRM_TESTY_WYNIKI_HIST", 'test_id'=>$test_obj->ID), array('ico'=>'history')) . " " . $v_field['label']; } else { if ($tbl_conf->allowWrite($field_name)) { $v_field['cnt'] .= App::field( '' . $field_name, $tbl_conf->type($field_name), $test_obj->$field_name, array('class'=>'i') ); } else { $v_field['cnt'] .= $test_obj->$field_name; } } echo ''; echo ''; echo ''; echo ''; } echo ''; echo ''; echo ''; echo '
    ' . $v_field['label'] . '' . $v_field['cnt'] . '
    '; echo ''; echo '
    '; echo '
    '; } /** * @param $_GET['id'] */ function task_CRM_TESTY_WYNIKI_HIST() { $test_id = V::get('test_id', 0, $_GET, 'int'); echo '

    '; echo App::link("Wyniki", array('task'=>"CRM_TESTY_WYNIKI")); echo " » "; echo App::link("Edycja [" . $test_id . "]", array('task'=>"CRM_TESTY_WYNIKI_EDIT", 'test_id'=>$test_id)); echo " » "; echo App::link("Historia [" . $test_id . "]", array('task'=>"CRM_TESTY_WYNIKI_HIST", 'test_id'=>$test_id)); echo '

    '; if ($test_id <= 0) { echo '

    ' . "Error - błędny numer testu!" . '

    '; echo App::link("wróć", array('task'=>'CRM_TESTY_WYNIKI')); return; } $hist = array(); $sql = "select * from `CRM_TESTY_HIST` where `ID_USERS2`='" . $test_id . "' order by ID DESC "; $res = DB::query( $sql ); while ($r = DB::fetch( $res )) { $hist []= $r; } if (empty($hist)) { echo '

    ' . "Brak danych" . '

    '; return; } $cols = array(); foreach (get_object_vars(reset($hist)) as $field_name => $v) { $cols []= $field_name; }//end foreach echo ''; echo ''; echo ''; foreach ($cols as $field_name) { echo ''; } echo ''; echo ''; echo ''; $t = 0; foreach ($hist as $r) { echo ''; foreach ($cols as $field_name) { $cell_out = $r->$field_name; if ($r->$field_name == 'N/S;') { $cell_out = '' . $cell_out . ''; } echo ''; } echo ''; } echo ''; echo '
    ' . str_replace('_' , ' ', $field_name) . '
    ' . $cell_out . '
    '; } function fun_TEST_SORT_SAVE() { $redirect = "?task=".App::get_task(); $msg = ''; /* $_GET [p] => Array( [0] => 2535 [1] => 83 [2] => 975 [3] => 2495 */ $order_list = V::get('p', null, $_GET, 'array'); $zmieniono_cnt = 0; $zmieniono_err = 0; if (!empty($order_list)) { Lib::loadClass('ProcesHelper'); $proces_list = ProcesHelper::get_procesy_init_list_order();// array ID => TEST_SORT_PRIO // order by p.`TEST_SORT_PRIO` DESC, p.`ID` ASC if (count($order_list) == count($proces_list)) { $order_list = array_reverse($order_list); $order_new_list = array_flip($order_list); $db = DB::getDB(); foreach ($proces_list as $k_proces_id => $v_sort_id) { if ($order_list[$v_sort_id] != $k_proces_id) { $sql_obj = new stdClass(); $sql_obj->ID = $k_proces_id; $sql_obj->TEST_SORT_PRIO = $order_new_list[$k_proces_id]; $affected = $db->UPDATE_OBJ('CRM_PROCES', $sql_obj); if ($affected > 0) { $zmieniono_cnt++; } else { $zmieniono_err++; } } } } else { //echo 'Error count'; } } if ($zmieniono_cnt > 0) { App::add_msg("Kolejność {$zmieniono_cnt} procesów została zmieniona"); } if ($zmieniono_err > 0) { App::add_error("Wystąpiły błędy przy zmianie kolejności dla {$zmieniono_err} procesów"); } if ($zmieniono_cnt == 0 && $zmieniono_err == 0) { App::add_msg("Kolejność nie została zmieniona"); } App::redirect($redirect, $msg); } function task_TEST_SORT() { Lib::loadClass('ProcesHelper'); $proces_id = V::get('_proces_id', 0, $_GET, 'int'); if ($proces_id > 0) { $allowed_dir = array('up', 'dw'); $dir = V::get('_dir', '', $_GET); if (in_array($dir, $allowed_dir)) { echo '

    ' . "Przenoszenie procesu {$proces_id} w " . (($dir == 'up')? "górę" : "dół"); $ret = ProcesHelper::proces_init_move($proces_id, $dir); if ($ret > 0) { echo ' - ok'; echo ' - ' . App::link('powtórz', array('task'=>'TEST_SORT', '_proces_id'=>$proces_id, '_dir'=>$dir), array('class'=>'btn-clean', 'title'=>'powtórz zmianę kolejności')); } else { echo ' - error'; } echo '

    '; } } $proces_list = ProcesHelper::get_procesy_init_list(); $goto_list = ProcesHelper::get_goto_list(array('return_by'=>'dest')); $cols = array(); $cols['ID'] = "ID"; $cols['DESC'] = "DESC"; //$cols['TEST_SORT_PRIO'] = "Kolejno????"; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; foreach ($cols as $k_cell => $v_label) { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; foreach ($proces_list as $v_proces) { // class="(($proces_id == $v_proces->ID)? ' selected' : '')" echo ''; foreach ($cols as $k_cell => $v_label) { $value = $v_proces->$k_cell; if (is_string($value) && strlen($value) > 60) { $value = '' . substr($value, 0, 60) . '...' . ''; } echo ''; } echo ''; echo ''; echo ''; } echo ''; echo '
    ' . (empty($v_label)? str_replace('_', ' ', $k_cell) : $v_label) . '' . "Kolejność "; echo App::link('save', array('task'=>'TEST_SORT', 'function_init'=>'fun_TEST_SORT_SAVE'), array('ico'=>'save', 'title'=>"Zapisz kolejność", 'onclick'=>"return fun_TEST_SORT_SAVE();")); echo '' . "GOTO" . '
    ' . $value . ''; echo App::link('^', array('task'=>'TEST_SORT', '_proces_id'=>$v_proces->ID, '_dir'=>'up'), array('class'=>'btn-clean', 'title'=>'w górę')); echo ' '; echo App::link('v', array('task'=>'TEST_SORT', '_proces_id'=>$v_proces->ID, '_dir'=>'dw'), array('class'=>'btn-clean', 'title'=>'w dół')); echo '';// GOTO if (array_key_exists($v_proces->ID, $goto_list)) { foreach ($goto_list[$v_proces->ID] as $k_id => $v_goto) { $title = "Proces {$v_goto->ID} {$v_goto->IF_TRUE_GOTO_FLAG} {$v_goto->IF_TRUE_GOTO}"; echo '' . $v_goto->ID . ' ' . ProcesHelper::proces_flag($v_goto->ID, $v_goto->IF_TRUE_GOTO, $v_goto->IF_TRUE_GOTO_FLAG) . ''; } } echo '
    '; }