require_once _base_ . '/lib/lib.domxml.php'; $xml_answer = false; $xml_answer = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : false; //Test di richiesta /*$xml_answer = '<?xml version="1.0" encoding="utf-8"?'.'>' .'<ews>' .'<errorcode>0</errorcode>' .'<errormessage></errormessage>' .'<sessions>' .'<session sid="1" roomid="1" uid="1039" role="2" date="2008-09-30 11:00:13" duration="3565"/>' .'</sessions>' .'</ews>';*/ if ($xml_answer === false) { aout('<?xml version="1.0" encoding="UTF-8"?><ews><errorcode>1</errorcode><errormessage>No data found</errormessage></ews>'); } $dom_answer = new DoceboDOMDocument(); $dom_answer->loadXML(trim($xml_answer)); $dlist_code = $dom_answer->getElementsByTagName('errorcode'); $dlist_msg = $dom_answer->getElementsByTagName('errormessage'); $dnode_code = $dlist_code->item(0); $dnode_msg = $dlist_msg->item(0); $e_code = $dnode_code->textContent; $e_msg = $dnode_msg->textContent; if ($e_code == 0) { require_once $GLOBALS['where_scs'] . '/lib/lib.teleskill.php'; $teleskill = new Teleskill_Management(); $teleskill->clearRoomLog($roomid); $dlist_sessions = $dom_answer->getElementsByTagName('session'); $dlist_sessions = $dlist_sessions->item(0); if ((int) $dlist_sessions->getAttribute('uid') != 0 && $dlist_sessions->getAttribute('uid') !== '') { $gmt = date('P', fromDatetimeToTimestamp($dlist_sessions->getAttribute('date')));
function getInteractionsTable($id_user, $idtrack) { require_once _base_ . '/lib/lib.domxml.php'; require_once _base_ . '/lib/lib.table.php'; $tb = new Table(Get::sett('visu_course')); $lang = DoceboLanguage::CreateInstance('organization', 'lms'); $id_org = Get::req('id_org', DOTY_INT, 0); $h_type = array('', '', ''); $h_content = array($lang->def('_DESCRIPTION'), $lang->def('_TYPE'), $lang->def('_RESULT')); $tb->setColsStyle($h_type); $tb->addHead($h_content); $qry = "SELECT xmldata FROM " . $GLOBALS['prefix_lms'] . "_scorm_tracking WHERE idscorm_tracking={$idtrack} AND idUser={$id_user}"; $res = sql_query($qry); $row = mysql_fetch_array($res); $doc = new DoceboDOMDocument(); $doc->loadXML($row['xmldata']); $context = new DoceboDOMXPath($doc); $root = $doc->documentElement; $temp = $context->query('//interactions'); $lines = array(); for ($i = 0; $i < $temp->length; $i++) { $arr = array(); $node =& $temp->item($i); //interaction index //$arr['index'] = $node->getAttribute('index'); //get description $elem = $context->query('description/text()', $node); $elemNode =& $elem->item(0); if ($elemNode && isset($elemNode->textContent)) { $arr['description'] = $elemNode->textContent; //get type $elem = $context->query('type/text()', $node); $elemNode =& $elem->item(0); $arr['type'] = $elemNode->textContent; //get result $elem = $context->query('result/text()', $node); $elemNode =& $elem->item(0); $arr['result'] = $elemNode->textContent; //get id $elem = $context->query('id/text()', $node); $elemNode =& $elem->item(0); $id = $elemNode->textContent; if ($arr['result'] == '1') { $arr['result'] = 'true'; } else { $arr['result'] = 'false'; } $lines[$id] = array($arr['description'], $arr['type'], $arr['result']); } } foreach ($lines as $key => $line) { $tb->addBody($line); } //title cout(getTitleArea($lang->def('_SCORM_INTERACTIONS_TABLE')), 'content'); cout('<div class="std_block">', 'content'); //back button, back to treeview $back = getBackUi('index.php?modname=organization&op=scorm_track&id_user='******'&id_org=' . $id_org, $lang->def('_BACK_TO_TRACK')); //'index.php?modname=organization&op=history&id_user='******'&id_org='.$org , $lang->def('_BACK_TO_TRACK') ); //back button, back to treeview cout($back, 'content'); cout($tb->getTable(), 'content'); cout($back, 'content'); cout('</div>', 'content'); }
function getImportArrFromXml($filename) { $res = array(); require_once _base_ . '/lib/lib.domxml.php'; $xml_doc = new DoceboDOMDocument(); if (!$xml_doc) { return FALSE; } if ($xml_doc->load($filename)) { $xpath = new DoceboDOMXPath($xml_doc); $cat_info = array(); $category_node = $xpath->query('/FAQCATEGORY'); for ($i = 0; $i < $category_node->length; $i++) { $item = $category_node->item($i); $elem = $xpath->query('TITLE/text()', $item); $elemNode = $elem->item(0); $cat_info["title"] = urldecode($elemNode->textContent); $item = $category_node->item($i); $elem = $xpath->query('DESCRIPTION/text()', $item); $elemNode = $elem->item(0); $cat_info["description"] = urldecode($elemNode->textContent); $cat_items = $xpath->query('CATEGORYITEMS/faq', $item); $faq_list = array(); $arr_id = 0; for ($iFaq = 0; $iFaq < $cat_items->length; $iFaq++) { $faq = $cat_items->item($iFaq); $elem = $xpath->query('title/text()', $faq); $elemNode = $elem->item(0); $faq_list[$arr_id]["title"] = urldecode($elemNode->textContent); $faq = $cat_items->item($iFaq); $elem = $xpath->query('question/text()', $faq); $elemNode = $elem->item(0); $faq_list[$arr_id]["question"] = urldecode($elemNode->textContent); $faq = $cat_items->item($iFaq); $elem = $xpath->query('keyword/text()', $faq); $elemNode = $elem->item(0); $faq_list[$arr_id]["keyword"] = urldecode($elemNode->textContent); $faq = $cat_items->item($iFaq); $elem = $xpath->query('answer/text()', $faq); $elemNode = $elem->item(0); $faq_list[$arr_id]["answer"] = urldecode($elemNode->textContent); $arr_id++; } } } else { return FALSE; } $res["cat_info"] = $cat_info; $res["faq_list"] = $faq_list; return $res; }
function updateRoomLog($roomid) { $xml_answer = false; $bw_code = Get::user_acceptlang(); $request = '<?xml version="1.0" encoding="utf-8"?' . '> <ews type="10" lang="' . $bw_code . '"> <clientcode>' . Get::sett('code_teleskill') . '</clientcode> <roomid>' . $roomid . '</roomid> <complete>1</complete> </ews>'; $xml_answer = $this->_sendXmlRequest($request); if ($xml_answer === false || $xml_answer === '') { return array('errorcode' => -1, 'errormessage' => '', 'roomid' => ''); } //Test Answer /*$xml_answer = '<?xml version="1.0" encoding="utf-8"?'.'>' .'<ews>' .'<errorcode>0</errorcode>' .'<errormessage></errormessage>' .'<sessions>' .'<session sid="1" uid="1039" role="2" date="2008-09-30 11:00:13" duration="3565"/>' .'<session sid="2" uid="1097" role="1" date="2008-09-30 11:05:54" duration="3254"/>' .'<session sid="3" uid="1098" role="1" date="2008-09-30 11:01:18" duration="3148"/>' .'<session sid="4" uid="1099" role="1" date="2008-09-30 11:07:25" duration="3297"/>' .'</sessions>' .'</ews>';*/ $dom_answer = new DoceboDOMDocument(); $dom_answer->loadXML(trim($xml_answer)); $dlist_code = $dom_answer->getElementsByTagName('errorcode'); $dlist_msg = $dom_answer->getElementsByTagName('errormessage'); $dnode_code = $dlist_code->item(0); $dnode_msg = $dlist_msg->item(0); $e_code = $dnode_code->textContent; $e_msg = $dnode_msg->textContent; if ($e_code == 0) { $this->clearRoomLog($roomid); $dlist_sessions = $dom_answer->getElementsByTagName('session'); if ($dlist_sessions->length > 0) { $array_element = array(); for ($i = 0; $i < $dlist_sessions->length; $i++) { $node = $dlist_sessions->item($i); if ((int) $node->getAttribute('uid') != 0) { $gmt = date('P', fromDatetimeToTimestamp($node->getAttribute('date'))); $gmt_split = explode(':', $gmt); $gmt_offset = (int) $gmt_split[0]; if (isset($array_element[$node->getAttribute('uid')])) { $array_element[$node->getAttribute('uid')]['duration'] += $node->getAttribute('duration'); $array_element[$node->getAttribute('uid')]['role'] = $node->getAttribute('role'); $array_element[$node->getAttribute('uid')]['access']++; } else { $array_element[$node->getAttribute('uid')]['role'] = $node->getAttribute('role'); $array_element[$node->getAttribute('uid')]['date'] = date('Y-m-d H:i:s', fromDatetimeToTimestamp($node->getAttribute('date')) + $gmt_offset * 3600); $array_element[$node->getAttribute('uid')]['duration'] = $node->getAttribute('duration'); $array_element[$node->getAttribute('uid')]['access'] = 1; } } } $query = "INSERT INTO " . $GLOBALS['prefix_scs'] . "_teleskill_log (roomid, idUser, role, date, duration, access)" . " VALUES"; $first = true; foreach ($array_element as $id_user => $values) { if (!$first) { $query .= ", "; } else { $first = false; } $query .= " ('" . $roomid . "',\r\n\t\t\t\t\t\t\t\t'" . (int) $id_user . "',\r\n\t\t\t\t\t\t\t\t'" . $values['role'] . "',\r\n\t\t\t\t\t\t\t\t'" . $values['date'] . "',\r\n\t\t\t\t\t\t\t\t'" . $values['duration'] . "',\r\n\t\t\t\t\t\t\t\t'" . $values['access'] . "')"; } $result = sql_query($query); return $result; } return true; } return array('errorcode' => $e_code, 'errormessage' => $e_msg, 'roomid' => ''); }
function importQuestionFromXml($filename) { require_once _base_ . '/lib/lib.domxml.php'; // initialize DOM class $xml_doc = new DoceboDOMDocument(); if (!$xml_doc) { return false; } if (!$xml_doc->load($filename)) { return false; } if (!($xpath = new DoceboDOMXPath($xml_doc))) { return false; } // get all the question in the document $NodeList_question = $xpath->query('/question_collection/question'); $seq = $this->getMaxSequence() + 1; $page = $this->_getPageNumber(); for ($i = 0; $i < $NodeList_question->length; $i++) { $quest = $NodeList_question->item($i); // read text quest $xre_quest_text = $xpath->query('prompt/text()', $quest); $node_quest_text = $xre_quest_text->item(0); //$node_quest_text->textContent // contains the question //insert the new question $ins_query = "\r\n\t\t\tINSERT INTO " . $GLOBALS['prefix_lms'] . "_testquest \r\n\t\t\t( idTest, idCategory, type_quest, title_quest, difficult, time_assigned, sequence, page ) VALUES \r\n\t\t\t( \t'" . $this->id_test . "', \r\n\t\t\t\t'0', \r\n\t\t\t\t'choice', \r\n\t\t\t\t'" . addslashes($node_quest_text->textContent) . "',\r\n\t\t\t\t'3', \r\n\t\t\t\t'0', \r\n\t\t\t\t'" . ($seq + $i) . "', \r\n\t\t\t\t'" . $page . "' ) "; if (!sql_query($ins_query)) { return false; } list($id_quest) = sql_fetch_row(sql_query("SELECT LAST_INSERT_ID()")); if (!$id_quest) { return false; } $re = true; // find all the answer $NodeList_answer = $xpath->query('answers/answer', $quest); for ($j = 0; $j < $NodeList_answer->length; $j++) { $answer = $NodeList_answer->item($j); $is_correct = $answer->getAttribute('is_correct'); $score_if_correct = $answer->getAttribute('score_if_correct'); $score_if_error = $answer->getAttribute('score_if_error'); //$answer->textContent $ins_answer_query = "\r\n\t\t\t\tINSERT INTO " . $GLOBALS['prefix_lms'] . "_testquestanswer \r\n\t\t\t\t( idQuest, is_correct, answer, comment, score_correct, score_incorrect ) VALUES\r\n\t\t\t\t( \t'" . $id_quest . "', \r\n\t\t\t\t\t'" . ($is_correct == 'true' ? 1 : 0) . "', \r\n\t\t\t\t\t'" . addslashes($answer->textContent) . "', \r\n\t\t\t\t\t'', \r\n\t\t\t\t\t'" . (double) $score_if_correct . "', \r\n\t\t\t\t\t'" . (double) $score_if_error . "') "; if (!sql_query($ins_answer_query)) { $re = false; } } echo '-------------------------------<br/><br/>'; } return $re; }