PageRenderTime 48ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/connectors/moodle/moodle_link.php

https://github.com/adamfranco/segue-1.x
PHP | 365 lines | 226 code | 64 blank | 75 comment | 36 complexity | e9d0ce02cf52de45bfd96dca8bc58cec MD5 | raw file
  1. <?php // $Id$
  2. session_start();// start the session manager :) -- important, as we just learned
  3. require_once("../../functions.inc.php");
  4. require_once("../../config.inc.php");
  5. require_once("../../dbwrapper.inc.php");
  6. //error_reporting(0);
  7. ob_start();
  8. $cid = db_connect ($dbhost, $dbuser, $dbpass, $dbdb);
  9. //printpre ($_SESSION);
  10. //printpre ($_SERVER);
  11. //printpre ($_REQUEST);
  12. /******************************************************************************
  13. * start HTML output
  14. ******************************************************************************/
  15. ?>
  16. <html>
  17. <head>
  18. <title>Segue - Measure Connector</title>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <style type="text/css">
  21. a {
  22. color: #003366;
  23. text-decoration: none;
  24. }
  25. a:hover {
  26. text-decoration: underline;
  27. }
  28. .error {
  29. margin-top: 10px;
  30. color: #990000;
  31. font-size: 14px;
  32. }
  33. .connection {
  34. font-size: 16px;
  35. text-align: center;
  36. padding: 10px;
  37. margin: 50px;
  38. border: 1px dotted #666666;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <?
  44. print "<div class='connection'>";
  45. print "Connnecting to Moodle...<br/><br/>";
  46. if ($_SERVER['HTTP_REFERER']) print "<a href='".$_SERVER['HTTP_REFERER']."'>&lt;&lt; back</a> | ";
  47. print "<a href='".$cfg['full_uri']."'>Segue Home</a>";
  48. /******************************************************************************
  49. * Make sure there is an authenticated Segue user
  50. * go back to previous page http referrer
  51. ******************************************************************************/
  52. if (!isset($_SESSION[aid])) {
  53. print "<div class='error'>You must be logged into Segue to use this link...</div>";
  54. print "</body</html>";
  55. link_log($auth_id, 0, $category="errors",$description="No Segue user authenticated");
  56. exit;
  57. }
  58. /******************************************************************************
  59. * Make sure a slot name is passed
  60. ******************************************************************************/
  61. if (!isset($_REQUEST[site]) || !$_REQUEST[site]) {
  62. print "<div class='error'>No Segue site name or id passed...</div>";
  63. print "</body</html>";
  64. link_log($_SESSION[aid], 0, $category="errors",$description="No Segue site id passed");
  65. exit;
  66. } else {
  67. $site_slot = $_REQUEST[site];
  68. $segue_site_id = db_get_value("slot", "FK_site", "slot_name='".addslashes($site_slot)."'");
  69. $node_id = $_REQUEST[node];
  70. }
  71. print "</div>";
  72. //exit;
  73. /******************************************************************************
  74. * Get Segue user information from Segue session array
  75. ******************************************************************************/
  76. $segue_user_id = $_SESSION[aid];
  77. $username = $_SESSION[auser];
  78. $useremail = $_SESSION[aemail];
  79. $userfname = $_SESSION[afname];
  80. $names = split(" ",$userfname);
  81. preg_match('/^(.*)\s([^\s]+)$/', $userfname, $matches);
  82. $firstname = trim($matches[1]);
  83. $lastname = trim($matches[2]);
  84. //print $firstname."<br>";;
  85. //print $lastname."<br>";
  86. //exit;
  87. /******************************************************************************
  88. * Get the Segue site title, theme and owner
  89. ******************************************************************************/
  90. $query = "
  91. SELECT
  92. site_title, site_theme, FK_createdby
  93. FROM
  94. site
  95. WHERE
  96. site_id = '".addslashes($segue_site_id)."'
  97. ";
  98. //print $query."<br>";
  99. $r = db_query($query);
  100. $a = db_fetch_assoc($r);
  101. $site_id = $segue_site_id;
  102. $site_title = $a['site_title'];
  103. $site_theme = $a['site_theme'];
  104. $segue_site_owner = $a['FK_createdby'];
  105. //print "site_title: ".$site_title."<br \>";
  106. //print "site_theme: ".$site_theme."<br \>";
  107. //print "segue_site_owner: ".$segue_site_owner."<br \>";
  108. //exit;
  109. //print "Moodle-Segue API<hr>";
  110. $cid2 = db_connect ($dbhost_link, $dbuser_link, $dbpass_link, $dbdb_link);
  111. /******************************************************************************
  112. * Check for corresponding Moodle site
  113. ******************************************************************************/
  114. if (!isset($segue_site_id) || !$segue_site_id) {
  115. print "<div class='error'>No Segue site name or id passed</div>";
  116. print "</body</html>";
  117. link_log($_SESSION[aid], 0, $category="errors",$description="No Segue site id passed");
  118. exit;
  119. } else {
  120. $query = "
  121. SELECT
  122. FK_moodle_site_id
  123. FROM
  124. segue_moodle
  125. WHERE
  126. FK_segue_site_id = '".addslashes($segue_site_id)."'
  127. ";
  128. }
  129. //print $query."<br>";
  130. $r = db_query($query);
  131. if (db_num_rows($r) > 0) {
  132. $admin_report = "linked moodle site found<br>";
  133. } else if (!isset($segue_site_owner) || !$segue_site_owner || !isset($site_title) || !$site_title || !isset($site_theme) || !site_theme) {
  134. print "<div class='error'>Data needed for this link is missing...</div>";
  135. print "</body</html>";
  136. exit;
  137. } else {
  138. $admin_report = "no linked moodle site found<br>";
  139. $query = "
  140. INSERT INTO
  141. segue_moodle
  142. SET
  143. FK_segue_site_id = '".addslashes($segue_site_id)."',
  144. site_title = '".addslashes($site_title)."',
  145. site_slot = '".addslashes($site_slot)."',
  146. site_owner_id = '".addslashes($segue_site_owner)."',
  147. site_theme = '".addslashes($site_theme)."'
  148. ";
  149. // print $query."<br>";
  150. //exit;
  151. $r = db_query($query);
  152. }
  153. /******************************************************************************
  154. * Check for corresponding Moodle user
  155. ******************************************************************************/
  156. if (!isset($segue_user_id) || !$segue_user_id) {
  157. print "<div class='error'>No Segue user id passed...</div><br>";
  158. print "</body</html>";
  159. link_log(0, $segue_site_id, $category="errors",$description="No Segue user id passed");
  160. exit;
  161. } else {
  162. $query = "
  163. SELECT
  164. user_link.system, user_link.user_id, auth_id
  165. FROM
  166. user_link
  167. INNER JOIN
  168. authentication
  169. ON
  170. FK_auth_id = auth_id
  171. WHERE
  172. authentication.system = 'segue'
  173. AND
  174. user_link.system = 'moodle'
  175. AND
  176. authentication.user_id = '".addslashes($segue_user_id)."'
  177. ";
  178. }
  179. //print $query."<br>";
  180. //exit;
  181. $r = db_query($query);
  182. /******************************************************************************
  183. * Create an auth token for validation
  184. ******************************************************************************/
  185. $auth_token = md5(time().rand(1, 1000));
  186. //print "auth_token: ".$auth_token."<hr \>";
  187. /******************************************************************************
  188. * Store the referrer so link to Segue in Moodle is more accurate
  189. * (i.e. to specific page in linked Segue where Moodle link is...)
  190. ******************************************************************************/
  191. if ($_REQUEST['referer']) {
  192. $referer = "'".addslashes($_REQUEST['referer'])."'";
  193. } else if ($_SERVER['HTTP_REFERER']
  194. && (strpos($_SERVER['HTTP_REFERER'], $cfg['full_uri']) === 0
  195. || strpos($_SERVER['HTTP_REFERER'], $cfg['classsitesurl']) === 0
  196. || strpos($_SERVER['HTTP_REFERER'], $cfg['personalsitesurl']) === 0
  197. ))
  198. {
  199. $referer = "'".addslashes($_SERVER['HTTP_REFERER'])."'";
  200. } else {
  201. $referer = "NULL";
  202. }
  203. // linked user found
  204. if (db_num_rows($r) > 0) {
  205. // print "linked moodle user found<br>";
  206. // update authentication table with new auth_token
  207. $query = "
  208. Update
  209. authentication
  210. SET
  211. auth_token = '".addslashes($auth_token)."',
  212. auth_time = NOW(),
  213. referer = ".$referer."
  214. WHERE
  215. user_id = '".addslashes($segue_user_id)."'
  216. ";
  217. // print $query."<br>";
  218. $r = db_query($query);
  219. //no linked user found
  220. } else {
  221. // print "no linked moodle user found<br>";
  222. $query = "
  223. INSERT INTO
  224. authentication
  225. SET
  226. system = 'segue',
  227. username = '".addslashes($_SESSION[auser])."',
  228. firstname = '".addslashes($firstname)."',
  229. lastname = '".addslashes($lastname)."',
  230. email = '".addslashes($_SESSION[aemail])."',
  231. user_id = '".addslashes($segue_user_id)."',
  232. auth_token = '".addslashes($auth_token)."',
  233. auth_time = NOW(),
  234. referer = ".$referer."
  235. ";
  236. // print $query."<br>";
  237. // exit;
  238. $r = db_query($query);
  239. $auth_id = lastid($r);
  240. $query = "
  241. INSERT INTO
  242. user_link
  243. SET
  244. FK_auth_id = '".addslashes($auth_id)."'
  245. ";
  246. // print $query."<br>";
  247. $r = db_query($query);
  248. }
  249. //exit;
  250. if ($_REQUEST['continue'] == "1" || $_SESSION[ltype] != "admin") {
  251. header("Location: ".$moodle_url."/segue/segue_link.php?userid=".addslashes($segue_user_id)."&siteid=".addslashes($segue_site_id)."&auth_token=".addslashes($auth_token));
  252. }
  253. /******************************************************************************
  254. * Segue Admin Report
  255. ******************************************************************************/
  256. if ($_SESSION[ltype] == "admin") {
  257. print "<div class='connection'>";
  258. print "Segue Administrator Reference<br /><br />";
  259. print "<form action='$PHP_SELF' method='post'>";
  260. print "<table align='center' cellpadding='5'>";
  261. print "";
  262. print "<tr><td>Segue Site Title:</td><td>".$site_title." (id:".$segue_site_id.")</td></tr>";
  263. print "<tr><td>Segue Site Owner:</td><td>".$_SESSION[afname]." (id:".$segue_site_owner.")</td></tr>";
  264. print "<tr><td></td></tr>";
  265. print "<tr><td>Moodle Link Status:</td><td>".$admin_report."</td></tr>";
  266. print "</table>";
  267. print "<input type='hidden' name='continue' value='1'";
  268. print "<input type='hidden' name='referer' value='".$_SERVER['HTTP_REFERER']."'>";
  269. print "<div style='text-align: right;'><input type='submit' value='Continue'></div>";
  270. print "</form>";
  271. print "</div>";
  272. exit;
  273. }
  274. function link_log($auth_id="",$site_link_id="",$category="event",$description="") {
  275. global $dbhost_link, $dbuser_link, $dbpass_link, $dbdb_link;
  276. $cid2 = db_connect ($dbhost_link, $dbuser_link, $dbpass_link, $dbdb_link);
  277. $query = "
  278. INSERT INTO
  279. logs
  280. SET
  281. FK_auth_id = '".addslashes($auth_id)."',
  282. FK_site_link = '".addslashes($site_link_id)."',
  283. category = '".addslashes($category)."',
  284. description = '".addslashes($description)."'
  285. ";
  286. //print $query;
  287. //exit;
  288. $r = db_query($query);
  289. }
  290. // function printpre($array, $return=FALSE) {
  291. // ob_start();
  292. // print "\n<pre>";
  293. // print_r($array);
  294. // print "\n</pre>";
  295. //
  296. // if ($return)
  297. // return ob_get_clean();
  298. // else
  299. // ob_end_flush();
  300. // }
  301. ?>