importlinks.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <?php /* <!-- Dokeos metadata/importlinks.php -->
  2. <!-- 2006/12/15 -->
  3. <!-- Copyright (C) 2006 rene.haentjens@UGent.be - see metadata/md_funcs.php -->
  4. */
  5. /**
  6. ==============================================================================
  7. * Dokeos Metadata: create table entries for a category of Link-type items
  8. *
  9. * @package dokeos.metadata
  10. ==============================================================================
  11. */
  12. // PRELIMS -------------------------------------------------------------------->
  13. $getpostvars = array('lcn', 'slo'); require('md_funcs.php');
  14. define('EID_TYPE', 'Link');
  15. define('OF_EID_TYPE', "eid LIKE '" . EID_TYPE . ".%'");
  16. require('md_' . strtolower(EID_TYPE) . '.php');
  17. // name of the language file that needs to be included
  18. $language_file = 'md_' . strtolower(EID_TYPE);
  19. include('../inc/global.inc.php');
  20. $nameTools = get_lang('Tool');
  21. ($nameTools && get_lang('Sorry')) or give_up(
  22. 'Language file ' . $language_file . " doesn't define 'Tool' and 'Sorry'");
  23. $_course = api_get_course_info(); isset($_course) or give_up(get_lang('Sorry'));
  24. $is_allowed_to_edit = isset($_user['user_id']) && $is_courseMember && is_allowed_to_edit();
  25. if (!$is_allowed_to_edit) give_up(get_lang('Denied'));
  26. $mdStore = new mdstore($is_allowed_to_edit); // create table if needed
  27. require(api_get_path(LIBRARY_PATH) . 'xmd.lib.php');
  28. require(api_get_path(LIBRARY_PATH) . 'xht.lib.php');
  29. require('md_phpdig.php');
  30. $mdObj = new mdobject($_course, 0);
  31. $mdCat = $mdObj->mdo_dcmap_v['Coverage'];
  32. $mdUrl = 'metadata/lom/technical/location[1]';
  33. $mdObj->mdo_add_breadcrump_nav(); // see 'md_' . EID_TYPE . '.php'
  34. $htmldecode = array_flip(get_html_translation_table(HTML_SPECIALCHARS));
  35. function check_andor_get($row, $get = '', $check = '', $tobe = '')
  36. {
  37. global $mdCat, $htmldecode;
  38. if (!$check && !$get) return FALSE;
  39. $regs = array(); // for use with ereg()
  40. if ($get == $mdCat && !$check) // cheat to be quicker
  41. if (ereg('<coverage>[^<]*<string language="..">([^<]+)<\/string>',
  42. $row['mdxmltext'], $regs)) return strtr($regs[1], $htmldecode);
  43. if ($check == $mdCat && !$get) // cheat to be quicker
  44. if (ereg('<coverage>[^<]*<string language="..">([^<]+)<\/string>',
  45. $row['mdxmltext'], $regs))
  46. return (strtr($regs[1], $htmldecode) == $tobe);
  47. $xmlDoc = new xmddoc(explode("\n", $row['mdxmltext']));
  48. if ($xmlDoc->error) return FALSE;
  49. if (!$check) return $xmlDoc->xmd_value($get);
  50. if ($xmlDoc->xmd_value($check) == $tobe)
  51. return $get ? $xmlDoc->xmd_value($get) : TRUE;
  52. return FALSE;
  53. }
  54. function get_cat($catname)
  55. {
  56. global $_course; $cateq = "category_title='". addslashes($catname) . "'";
  57. $linkcat_table = Database::get_course_table(TABLE_LINK_CATEGORY);
  58. $result = Database::query("SELECT id FROM $linkcat_table WHERE " . $cateq);
  59. if (Database::num_rows($result) >= 1 && ($row = Database::fetch_array($result)))
  60. return $row['id']; // several categories with same name: take first
  61. return FALSE;
  62. }
  63. // SET CURRENT LINKS CATEGORY - HEADER ---------------------------------------->
  64. unset($lci); // category-id
  65. if (isset($lcn)) // category_title
  66. {
  67. $lcn = substr(ereg_replace("[^\x20-\x7E\xA1-\xFF]", "", $lcn), 0, 255);
  68. $uceids = array(); $mceids = array();
  69. $result = $mdStore->mds_get_many('eid,mdxmltext', OF_EID_TYPE);
  70. while ($row = Database::fetch_array($result))
  71. if (check_andor_get($row, '', $mdCat, $lcn)) $uceids[] = $row['eid'];
  72. if (($lci = get_cat($lcn)) !== FALSE)
  73. {
  74. $link_table = Database::get_course_table(TABLE_LINK);
  75. $result = Database::query("SELECT id FROM $link_table WHERE category_id=" . $lci);
  76. while ($row = Database::fetch_array($result))
  77. {
  78. $lceids[$id = (int) $row['id']] = ($eid = EID_TYPE . '.' . $id);
  79. if (in_array($eid, $uceids)) $mceids[] = $eid;
  80. }
  81. $hdrInfo = ' ' . get_lang('WorkOn') . ' ' . htmlspecialchars($lcn, ENT_QUOTES, $charset) .
  82. ', LC-id=&nbsp;' . htmlspecialchars($lci, ENT_QUOTES, $charset);
  83. }
  84. elseif ($lcn)
  85. {
  86. $hdrInfo = ' (' . htmlspecialchars($lcn, ENT_QUOTES, $charset) .
  87. ': ' . get_lang('NotInDB') . ')';
  88. }
  89. else
  90. unset($lcn);
  91. $uceids = array_diff($uceids, $mceids); // old entries with no link
  92. if (count($lceids) && count($uceids))
  93. {
  94. $mdStore->mds_delete_many($uceids); $ufos = Database::affected_rows();
  95. }
  96. $interbreadcrumb[]= array(
  97. 'url' => api_get_self() . '?lcn=' . urlencode($lcn),
  98. 'name'=> get_lang('Continue') . ' ' . htmlspecialchars($lcn, ENT_QUOTES, $charset));
  99. }
  100. $htmlHeadXtra[] = '
  101. <link rel="stylesheet" type="text/css" href="md_styles.css">
  102. <script type="text/javascript" src="md_script.js"></script>
  103. ';
  104. Display::display_header($nameTools);
  105. // OPERATIONS ----------------------------------------------------------------->
  106. if ($ufos) echo '<h3>', $ufos, ' ', get_lang('RemainingFor'), ' ',
  107. htmlspecialchars($lcn, ENT_QUOTES, $charset), '</h3>', "\n";
  108. if (isset($slo)) echo '<h3>', $slo, '</h3>', "\n"; // selected links op
  109. if (isset($slo))
  110. if ($slo == get_lang('Create') && count($lceids))
  111. {
  112. foreach ($lceids as $id => $eid)
  113. {
  114. $mdObj = new mdobject($_course, $id); $xht = $mdObj->mdo_define_htt();
  115. $mdStore->mds_put($eid, $mdt = $mdObj->mdo_generate_default_xml_metadata(),
  116. 'mdxmltext', '?');
  117. $xht->xht_xmldoc = new xmddoc(explode("\n", $mdt));
  118. $mdStore->mds_put($eid, $xht->xht_fill_template('INDEXABLETEXT'),
  119. 'indexabletext');
  120. echo '<span class="lbs" onClick="', "javascript: makeWindow('index.php?eid=",
  121. urlencode($eid), "', '', '')\">", htmlspecialchars($eid, ENT_QUOTES, $charset), '</span> ';
  122. }
  123. echo '<br>';
  124. }
  125. elseif ($slo == get_lang('Remove') && count($lceids))
  126. {
  127. $mdStore->mds_delete_many($mceids); $aff = Database::affected_rows();
  128. echo $aff, ' MDEs/ ', count($lceids), ' ', get_lang('MdCallingTool'),
  129. '<br><br><b>', get_lang('AllRemovedFor'),
  130. ' ', htmlspecialchars($lcn, ENT_QUOTES, $charset), '</b><br />';
  131. }
  132. elseif ($slo == get_lang('Remove') && count($mceids)) // obsolete category
  133. {
  134. $mdStore->mds_delete_many($mceids);
  135. echo get_lang('AllRemovedFor'), ' ', htmlspecialchars($lcn, ENT_QUOTES, $charset), '<br />';
  136. }
  137. elseif ($slo == get_lang('Index') && file_exists($phpDigIncCn) && count($mceids))
  138. {
  139. $result = $mdStore->mds_get_many('eid,mdxmltext,indexabletext',
  140. OF_EID_TYPE . " AND eid IN ('" .
  141. implode("','", array_map('addslashes', $mceids)) . "')");
  142. while ($row = Database::fetch_array($result)) // load indexabletexts in memory
  143. $idt[check_andor_get($row, $mdUrl)] = $row['indexabletext'];
  144. require($phpDigIncCn); // switch to PhpDig DB
  145. foreach ($idt as $url => $text)
  146. {
  147. $pu = parse_url($url);
  148. if (!isset($pu['scheme'])) $pu['scheme'] = "http";
  149. if (isset($pu['host']))
  150. {
  151. $url = $pu['scheme'] . "://" . $pu['host'] . "/"; $file = '';
  152. if (($path = $pu['path']))
  153. if (substr($path, -1) == '/') $path = substr($path, 1);
  154. else
  155. {
  156. $pi = pathinfo($path); $path = $pi['dirname'];
  157. if ($path{0} == '\\') $path = substr($path, 1);
  158. if ($path{0} == '/') $path = substr($path, 1) . '/';
  159. $file = $pi['basename'];
  160. }
  161. $file .= ($pu['query'] ? '?'.$pu['query'] : '') .
  162. ($pu['fragment'] ? '#'.$pu['fragment'] : '');
  163. if ($site_id = remove_engine_entries($url, $path, $file))
  164. {
  165. echo '<table>', "\n";
  166. index_words($site_id, $path, $file,
  167. get_first_words($text, $url . $path, $file),
  168. get_keywords($text));
  169. echo '</table>', "\n";
  170. }
  171. else
  172. {
  173. echo '<table>', "\n";
  174. echo '<tr><td>', htmlspecialchars($url, ENT_QUOTES, $charset),
  175. '</td><td>', htmlspecialchars($path, ENT_QUOTES, $charset),
  176. '</td><td>', htmlspecialchars($file, ENT_QUOTES, $charset), '</td></tr>';
  177. echo '</table>', "\n";
  178. }
  179. }
  180. elseif (isset($pu['scheme']) && $pu['scheme'] == 'mailto' && isset($pu['path']))
  181. {
  182. if ($site_id = remove_engine_entries($url = 'mailto:' . $pu['path'], ''))
  183. {
  184. echo '<table>', "\n";
  185. index_words($site_id, '', '',
  186. get_first_words($text, $url, ''),
  187. get_keywords($text));
  188. echo '</table>', "\n";
  189. }
  190. else
  191. {
  192. echo '<table>', "\n";
  193. echo '<tr><td>', htmlspecialchars($url, ENT_QUOTES, $charset),
  194. '</td><td>', htmlspecialchars($path, ENT_QUOTES, $charset),
  195. '</td><td>', htmlspecialchars($file, ENT_QUOTES, $charset), '</td></tr>';
  196. echo '</table>', "\n";
  197. }
  198. }
  199. }
  200. if(isset($db))
  201. {
  202. //mysql_select_db($_configuration['main_database'], $db);
  203. Database::select_db($_configuration['main_database'], $db);
  204. }
  205. }
  206. elseif ($slo == get_lang('Index'))
  207. {
  208. echo 'Problem! PhpDig connect.php has gone ...';
  209. }
  210. // STATISTICS ----------------------------------------------------------------->
  211. echo '<h3>', get_lang('Statistics'), '</h3>', "\n";
  212. $result = $mdStore->mds_get_many('eid,mdxmltext', OF_EID_TYPE);
  213. echo get_lang('TotalMDEs'), Database::num_rows($result), "\n";
  214. while ($row = Database::fetch_array($result))
  215. {
  216. $cat = check_andor_get($row, $mdCat);
  217. $perCat[$cat] = ($pc = $perCat[$cat]) ? $pc + 1 : 1;
  218. }
  219. if (count($perCat))
  220. {
  221. echo '<table>', "\n";
  222. foreach ($perCat as $cat => $number)
  223. {
  224. echo '<tr><td>', $cat == $lcn ? '' : '(', htmlspecialchars($cat, ENT_QUOTES, $charset),
  225. $cat == $lcn ? '' : ')', ':</td><td align="right">',
  226. $number, '</td></tr>', "\n";
  227. }
  228. echo '</table>', "\n";
  229. }
  230. if (isset($lci))
  231. {
  232. echo '<br><br>', htmlspecialchars($lcn, ENT_QUOTES, $charset), ' ', get_lang('MdCallingTool'),
  233. ': ', count($lceids), '<br />', "\n";
  234. }
  235. // SELECT & FOOTER ------------------------------------------------------------>
  236. echo '<h3>', $nameTools, $hdrInfo, '</h3>', "\n";
  237. echo '<form action="' .api_get_self(). '?lcn=' . urlencode($lcn) .
  238. '" method="post">', "\n";
  239. if (count($lceids)) echo
  240. '<input type="submit" name="slo" value="', get_lang('Create'), '">', "\n";
  241. if ($perCat[$lcn]) echo
  242. '<input type="submit" name="slo" value="', get_lang('Remove'), '">', "\n";
  243. if ($perCat[$lcn] && file_exists($phpDigIncCn)) echo
  244. '<input type="submit" name="slo" value="', get_lang('Index'), '">', "\n";
  245. echo '</form>', "\n";
  246. if (count($perCat)) foreach ($perCat as $cat => $number)
  247. $perCat[$cat] = '(' . htmlspecialchars($cat, ENT_QUOTES, $charset) . ')';
  248. $linkcat_table = Database::get_course_table(TABLE_LINK_CATEGORY);
  249. $result = Database::query("SELECT category_title FROM $linkcat_table");
  250. while ($row = Database::fetch_array($result))
  251. {
  252. $cat = $row['category_title']; $hcat = htmlspecialchars($cat, ENT_QUOTES, $charset);
  253. if ($perCat[$cat] == $hcat) $dups[] = $cat;
  254. else $perCat[$cat] = $hcat;
  255. }
  256. if (count($dups))
  257. {
  258. $warning = get_lang('WarningDups');;
  259. foreach ($dups as $cat) unset($perCat[$cat]);
  260. }
  261. echo '<h3>', get_lang('OrElse'), $warning, '</h3>', "\n", // select new target
  262. '<table><tr><td align="right" class="alternativeBgDark">', "\n",
  263. '<form action="'.api_get_self().'" method="post">', "\n",
  264. get_lang('SLC'), ' :', "\n", '<select name="lcn">', "\n",
  265. '<option value=""></option>', "\n";
  266. foreach ($perCat as $cat => $text) echo '<option value="' .
  267. htmlspecialchars($cat, ENT_QUOTES, $charset) . '"' .
  268. ($cat == $lcn ? ' selected' : '') . '>' . $text . '</option>', "\n";
  269. echo '</select><input type="submit" value="', ' '.get_lang('Ok').' ', '">', "\n",
  270. '</form>', "\n", '</td></tr></table>', "\n";
  271. Display::display_footer();
  272. ?>