function store_md_and_traverse_subitems($mfdocId, $level, $counter, $contextElem, $treeElem, $parentElem)
 {
     global $_user, $xht_doc, $mdStore, $mdObj, $sdisub, $charset;
     //  $contextElem -> @identifier, metadata/lom
     //  $treeElem ->    title, items
     $itemId = $xht_doc->xmd_value(ITEMID, $contextElem);
     if ($sdisub && $level == 1 && $sdisub != $itemId) {
         return;
     }
     //  <item level=... number=... identifier=...>:
     //      <title>...</title>
     //      <parent identifier=... /> <previous ... /> <next ... />
     //      <child identifier=... /> <child identifier=... /> ...
     //      <resource href=...>
     //          <file href=... /> <file href=... /> ...
     //      </resource>
     //      <metadata>...</metadata>
     //  </item>
     set_time_limit(30);
     // again 30 seconds from here on...
     $mddoc = new xmddoc('<item/>');
     // version, name ?
     $mddoc->xmd_set_attribute(0, 'level', $level, false);
     $mddoc->xmd_set_attribute(0, 'number', $counter, false);
     $mddoc->xmd_set_attribute(0, IDENTIF, $itemId, false);
     if ($level == 0) {
         $mddoc->xmd_set_attribute(0, 'created', date('Y/m/d H:i:s'), false);
         $mddoc->xmd_set_attribute(0, 'by', $_user['user_id'], false);
     }
     $mddoc->xmd_add_text_element(TITLE, $xht_doc->xmd_value(TITLE, $treeElem));
     if ($ppnId = $xht_doc->xmd_value(ITEMID, $parentElem)) {
         $mddoc->xmd_add_element('parent', 0, array(IDENTIF => $ppnId));
     }
     if ($ppnId = $xht_doc->xmd_value('-' . SUBIT, $treeElem)) {
         $mddoc->xmd_add_element('previous', 0, array(IDENTIF => $ppnId));
     }
     if ($ppnId = $xht_doc->xmd_value('+' . SUBIT, $treeElem)) {
         $mddoc->xmd_add_element('next', 0, array(IDENTIF => $ppnId));
     }
     if (($srcElem = resource_for($treeElem)) > 0) {
         // change stuff below to xmd_copy_foreign_child ?
         $resElem = $mddoc->xmd_add_element('resource', 0, array(HREF => $xht_doc->xmd_value(WEBF, $srcElem)));
         foreach ($xht_doc->xmd_select_elements(FILE, $srcElem) as $fileElem) {
             $mddoc->xmd_add_element(FILE, $resElem, array(HREF => $xht_doc->xmd_value(WEBF, $fileElem)));
         }
     }
     $mddoc->xmd_copy_foreign_child($xht_doc, $xht_doc->xmd_select_single_element('metadata', $contextElem));
     foreach ($xht_doc->xmd_select_elements(SUBITEM, $treeElem) as $subElem) {
         $mddoc->xmd_add_element('child', 0, array(IDENTIF => $xht_doc->xmd_value(ITEMID, $subElem)));
     }
     $mdt = $mddoc->xmd_xml();
     $xhtDoc = $mdObj->mdo_define_htt();
     $xhtDoc->xht_xmldoc = $mddoc;
     // $xhtDoc->xht_param['xxx'] = 'yyy';
     $mdStore->mds_put($eid = EID_TYPE . '.' . $mfdocId . '.' . $itemId, $mdt, 'mdxmltext', '?');
     $mdStore->mds_put($eid, $ixt = $xhtDoc->xht_fill_template('INDEXABLETEXT'), 'indexabletext');
     if ($level == 0) {
         $mdStore->mds_put(EID_TYPE . '.' . $mfdocId, $mdt, 'mdxmltext', '?');
         $mdStore->mds_put(EID_TYPE . '.' . $mfdocId, $ixt, 'indexabletext');
     }
     echo $level <= 1 ? '<br />' . $level . '/ ' : ' ', htmlspecialchars($itemId, ENT_QUOTES, $charset);
     flush();
     $loopctr = 0;
     foreach ($xht_doc->xmd_select_elements(SUBITEM, $treeElem) as $subElem) {
         store_md_and_traverse_subitems($mfdocId, $level + 1, ++$loopctr, $subElem, $subElem, $contextElem);
         // note: replacing this recursion by queue+loop makes it slower!
     }
 }
Esempio n. 2
0
$testdoc->xmd_set_attribute($sometag2, 'owner', '<c&a">');
$testdoc->xmd_add_element('innertag', $sometag2);
showDoc('Slightly changed');
showDoc('All text', $testdoc->xmd_text());
$stuff = '';
foreach ($testdoc->xmd_get_element($sometag2) as $key => $value) {
    $stuff .= $key . ': ' . $value . "\n";
}
showDoc('Children, attributes, name and parent of 2nd sometag', $stuff);
$testdoc->xmd_remove_nodes('text in my first child element', $sometag1);
// note: remove text may remove more than one node...
$testdoc->xmd_set_attribute(0, 'owner', 'haentjens');
// new value
showDoc('Text removed from 1st sometag, docroot owner changed');
$testdoc->xmd_remove_element($sometag2);
$sometag2 = $testdoc->xmd_add_text_element('��', 'alors!');
showDoc('2nd sometag replaced by new subelement with French name');
$testdoc->name[$sometag2] = 'sometag';
// properties are read/write
$testdoc->xmd_set_attribute($sometag2, 'xmlns:tn', 'urn:ugent-be');
// namesp def
$subtag = $testdoc->xmd_add_element('urn:ugent-be:subtag', $sometag2);
$testdoc->xmd_set_attribute($sometag2, 'urn:ugent-be:owner', 'FTW');
showDoc('French name replaced, namespace definition added and used');
$testdoc->xmd_set_attribute($sometag1, 'urn:ugent-be:owner', 'FTW');
$testdoc->xmd_set_attribute($sometag1, 'urn:rug-ac-be:owner2', 'FLA');
// restriction: cannot add attribute 'urn:rug-ac-be:owner' (same name)
showDoc('Attributes with namespaces added, ns def is auto-generated');
$stuff = 'subtag => ' . $testdoc->xmd_get_ns_uri($subtag) . "\n";
foreach ($testdoc->attributes[$sometag1] as $name => $value) {
    $stuff .= $name . ' => ' . $testdoc->xmd_get_ns_uri($sometag1, $name) . "\n";