function todelete_getelementbynameattrib($node, $name, $attribname = "", $attribvalue = "") { /* soap__dbgOut("+getelementbynameattrib( ".$node->tagName.", $name, $attribname , $attribvalue)"); $elem = $node->firstChild; soap__dbgOut(" getelementbynameattrib class ".get_class($elem)); while( $elem ) { soap__dbgOut(" getelementbynameattrib new step"); $elem->nodeType; soap__dbgOut(" getelementbynameattrib process ".$elem->nodeType); if( ($elem->nodeType == XML_ELEMENT_NODE) && ($elem->nodeName == $name) ) { if( $attribname != "" ) { if( $elem->getAttribute($attribname) == $attribvalue) break; // trovato } else break; // trovato } $nextelem = $elem->nextSibling; // successivo elemento soap__dbgOut(" getelementbynameattrib ".get_class($nextelem)); $elem = $nextelem; soap__dbgOut(" getelementbynameattrib ".get_class($elem)); } soap__dbgOut("-getelementbynameattrib"); return $elem;*/ soap__dbgOut("+getelementbynameattrib node=" . print_r($node, true) . ", name={$name}, attribname=" . print_r($attribname, true) . ", attribvalue={$attribvalue}"); $xpath = new DoceboDOMXPath($node->ownerDocument); $result = $xpath->query("*", $node); $elem = NULL; for ($iResult = 0; $iResult < $result->length; $iResult++) { soap__dbgOut(" getelementbynameattrib process:" . $iResult); $elem = $result->item($iResult); soap__dbgOut(" getelementbynameattrib process:" . print_r($elem, true)); if ($elem->nodeName == $name) { soap__dbgOut(" getelementbynameattrib name ok:" . $elem->nodeName); if ($attribname != "") { soap__dbgOut(" getelementbynameattrib test for attribute: " . $attribname); if ($elem->getAttribute($attribname) == $attribvalue) { soap__dbgOut(" getelementbynameattrib found:" . $elem->nodeName); break; // trovato } } else { soap__dbgOut(" getelementbynameattrib found:" . $elem->nodeName); break; // trovato } } $elem = NULL; } return $elem; soap__dbgOut("-getelementbynameattrib"); /*$xpath = new DoceboDOMXPath($node->ownerDocument); $query = "child::".$name; if( $attribname != "" ) { $query .= '[@'.$attribname.' = "'.$attribvalue.'"]'; } if( $node->nodeType == XML_ELEMENT_NODE) { $result = $xpath->query($query,$node); } else { $result = $xpath->query($query); } if( isset($result->length) && $result->length > 0 ) { $return = $result->item(0); return $return; } return NULL;*/ }
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 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 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; }