userInfo.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. <?php // $Id: userInfo.php 15833 2008-07-21 18:57:25Z juliomontoya $
  2. /*
  3. ==============================================================================
  4. Dokeos - elearning and course management software
  5. Copyright (c) 2004-2008 Dokeos SPRL
  6. Copyright (c) 2003 hent University (UGent)
  7. Copyright (c) 2001 Universite catholique de Louvain (UCL)
  8. Copyright (c) various contributors
  9. For a full list of contributors, see "credits.txt".
  10. The full license can be read in "license.txt".
  11. This program is free software; you can redistribute it and/or
  12. modify it under the terms of the GNU General Public License
  13. as published by the Free Software Foundation; either version 2
  14. of the License, or (at your option) any later version.
  15. See the GNU General Public License for more details.
  16. Contact: Dokeos, rue du Corbeau, 108, B-1030 Brussels, Belgium, info@dokeos.com
  17. ==============================================================================
  18. */
  19. /**
  20. ==============================================================================
  21. * This script displays info about one specific user, specified through
  22. * a GET parameter, e.g. uInfo=2
  23. *
  24. * @todo clean up script in clean sections:
  25. * (1) gather information
  26. * (2) tool logic
  27. * (3) display
  28. * @author original author (unknown, probably thomas,hugues,moosh)
  29. * @author Roan Embrechts, minor modification: virtual courses support
  30. * @author Julio Montoya Armas Several fixes
  31. * @package dokeos.user
  32. ==============================================================================
  33. */
  34. /*
  35. ==============================================================================
  36. INIT SECTION
  37. ==============================================================================
  38. */
  39. // name of the language file that needs to be included
  40. $language_file = array ('registration', 'userInfo');
  41. include ("../inc/global.inc.php");
  42. require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  43. require_once (api_get_path(LIBRARY_PATH).'usermanager.lib.php');
  44. $editMainUserInfo = Security::remove_XSS($_REQUEST['editMainUserInfo']);
  45. $uInfo = $editMainUserInfo;
  46. $this_section = SECTION_COURSES;
  47. $nameTools = get_lang('Users');
  48. api_protect_course_script(true);
  49. if(api_is_anonymous())
  50. {
  51. api_not_allowed(true);
  52. }
  53. //prepare variables used in userInfoLib.php functions
  54. $TBL_USERINFO_DEF = Database :: get_course_table(TABLE_USER_INFO);
  55. $TBL_USERINFO_CONTENT = Database :: get_course_table(TABLE_USER_INFO_CONTENT);
  56. $interbreadcrumb[] = array ('url' => 'user.php', 'name' => get_lang('Users'));
  57. if ($origin != 'learnpath')
  58. { //so we are not in learnpath tool
  59. Display :: display_header($nameTools, "User");
  60. }
  61. else
  62. {
  63. ?> <link rel="stylesheet" type="text/css" href="<?php echo api_get_path(WEB_CODE_PATH);?>css/default.css" /> <?php
  64. }
  65. $currentCourse = $currentCourseID;
  66. api_display_tool_title(get_lang("Users"));
  67. /*
  68. * data found in settings are :
  69. * $uid
  70. * $isAdmin
  71. * $isAdminOfCourse
  72. * $_configuration['main_database']
  73. * $currentCourseID
  74. */
  75. $userIdViewed = $uInfo; // Id of the user we want to view coming from the user.php
  76. /*
  77. -----------------------------------------------------------
  78. Connection layer between Dokeos and the current script
  79. -----------------------------------------------------------
  80. */
  81. $mainDB = $_configuration['main_database'];
  82. $courseCode = $currentCourseID = $_course['sysCode'];
  83. $tbl_coursUser = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  84. $userIdViewer = $_user['user_id']; // id fo the user currently online
  85. //$userIdViewed = $_GET['userIdViewed']; // Id of the user we want to view
  86. $allowedToEditContent = ($userIdViewer == $userIdViewed) || $is_platformAdmin;
  87. $allowedToEditDef = api_is_allowed_to_edit();
  88. $is_allowedToTrack = api_is_allowed_to_edit() && $_configuration['tracking_enabled'];
  89. // Library connection
  90. include ("userInfoLib.php");
  91. /*
  92. ==============================================================================
  93. FUNCTIONS
  94. ==============================================================================
  95. */
  96. /*
  97. ==============================================================================
  98. COMMANDS SECTION
  99. ==============================================================================
  100. */
  101. $displayMode = "viewContentList";
  102. $removeDef = Security::remove_XSS($_GET['removeDef']);
  103. $editDef = Security::remove_XSS($_GET['editDef']);
  104. $moveUpDef = Security::remove_XSS($_GET['moveUpDef']);
  105. $moveDownDef = Security::remove_XSS($_GET['moveDownDef']);
  106. if ($allowedToEditDef)
  107. {
  108. if (!empty($_POST['submitDef']))
  109. {
  110. if (!empty($_POST['id']))
  111. {
  112. edit_cat_def($_POST['id'], $_POST['title'], $_POST['comment'], $_POST['nbline']);
  113. }
  114. else
  115. {
  116. create_cat_def($_POST['title'], $_POST['comment'], $_POST['nbline']);
  117. }
  118. $displayMode = "viewDefList";
  119. }
  120. elseif (!empty($_GET['removeDef']))
  121. {
  122. remove_cat_def($_GET['removeDef'], true);
  123. $displayMode = "viewDefList";
  124. }
  125. elseif (!empty($_GET['editDef']))
  126. {
  127. $displayMode = "viewDefEdit";
  128. }
  129. elseif (!empty ($_POST['addDef']))
  130. {
  131. $displayMode = "viewDefEdit";
  132. }
  133. elseif (!empty($_GET['moveUpDef']))
  134. {
  135. move_cat_rank($_GET['moveUpDef'], "up");
  136. $displayMode = "viewDefList";
  137. }
  138. elseif (!empty($_GET['moveDownDef']))
  139. {
  140. move_cat_rank($_GET['moveDownDef'], "down");
  141. $displayMode = "viewDefList";
  142. }
  143. elseif (!empty($_POST['viewDefList']))
  144. {
  145. $displayMode = "viewDefList";
  146. }
  147. elseif (!empty($_GET['editMainUserInfo']))
  148. {
  149. $userIdViewed = strval(intval($_GET['editMainUserInfo']));
  150. $displayMode = "viewMainInfoEdit";
  151. }
  152. elseif (!empty($_POST['submitMainUserInfo']))
  153. {
  154. if (isset ($_POST['submitMainUserInfo']))
  155. {
  156. $userIdViewed = strval(intval($_POST['submitMainUserInfo']));
  157. //is teacher
  158. $promoteCourseAdmin=$_POST['promoteCourseAdmin'];
  159. $userProperties['status'] = 5;
  160. if ($promoteCourseAdmin)
  161. {
  162. $userProperties['status'] = 1;
  163. }
  164. // deprecated feature
  165. // is coach
  166. if (isset ($_POST['promoteTutor']))
  167. {
  168. $promoteTutor=$_POST['promoteTutor'];
  169. $userProperties['tutor'] = 0;
  170. if ($promoteTutor)
  171. {
  172. $userProperties['tutor'] = 1;
  173. }
  174. }
  175. // role is a string
  176. if (isset ($_POST['role']))
  177. {
  178. $role=$_POST['role'];
  179. $userProperties['role'] = $role;
  180. }
  181. update_user_course_properties($userIdViewed, $courseCode, $userProperties);
  182. $displayMode = "viewContentList";
  183. }
  184. }
  185. }
  186. // COMMON COMMANDS
  187. if ($allowedToEditContent)
  188. {
  189. if (isset($_POST['submitContent']))
  190. {
  191. if ($_POST['cntId']) // submit a content change
  192. {
  193. edit_cat_content($_POST['catId'], $userIdViewed, $_POST['content'], $_SERVER['REMOTE_ADDR']);
  194. }
  195. else // submit a totally new content
  196. {
  197. fill_new_cat_content($_POST['catId'], $userIdViewed, $_POST['content'], $_SERVER['REMOTE_ADDR']);
  198. }
  199. $displayMode = "viewContentList";
  200. }
  201. elseif (!empty($_GET['editContent']))
  202. {
  203. $displayMode = "viewContentEdit";
  204. $userIdViewed = $userIdViewed;
  205. }
  206. }
  207. /*
  208. ==============================================================================
  209. DISPLAY MODES
  210. ==============================================================================
  211. */
  212. // Back button for each display mode (Top)
  213. echo "<div align=\"right\"><a href=\"user.php?".api_get_cidreq()."&amp;origin=".$origin."\">".get_lang('BackUser')."</a></div>\n";
  214. if ($displayMode == "viewDefEdit")
  215. {
  216. /*>>>>>>>>>>>> CATEGORIES DEFINITIONS : EDIT <<<<<<<<<<<<*/
  217. $catToEdit = get_cat_def($_GET['editDef']);
  218. $edit_heading_form = new FormValidator('edit_heading_form');
  219. $edit_heading_form->addElement('hidden', 'id');
  220. $edit_heading_form->add_textfield('title', get_lang('Title'));
  221. $edit_heading_form->addElement('textarea', 'comment', get_lang('Comment'), array ('cols' => 60, 'rows' => 4));
  222. $possible_line_nrs[1] = '1 '.get_lang('Line');
  223. $possible_line_nrs[3] = '3 '.get_lang('Lines');
  224. $possible_line_nrs[5] = '5 '.get_lang('Lines');
  225. $possible_line_nrs[10] = '10 '.get_lang('Lines');
  226. $possible_line_nrs[15] = '15 '.get_lang('Lines');
  227. $edit_heading_form->addElement('select', 'nbline', get_lang('LineNumber'), $possible_line_nrs);
  228. $edit_heading_form->addElement('submit', 'submitDef', get_lang('Ok'));
  229. $edit_heading_form->setDefaults($catToEdit);
  230. $edit_heading_form->display();
  231. }
  232. elseif ($displayMode == "viewDefList")
  233. {
  234. /*>>>>>>>>>>>> CATEGORIES DEFINITIONS : LIST <<<<<<<<<<<<*/
  235. $catList = get_cat_def_list();
  236. if ($catList)
  237. {
  238. foreach ($catList as $thisCat)
  239. {
  240. // displays Title and comments
  241. echo "<p>", "<b>".htmlize($thisCat['title'])."</b><br>\n", "<i>".htmlize($thisCat['comment'])."</i>\n", "</p>";
  242. // displays lines
  243. echo "<blockquote>\n", "<font color=\"gray\">\n";
  244. for ($i = 1; $i <= $thisCat['nbline']; $i ++)
  245. {
  246. echo "<br>__________________________________________\n";
  247. }
  248. echo "</font>\n", "</blockquote>\n";
  249. // displays commands
  250. echo "<a href=\"".api_get_self()."?".api_get_cidreq()."&removeDef=", $thisCat['catId'], "\">", "<img src=\"../img/delete.gif\" border=\"0\" alt=\"".get_lang('Remove')."\" onclick=\"javascript:if(!confirm('".addslashes(htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,$charset))."')) return false;\">", "</a>", "<a href=\"".api_get_self()."?".api_get_cidreq()."&editDef=", $thisCat['catId'], "\">", "<img src=\"../img/edit.gif\" border=\"0\" alt=\"".get_lang('Edit')."\" />", "</a>", "<a href=\"".api_get_self()."?".api_get_cidreq()."&moveUpDef=", $thisCat['catId'], "\">", "<img src=\"../img/up.gif\" border=\"0\" alt=\"".get_lang('MoveUp')."\">", "</a>", "<a href=\"".api_get_self()."?".api_get_cidreq()."&moveDownDef=", $thisCat['catId'], "\">", "<img src=\"../img/down.gif\" border=\"0\" alt=\"".get_lang('MoveDown')."\">", "</a>\n";
  251. } // end for each
  252. } // end if ($catList)
  253. echo "<center>\n",
  254. "<form method=\"post\" action=\"".api_get_self()."\">",
  255. "<input type=\"submit\" name=\"addDef\" value=\"".get_lang('AddNewHeading')."\" />",
  256. "</form>\n",
  257. "<center>\n";
  258. }
  259. elseif ($displayMode == "viewContentEdit")
  260. {
  261. /*>>>>>>>>>>>> CATEGORIES CONTENTS : EDIT <<<<<<<<<<<<*/
  262. $catToEdit = get_cat_content($userIdViewed, $_GET['editContent']);
  263. $content_heading_form = new FormValidator('content_heading_form');
  264. $content_heading_form->addElement('hidden', 'cntId');
  265. $content_heading_form->addElement('hidden', 'catId');
  266. $content_heading_form->addElement('hidden', 'uInfo');
  267. $content_heading_form->addElement('static', null, $catToEdit['title'], htmlize($catToEdit['comment']));
  268. if ($catToEdit['nbline'] == 1)
  269. {
  270. $content_heading_form->addElement('text', 'content', null, array ('size' => 80));
  271. }
  272. else
  273. {
  274. $content_heading_form->addElement('textarea', 'content', null, array ('cols' => 60, 'rows' => $catToEdit['nbline']));
  275. }
  276. $content_heading_form->addElement('submit', 'submitContent', get_lang('Ok'));
  277. $defaults = $catToEdit;
  278. $defaults['cntId'] = $catToEdit['contentId'];
  279. $defaults['uInfo'] = $userIdViewed;
  280. $content_heading_form->setDefaults($defaults);
  281. $content_heading_form->display();
  282. }
  283. elseif ($displayMode == "viewMainInfoEdit")
  284. {
  285. /*>>>>>>>>>>>> CATEGORIES MAIN INFO : EDIT <<<<<<<<<<<<*/
  286. $mainUserInfo = get_main_user_info($userIdViewed, $courseCode);
  287. if ($mainUserInfo)
  288. {
  289. ($mainUserInfo['status'] == 1) ? $courseAdminChecked = "checked" : $courseAdminChecked = "";
  290. ($mainUserInfo['tutor_id'] == 1) ? $tutorChecked = "checked" : $tutorChecked = "";
  291. $image_array=UserManager::get_user_picture_path_by_id($userIdViewed,'web',false,true);
  292. echo '<img src="'.$image_array['dir'].$image_array['file'].'" border="1">';
  293. //"<td>", get_lang('Tutor'), "</td>\n",
  294. echo "<form action=\"".api_get_self()."\" method=\"post\">\n",
  295. "<input type=\"hidden\" name=\"submitMainUserInfo\" value=\"$userIdViewed\" />\n",
  296. "<table width=\"80%\" border=\"0\">",
  297. "<tr align=\"center\" bgcolor=\"#E6E6E6\">\n",
  298. "<td align=\"left\">", get_lang('Name'), "</td>\n",
  299. "<td width=\"100px\" align=\"left\">", get_lang('Description'), "</td>\n",
  300. "<td>", get_lang('Tutor'), "</td>\n",
  301. "<td>", get_lang('CourseManager'), "</td>\n",
  302. "</tr>\n",
  303. "<tr align=\"center\">",
  304. "<td align=\"left\"><b>", htmlize($mainUserInfo['firstName']), " ", htmlize($mainUserInfo['lastName']), "</b></td>\n",
  305. "<td align=\"left\"><input type=\"text\" name =\"role\" value=\"", $mainUserInfo['role'], "\" maxlength=\"40\" /></td>",
  306. "<td><input class=\"checkbox\" type=\"checkbox\" name=\"promoteTutor\" value=\"1\" ", $tutorChecked, " /></td>";
  307. if (!($is_courseAdmin && $_user['user_id'] == $userIdViewed))
  308. {
  309. echo "<td><input class=\"checkbox\" type=\"checkbox\" name=\"promoteCourseAdmin\" value=\"1\"", $courseAdminChecked, " /></td>\n";
  310. }
  311. else
  312. {
  313. echo "<td>", get_lang('CourseManager'), "</td>\n";
  314. }
  315. echo "<td><input type=\"submit\" name=\"submit\" value=\"Ok\" /></td>\n", "</tr>", "</table>", "</form>\n";
  316. echo "<p>".Display :: encrypted_mailto_link($mainUserInfo['email'], $mainUserInfo['email'])."</p>";
  317. if (api_get_setting('extended_profile') == 'true')
  318. {
  319. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyCompetences').'</strong></div><div>'.$mainUserInfo['competences'].'</div>';
  320. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyDiplomas').'</strong></div><div>'.$mainUserInfo['diplomas'].'</div>';
  321. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyTeach').'</strong></div><div>'.$mainUserInfo['teach'].'</div>';
  322. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyPersonalOpenArea').'</strong></div><div>'.$mainUserInfo['openarea'].'</div>';
  323. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyProductions').'</strong></div><div>'.UserManager::build_production_list($mainUserInfo['user_id']).'</div>';
  324. }
  325. }
  326. else
  327. {
  328. Display :: display_normal_message(get_lang('ThisStudentIsSubscribeThroughASession'));
  329. }
  330. }
  331. elseif ($displayMode == "viewContentList") // default display
  332. {
  333. /*>>>>>>>>>>>> CATEGORIES CONTENTS : LIST <<<<<<<<<<<<*/
  334. $virtual_course_code = $_GET["virtual_course"];
  335. if (isset ($virtual_course_code))
  336. {
  337. $courseCode = $virtual_course_code;
  338. //not supported yet: editing users of virtual courses
  339. $allowedToEditDef = false;
  340. }
  341. $mainUserInfo = get_main_user_info($userIdViewed, $courseCode);
  342. if ($mainUserInfo)
  343. {
  344. $image_array=UserManager::get_user_picture_path_by_id($userIdViewed,'web',false,true);
  345. echo '<img src="'.$image_array['dir'].$image_array['file'].'" border="1">';
  346. //DISPLAY TABLE HEADING
  347. if ($origin == 'learnpath') { $allowedToEditDef=false; $is_allowedToTrack=false; }
  348. //"<td>",get_lang('Tutor'),"</td>\n",
  349. echo "<table width=\"80%\" border=\"0\">",
  350. "<tr align=\"center\" bgcolor=\"#E6E6E6\">\n",
  351. "<td align=\"left\">",get_lang('Name'),"</td>\n",
  352. "<td width=\"100px\" align=\"left\">",get_lang('Description'),"</td>\n",
  353. "<td>",get_lang('Tutor'),"</td>\n",
  354. "<td>",get_lang('CourseManager'),"</td>\n",
  355. ($allowedToEditDef?"<td>".get_lang('Edit')."</td>\n":""),
  356. ($is_allowedToTrack?"<td>".get_lang('Tracking')."</td>\n":""),
  357. "</tr>\n",
  358. "<tr align=\"center\">\n",
  359. "<td align=\"left\"><b>",htmlize($mainUserInfo['firstName'])," ",htmlize($mainUserInfo['lastName']),"</b></td>\n",
  360. "<td align=\"left\">",htmlize($mainUserInfo['role']),"</td>";
  361. //DISPLAY TABLE CONTENT
  362. // deprecated feature
  363. if ($mainUserInfo['tutor_id'] == 1)
  364. {
  365. echo "<td>",get_lang('Tutor'),"</td>\n";
  366. }
  367. else
  368. {
  369. echo "<td> - </td>\n";
  370. }
  371. if ($mainUserInfo['status'] == 1)
  372. {
  373. echo "<td>",get_lang('CourseManager'),"</td>";
  374. }
  375. else
  376. {
  377. echo "<td> - </td>\n";
  378. }
  379. if ($allowedToEditDef)
  380. {
  381. echo "<td>",
  382. "<a href=\"".api_get_self()."?".api_get_cidreq()."&editMainUserInfo=$userIdViewed\">",
  383. "<img border=\"0\" alt=\"\" src=\"../img/edit.gif\" />",
  384. "</a>",
  385. "</td>";
  386. }
  387. if ($is_allowedToTrack)
  388. {
  389. echo "<td>",
  390. "<a href=\"../mySpace/myStudents.php?".api_get_cidreq()."&origin=user_course&student=$userIdViewed&details=true&course=".$_course['id']."\">",
  391. "<img border=\"0\" alt=\"".get_lang('Tracking')." : $userIdViewed\" src=\"../img/statistics.gif\" />",
  392. "</a>",
  393. "</td>";
  394. }
  395. echo "</tr>",
  396. "</table>";
  397. //"<p><a href=\"mailto:",$mainUserInfo['email'],"\">",$mainUserInfo['email'],"</a>",
  398. echo "<p>". Display::encrypted_mailto_link($mainUserInfo['email'],$mainUserInfo['email']). "</p>";
  399. if (api_get_setting('extended_profile') == 'true')
  400. {
  401. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyCompetences').'</strong></div><div>'.$mainUserInfo['competences'].'</div>';
  402. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyDiplomas').'</strong></div><div>'.$mainUserInfo['diplomas'].'</div>';
  403. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyTeach').'</strong></div><div>'.$mainUserInfo['teach'].'</div>';
  404. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyPersonalOpenArea').'</strong></div><div>'.$mainUserInfo['openarea'].'</div>';
  405. echo '<div style="margin-top:10px;"><strong>'.get_lang('MyProductions').'</strong></div><div>'.UserManager::build_production_list($mainUserInfo['user_id']).'</div>';
  406. }
  407. }
  408. else{
  409. Display :: display_normal_message(get_lang('ThisStudentIsSubscribeThroughASession'));
  410. }
  411. if (get_setting('allow_user_headings') == 'true' && $allowedToEditDef) // only course administrators see this line
  412. {
  413. echo "<div align=right>",
  414. "<form method=\"post\" action=\"".api_get_self()."\">",
  415. get_lang('CourseAdministratorOnly')," : ",
  416. "<input type=\"submit\" name=\"viewDefList\" value=\"".get_lang('DefineHeadings')."\" />",
  417. "</form>",
  418. "<hr noshade size=\"1\" style=\"color:#99CCFF\">",
  419. "</div>\n";
  420. }
  421. $catList = get_course_user_info($userIdViewed);
  422. if ($catList)
  423. {
  424. foreach ($catList as $thisCat)
  425. {
  426. // Category title
  427. echo "<p><b>",$thisCat['title'],"</b></p>\n";
  428. // Category content
  429. echo "<blockquote>\n";
  430. if ($thisCat['content'])
  431. {
  432. echo htmlize($thisCat['content'])."\n";
  433. }
  434. else
  435. {
  436. echo "....";
  437. }
  438. // Edit command
  439. if ($allowedToEditContent)
  440. {
  441. echo "<br><br>\n",
  442. "<a href=\"".api_get_self()."?".api_get_cidreq()."&editContent=",$thisCat['catId'],"&uInfo=",$userIdViewed,"\">",
  443. "<img src=\"../img/edit.gif\" border=\"0\" alt=\"edit\">",
  444. "</a>\n";
  445. }
  446. echo "</blockquote>\n";
  447. }
  448. }
  449. }
  450. // Back button for each display mode (bottom)
  451. echo "<div align=\"right\"><a href=\"user.php?".api_get_cidreq()."&amp;origin=".$origin."\">".get_lang('BackUser')."</a></div>\n";
  452. /*
  453. ==============================================================================
  454. FOOTER
  455. ==============================================================================
  456. */
  457. Display :: display_footer();
  458. ?>