PageRenderTime 58ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/class_functions/midd.inc.php

https://github.com/adamfranco/segue-1.x
PHP | 818 lines | 568 code | 126 blank | 124 comment | 121 complexity | 9ed7b5cc775f838849fcc12387fa29d9 MD5 | raw file
  1. <? /* $Id$ */
  2. // include the common class functions
  3. require_once(dirname(__FILE__)."/common.inc.php");
  4. function isclass ($class) {
  5. global $_isclass_cache;
  6. if (isset($_isclass_cache[$class]))
  7. return $_isclass_cache[$class];
  8. // Check to see if the slot is a class-type slot
  9. $SlotType = db_get_value("slot", "slot_type", "slot_name ='".addslashes($class)."'");
  10. // printpre($SlotType);
  11. // Check the name against the form of our class codes
  12. $isClass = ereg("^(([a-zA-Z]{0,})([0-9]{1,})([a-zA-Z]{0,})-([a-zA-Z]{1,})([0-9]{2}))$",$class);
  13. // If this isn't a class, but itself, but is a class group, then it is a class.
  14. if (!$isClass && isgroup($class) && $SlotType == "class")
  15. $isClass = TRUE;
  16. $_isclass_cache[$class] = $isClass;
  17. return $isClass;
  18. }
  19. /******************************************************************************
  20. * getclassstudents queries LDAP for all the students in a class
  21. ******************************************************************************/
  22. function getclassstudents($class_id) {
  23. global $cfg;
  24. $whereClassParts = getClassWhereClauseForSitename($class_id);
  25. $classes = array();
  26. $query = "
  27. SELECT
  28. ugroup_name,
  29. class_external_id,
  30. class_department,
  31. class_number,
  32. class_section,
  33. class_semester,
  34. class_year,
  35. class.FK_owner AS class_owner_id,
  36. classgroup.FK_owner AS classgroup_owner_id
  37. FROM
  38. class
  39. LEFT JOIN
  40. classgroup ON FK_classgroup = classgroup_id
  41. LEFT JOIN
  42. ugroup ON FK_ugroup = ugroup_id
  43. WHERE
  44. classgroup_name = '".addslashes($class_id)."'
  45. OR class_external_id = '".addslashes($class_id)."'
  46. OR $whereClassParts
  47. ";
  48. $r = db_query($query);
  49. while ($resultArray = db_fetch_assoc($r)) {
  50. $classes[] = array (
  51. 'class_owner_id' => $resultArray['class_owner_id'],
  52. 'classgroup_owner_id' => $resultArray['classgroup_owner_id'],
  53. 'class_id' => $resultArray['ugroup_name']
  54. );
  55. }
  56. /******************************************************************************
  57. * DB Class info: queries ugroup_user table for all users who are part
  58. * of the $class_id group
  59. ******************************************************************************/
  60. $allparticipants = array();
  61. foreach ($classes as $class_array) {
  62. $class_id = $class_array['class_id'];
  63. if ($class_array['classgroup_owner_id'])
  64. $owner_id = $class_array['classgroup_owner_id'];
  65. else
  66. $owner_id = $class_array['class_owner_id'];
  67. $ugroup_id = getClassUGroupId($class_id);
  68. $participant = array();
  69. $db_participants = array();
  70. $external_memberlist_participants = array();
  71. $participants = array();
  72. $query = "
  73. SELECT
  74. user_id,
  75. user_fname,
  76. user_uname,
  77. user_email,
  78. user_type
  79. FROM
  80. ugroup_user
  81. INNER JOIN
  82. user
  83. ON
  84. FK_user = user_id
  85. WHERE
  86. FK_ugroup = '".addslashes($ugroup_id)."'
  87. ORDER BY
  88. user_type DESC, user_uname
  89. ";
  90. // printpre($query);
  91. $r = db_query($query);
  92. while ($a = db_fetch_assoc($r)) {
  93. $participant[id] = $a[user_id];
  94. $participant[fname] = $a[user_fname];
  95. $participant[uname] = $a[user_uname];
  96. $participant[email] = $a[user_email];
  97. $participant[type] = $a[user_type];
  98. $participant[memberlist] = "db";
  99. $db_participants[$participant[id]]= $participant;
  100. }
  101. /******************************************************************************
  102. * External member list source (e.g. LDAP group member
  103. * LDAP Class info: queries LDAP for users in class group
  104. ******************************************************************************/
  105. ereg("([a-zA-Z]{0,})([0-9]{1,})([a-zA-Z]{0,})-([a-zA-Z]{1,})([0-9]{2})",$class_id,$r);
  106. $department = $r[1];
  107. $number = $r[2];
  108. $section = $r[3];
  109. $semester = $r[4];
  110. $year = $r[5];
  111. if ($semester == "f") {
  112. $semester = "Fall";
  113. } else if ($semester == "s"){
  114. $semester = "Spring";
  115. } else if ($semester == "w"){
  116. $semester = "Winter";
  117. } else if ($semester == "l"){
  118. $semester = "Summer";
  119. }
  120. /******************************************************************************
  121. * create class search dn with appropriate semester information
  122. ******************************************************************************/
  123. $ldap_search_semester = "ou=".$semester.$year.",ou=classes,ou=groups,";
  124. //printpre ($ldap_search_semester);
  125. $ldap_user = $cfg[ldap_voadmin_user_dn];
  126. $ldap_pass = $cfg[ldap_voadmin_pass];
  127. $c = ldap_connect($cfg[ldap_server]);
  128. $r = @ldap_bind($c,$ldap_user,$ldap_pass);
  129. if ($r && true) { // connected & logged in
  130. $return = array(
  131. $cfg[ldap_groupmember_attribute]
  132. );
  133. /******************************************************************************
  134. * create class search dn and filter
  135. * needs to search semester, classes, groups within base domain
  136. ******************************************************************************/
  137. $classSearchDN = $ldap_search_semester.$cfg[ldap_base_dn];
  138. //printpre ("classSearchDN: ".$classSearchDN);
  139. $classSearchFilter = "(".$cfg[ldap_groupname_attribute]."=".$class_id.")";
  140. //printpre ("classSearchFilter:".$classSearchFilter);
  141. /******************************************************************************
  142. * search ldap with search dn and filter, get results, close ldap connection
  143. * results will be list of members of group within a class within a semester
  144. ******************************************************************************/
  145. $sr = ldap_search($c,$classSearchDN,$classSearchFilter,$return);
  146. $res = ldap_get_entries($c,$sr);
  147. if ($res['count']) {
  148. $res[0] = array_change_key_case($res[0], CASE_LOWER);
  149. // print "<pre>";print_r($res);print"</pre>";
  150. $num = ldap_count_entries($c,$sr);
  151. // print "num: $num<br />";
  152. ldap_close($c);
  153. /******************************************************************************
  154. * if class found, then get groupmember attributes
  155. * these will be list of students in class
  156. ******************************************************************************/
  157. if ($num) {
  158. //$groupmembers = array();
  159. for ($i = 0; $i<$res[0][strtolower($cfg[ldap_groupmember_attribute])]['count']; $i++) {
  160. $nextmember = $res[0][strtolower($cfg[ldap_groupmember_attribute])][$i];
  161. /******************************************************************************
  162. * for each member (ie student) found, search ldap for their attributes
  163. * need, username, fullname at least
  164. * (could add group attributes which would list groups they are members of)
  165. ******************************************************************************/
  166. $c = ldap_connect($cfg[ldap_server]);
  167. $r = @ldap_bind($c,$ldap_user,$ldap_pass);
  168. if ($r && true) { // connected & logged in
  169. $return2 = array (
  170. $cfg[ldap_username_attribute],
  171. $cfg[ldap_fullname_attribute],
  172. $cfg[ldap_email_attribute],
  173. $cfg[ldap_group_attribute]
  174. );
  175. $userSearchDN = (($cfg[ldap_user_dn])?$cfg[ldap_user_dn].",":"").$cfg[ldap_base_dn];
  176. //printpre ("userSearchDN: ".$userSearchDN);
  177. //not sure user search filter below will work
  178. //search filter user in ldap.inc.php is
  179. //$searchFilter = "(".$cfg[ldap_username_attribute]."=".$name.")";
  180. $userSearchFilter = "(".$nextmember.")";
  181. $userSearchFilter = eregi_replace("(,)\s?".$userSearchDN,"", $userSearchFilter);
  182. $userSearchFilter = str_replace("\\", "", $userSearchFilter);
  183. //printpre($userSearchFilter);
  184. // search ldap with filter set to full name...
  185. //$sr2 = ldap_search($c,$userSearchDN,$userSearchFilter,$return2);
  186. //print "<hr />";
  187. //printpre("$sr2 = ldap_search($c :: $userSearchDN :: $userSearchFilter :: $return2);");
  188. //printpre($return2);
  189. $sr2 = ldap_search($c,$userSearchDN,$userSearchFilter,$return2);
  190. $res2 = ldap_get_entries($c,$sr2);
  191. //printpre($res2);
  192. $res2[0] = array_change_key_case($res2[0], CASE_LOWER);
  193. //printpre($cfg[ldap_fullname_attribute]);
  194. $num = ldap_count_entries($c,$sr);
  195. ldap_close($c);
  196. $participant = array();
  197. if ($num) {
  198. //printpre($cfg[ldap_username_attribute]);
  199. $participant[id] = 0;
  200. $participant[fname] = $res2[0][strtolower($cfg[ldap_fullname_attribute])][0];
  201. $participant[uname] = $res2[0][strtolower($cfg[ldap_username_attribute])][0];
  202. $participant[email] = $res2[0][strtolower($cfg[ldap_email_attribute])][0];
  203. $participant[memberlist] = "external";
  204. // printpre("uname: ".$participant[uname]);
  205. $areprof = 0;
  206. if (is_array($res2[0][strtolower($cfg[ldap_group_attribute])])) {
  207. $isProfSearchString = implode("|", $cfg[ldap_prof_groups]);
  208. foreach ($res2[0][strtolower($cfg[ldap_group_attribute])] as $item) {
  209. if (eregi($isProfSearchString,$item)) {
  210. $areprof=1;
  211. }
  212. }
  213. }
  214. $participant[type] = ($areprof)?"prof":"stud";
  215. //$student[email] = $res2[0][strtolower($cfg[ldap_email_attribute])][0];
  216. //printpre("found ".$studentname);
  217. }
  218. } // end if
  219. $external_memberlist_participant_unames[]= $participant[uname];
  220. $external_memberlist_participants[$participant[uname]]= $participant;
  221. } //end for loop
  222. } // end num
  223. }// end result count
  224. } // ends if bind
  225. $external_memberlist_participant_unames = array();
  226. $external_memberlist_participant_unames = array_unique($external_memberlist_participant_unames);
  227. /******************************************************************************
  228. * Check to see if $external_memberlist_participant are already in database
  229. * if not add them to database
  230. ******************************************************************************/
  231. foreach (array_keys($external_memberlist_participants) as $key) {
  232. $student_uname = $external_memberlist_participants[$key][uname];
  233. //printpre ($cfg[auth_mods]);
  234. //$cfg[auth_mods]
  235. $valid = 0;
  236. foreach ($cfg[auth_mods] as $_auth) {
  237. $func = "_valid_".$_auth;
  238. //printpre ("<br />AUTH: trying ".$_auth ."..."); //debug
  239. if ($x = $func($student_uname,"",1)) {
  240. $valid = 1;
  241. break;
  242. }
  243. }
  244. }
  245. /******************************************************************************
  246. * Compile definitive participant list from:
  247. * $db_participants = all group members whose membership is defined in ugroup_user
  248. * $external_memberlist_participants = all group members whose membership is
  249. * determined by an external membership list (e.g. ldap group)
  250. * if participant is in ugroup_user only then memberlist is db
  251. * if participant is in external member list only then memberlist is external
  252. * if participant is in both ugroup_user and external member list then
  253. * member list is external
  254. ******************************************************************************/
  255. $participants = $external_memberlist_participants;
  256. $participants_unames = $external_memberlist_participant_unames;
  257. foreach (array_keys($db_participants) as $key) {
  258. if (!in_array($db_participants[$key][uname], $external_memberlist_participant_unames)) {
  259. $participants[$db_participants[$key][uname]] = $db_participants[$key];
  260. $participants_unames = $db_participants[$key][uname];
  261. }
  262. }
  263. /******************************************************************************
  264. * add participants of current class to array of participants from all classes
  265. * (relevant when a site is a group of classes...)
  266. ******************************************************************************/
  267. $allparticipants = array_merge($allparticipants,$participants);
  268. }
  269. //return $participants;
  270. return $allparticipants;
  271. }
  272. function getuserclasses($user,$time="all") {
  273. $user = strtolower($user);
  274. global $cfg;
  275. $ldap_user = $cfg[ldap_voadmin_user_dn];
  276. $ldap_pass = $cfg[ldap_voadmin_pass];
  277. $classes = array();
  278. if (!$user)
  279. return $classes;
  280. $c = ldap_connect($cfg[ldap_server]);
  281. $r = @ldap_bind($c,$ldap_user,$ldap_pass);
  282. if ($r && true) { // connected & logged in
  283. $return = array(
  284. $cfg[ldap_username_attribute],
  285. $cfg[ldap_fullname_attribute],
  286. $cfg[ldap_email_attribute],
  287. $cfg[ldap_group_attribute]
  288. );
  289. $userSearchDN = (($cfg[ldap_user_dn])?$cfg[ldap_user_dn].",":"").$cfg[ldap_base_dn];
  290. $searchFilter = "(".$cfg[ldap_username_attribute]."=".$user.")";
  291. $sr = ldap_search($c,$userSearchDN,$searchFilter,$return);
  292. $res = ldap_get_entries($c,$sr);
  293. if ($res['count']) {
  294. $res[0] = array_change_key_case($res[0], CASE_LOWER);
  295. // print "<pre>";print_r($res);print"</pre>";
  296. $num = ldap_count_entries($c,$sr);
  297. // print "num: $num<br />";
  298. ldap_close($c);
  299. if ($num) {
  300. for ($i = 0; $i<$res[0][strtolower($cfg[ldap_group_attribute])]['count']; $i++) {
  301. $f = $res[0][strtolower($cfg[ldap_group_attribute])][$i];
  302. // print "$f<br />";
  303. $parts = explode(",",$f);
  304. foreach ($parts as $p) {
  305. if (eregi($cfg[ldap_groupname_attribute]."=([a-zA-Z]{0,4})([0-9]{1,4})([a-zA-Z]{0,1})-([a-zA-Z]{1,})([0-9]{2})",$p,$r)) {
  306. // print "goood!";
  307. $semester = currentsemester ();
  308. /* print "<pre>"; */
  309. /* print_r($r); */
  310. /* print "</pre>"; */
  311. $class = $r[1].$r[2].$r[3]."-".$r[4].$r[5];
  312. /******************************************************************************
  313. * update the classes table with the ldap information
  314. ******************************************************************************/
  315. $sem = $r[4];
  316. $year = $r[5];
  317. $user_id = db_get_value("user","user_id","user_uname = '".addslashes($user)."'");
  318. $ugroup_id = db_get_value("ugroup","ugroup_id","ugroup_name='".addslashes($class)."'");
  319. $classinfo = db_get_line("class","
  320. class_department='".addslashes($r[1])."' AND
  321. class_number='".addslashes($r[2])."' AND
  322. class_section='".addslashes($r[3])."' AND
  323. class_semester='".addslashes($sem)."' AND
  324. class_year='20".addslashes($r[5])."'");
  325. if (!$ugroup_id) {
  326. $query = "
  327. INSERT INTO
  328. ugroup
  329. SET
  330. ugroup_name = '".addslashes($class)."',
  331. ugroup_type = 'class'
  332. ";
  333. db_query($query);
  334. $ugroup_id = lastid();
  335. }
  336. if (!$classinfo) {
  337. $query = "
  338. INSERT INTO
  339. class
  340. SET
  341. class_external_id='".addslashes($class)."',
  342. class_department='".addslashes($r[1])."',
  343. class_number='".addslashes($r[2])."',
  344. class_section='".addslashes($r[3])."',
  345. class_semester='".addslashes($sem)."',
  346. class_year='20".addslashes($r[5])."',
  347. class_name='',
  348. FK_owner=NULL,
  349. FK_ugroup='".addslashes($ugroup_id)."'
  350. ";
  351. db_query($query);
  352. }
  353. $ugroup_userinfo = db_get_line("ugroup_user","FK_ugroup='".addslashes($ugroup_id)."' AND FK_user='".addslashes($user_id)."'");
  354. if (!$ugroup_userinfo) {
  355. $query = "
  356. INSERT INTO
  357. ugroup_user
  358. SET
  359. FK_ugroup = '".addslashes($ugroup_id)."',
  360. FK_user = '".addslashes($user_id)."'
  361. ";
  362. db_query($query);
  363. }
  364. /******************************************************************************
  365. * end update
  366. ******************************************************************************/
  367. if ($time == "now" && isSemesterNow($r[4], $r[5])) {
  368. $classes[$class] = array("code"=>"$r[1]$r[2]","sect"=>$r[3],"sem"=>$r[4],"year"=>$r[5]);
  369. } else if ($time == "past" && isSemesterPast($r[4], $r[5])) {
  370. $classes[$r[1].$r[2].$r[3]."-".$r[4].$r[5]] = array("code"=>"$r[1]$r[2]","sect"=>$r[3],"sem"=>$r[4],"year"=>$r[5]);
  371. } else if ($time == "future" && isSemesterFuture($r[4], $r[5])) {
  372. $classes[$r[1].$r[2].$r[3]."-".$r[4].$r[5]] = array("code"=>"$r[1]$r[2]","sect"=>$r[3],"sem"=>$r[4],"year"=>$r[5]);
  373. } else if ($time == "all") {
  374. $classes[$r[1].$r[2].$r[3]."-".$r[4].$r[5]] = array("code"=>"$r[1]$r[2]","sect"=>$r[3],"sem"=>$r[4],"year"=>$r[5]);
  375. }
  376. /******************************************************************************
  377. * if not a class group then get group name and add to ugroup table
  378. ******************************************************************************/
  379. } else if (eregi('^'.$cfg[ldap_groupname_attribute].'=(.+)$', $p, $matches)) {
  380. $group_name = $matches[1];
  381. $user_id = db_get_value("user","user_id","user_uname = '".addslashes($user)."'");
  382. $ugroup_id = db_get_value("ugroup","ugroup_id","ugroup_name='".addslashes($group_name)."'");
  383. /******************************************************************************
  384. * insert group_name into ugroup table with group if not already in table
  385. ******************************************************************************/
  386. if (!$ugroup_id) {
  387. $query = "
  388. INSERT INTO
  389. ugroup
  390. SET
  391. ugroup_name = '".addslashes($group_name)."',
  392. ugroup_type = 'other'
  393. ";
  394. //printpre($query);
  395. db_query($query);
  396. $ugroup_id = lastid();
  397. }
  398. /******************************************************************************
  399. * if user not part of group then add to ugroup_user table
  400. ******************************************************************************/
  401. $ugroup_userinfo = db_get_line("ugroup_user","FK_ugroup='".addslashes($ugroup_id)."' AND FK_user='".addslashes($user_id)."'");
  402. if (!$ugroup_userinfo) {
  403. $query = "
  404. INSERT INTO
  405. ugroup_user
  406. SET
  407. FK_ugroup = '".addslashes($ugroup_id)."',
  408. FK_user = '".addslashes($user_id)."'
  409. ";
  410. //printpre($query);
  411. db_query($query);
  412. }
  413. /******************************************************************************
  414. * get other members of this ugroup and add to ugroup_user table
  415. * (this may not be necessary since users will be added when they log in...)
  416. ******************************************************************************/
  417. }
  418. }
  419. }
  420. }
  421. }
  422. }
  423. // add in the DB classes
  424. $query = "
  425. SELECT
  426. class_department,
  427. class_number,
  428. class_section,
  429. class_semester,
  430. class_year
  431. FROM
  432. user
  433. INNER JOIN
  434. ugroup_user
  435. ON
  436. user_id = FK_user
  437. INNER JOIN
  438. class
  439. ON
  440. class.FK_ugroup = ugroup_user.FK_ugroup
  441. WHERE
  442. user_uname = '".addslashes($user)."'
  443. ";
  444. $semester = currentsemester ();
  445. $r = db_query($query);
  446. while ($a = db_fetch_assoc($r)) {
  447. $class_code = generateCodeFromData($a[class_department],$a[class_number],$a[class_section],$a[class_semester],$a[class_year]);
  448. if (!$classes[$class_code]) {
  449. if ($time == "now" && isSemesterNow($a[class_semester], $a[class_year])) {
  450. $classes[$class_code] = array("code"=>"$class_code","sect"=>$a[class_section],"sem"=>$a[class_semester],"year"=>$a[class_year]);
  451. } else if ($time == "past" && isSemesterPast($a[class_semester], $a[class_year])) {
  452. $classes[$class_code] = array("code"=>"$class_code","sect"=>$a[class_section],"sem"=>$a[class_semester],"year"=>$a[class_year]);
  453. } else if ($time == "future" && isSemesterFuture($a[class_semester], $a[class_year])) {
  454. $classes[$class_code] = array("code"=>"$class_code","sect"=>$a[class_section],"sem"=>$a[class_semester],"year"=>$a[class_year]);
  455. } else if ($time == "all") {
  456. $classes[$class_code] = array("code"=>"$class_code","sect"=>$a[class_section],"sem"=>$a[class_semester],"year"=>$a[class_year]);
  457. }
  458. }
  459. }
  460. return $classes;
  461. }
  462. function getusergroups($user) {
  463. global $cfg;
  464. $user = strtolower($user);
  465. //printpre($user);
  466. if (!$user)
  467. return array();
  468. $groups = array();
  469. $user_id = db_get_value("user","user_id","user_uname = '".addslashes($user)."'");
  470. $query = "
  471. SELECT
  472. ugroup_id, ugroup_name
  473. FROM
  474. ugroup
  475. INNER JOIN
  476. ugroup_user
  477. ON
  478. FK_ugroup = ugroup_id
  479. WHERE
  480. FK_user = '".addslashes($user_id)."'
  481. ";
  482. //printpre($query);
  483. $r = db_query($query);
  484. while ($a = db_fetch_assoc($r)) {
  485. $groups[] = $a[ugroup_name];
  486. }
  487. return $groups;
  488. }
  489. function generateCourseCode($id) {
  490. $query = "
  491. SELECT
  492. class_department,
  493. class_number,
  494. class_section,
  495. class_semester,
  496. class_year
  497. FROM
  498. class
  499. WHERE
  500. class_id = '".addslashes($id)."'
  501. ";
  502. $r = db_query($query);
  503. $a = db_fetch_assoc($r);
  504. $code = $a[class_department].$a[class_number].$a[class_section]."-".$a[class_semester].substr($a[class_year],2);
  505. return $code;
  506. }
  507. function generateCodeFromData($dept,$number,$section,$semester,$year,$ext_id="",$owner="") {
  508. $code = $dept.$number.$section."-".$semester.substr($year,2);
  509. return $code;
  510. }
  511. function generateTermsFromCode($code) {
  512. ereg("([a-zA-Z]{0,})([0-9]{1,})([a-zA-Z]{0,})-([a-zA-Z]{1,})([0-9]{2})",$code,$r);
  513. $department = $r[1];
  514. $number = $r[2];
  515. $section = $r[3];
  516. $semester = $r[4];
  517. $year = "20".$r[5];
  518. $terms = "
  519. class_department='".addslashes($department)."' AND
  520. class_number='".addslashes($number)."' AND
  521. class_section='".addslashes($section)."' AND
  522. class_semester='".addslashes($semester)."' AND
  523. class_year='".addslashes($year)."'
  524. ";
  525. return $terms;
  526. }
  527. //This function checks for non-Segue sites (those in web courses database created in course folders)
  528. function coursefoldersite($cl) {
  529. global $cfg;
  530. if (!$cfg[coursefolders_host])
  531. return null;
  532. db_connect($cfg[coursefolders_host],$cfg[coursefolders_username],$cfg[coursefolders_password],$cfg[coursefolders_db]);
  533. if (ereg("([a-zA-Z]{2})([0-9]{3})([a-zA-Z]{0,1})-([a-zA-Z]{1,})([0-9]{2})",$cl,$regs)) {
  534. $class = $regs[1].$regs[2].$regs[3];
  535. $curr_semester = $regs[4];
  536. if ($curr_semester == "f") {
  537. $semester = "Fall";
  538. } else if ($curr_semester == "s"){
  539. $semester = "Spring";
  540. } else if ($curr_semester == "w"){
  541. $semester = "Winter";
  542. } else if ($curr_semester == "l"){
  543. $semester = "Summer";
  544. }
  545. $curr_year = $regs[5];
  546. if ($curr_year > 95) {
  547. $year = "19".$curr_year;
  548. } else {
  549. $year = "20".$curr_year;
  550. }
  551. }
  552. $query = ("
  553. select
  554. *
  555. from
  556. ".$cfg[coursefolders_table]."
  557. where
  558. ".$cfg[coursefolders_coursecode_column]." = '".addslashes($class)."'
  559. and ".$cfg[coursefolders_semester_column]." = '".addslashes($semester)."'
  560. and ".$cfg[coursefolders_year_column]." = '".addslashes($year)."'"
  561. );
  562. $r = db_query($query);
  563. if (db_num_rows($r)) {
  564. $a = db_fetch_assoc($r);
  565. $title = $a[$cfg[coursefolders_title_column]];
  566. $url = $a[$cfg[coursefolders_url_column]];
  567. $site_info = array('title' => $title, 'url' => $url);
  568. return $site_info;
  569. }
  570. }
  571. function ldapfname($uname) {
  572. $uname = strtolower($uname);
  573. if (isgroup($uname)) return "Students in group";
  574. if (isclass($uname)) return "Students in class";
  575. if ($fname = db_get_value("user","user_fname","user_uname='".addslashes($uname)."'")) return $fname;
  576. $r = userlookup($uname,LDAP_USER,LDAP_EXACT,LDAP_LASTNAME,1);
  577. return $r[$uname];
  578. }
  579. define("LDAP_USER",1);
  580. define("LDAP_FNAME",2);
  581. define("LDAP_BOTH",3);
  582. define("LDAP_WILD",1);
  583. define("LDAP_EXACT",0);
  584. define("LDAP_LASTNAME",0);
  585. define("LDAP_FIRSTNAME",1);
  586. function userlookup($name,$type=LDAP_BOTH,$wild=LDAP_WILD,$n=LDAP_LASTNAME,$lc=0,$extra=false) {
  587. $name = strtolower($name);
  588. global $cfg;
  589. $ldap_user = $cfg[ldap_voadmin_user_dn];
  590. $ldap_pass = $cfg[ldap_voadmin_pass];
  591. $wc = ($wild==LDAP_WILD)?"*":"";
  592. $c = ldap_connect($cfg[ldap_server]);
  593. $r = ldap_bind($c,$ldap_user,$ldap_pass);
  594. if ($r) {
  595. $return = array(
  596. $cfg[ldap_username_attribute],
  597. $cfg[ldap_fullname_attribute]
  598. );
  599. if ($extra) {
  600. $return[] = $cfg[ldap_email_attribute];
  601. $return[] = $cfg[ldap_group_attribute];
  602. }
  603. $dn = (($cfg[ldap_user_dn])?$cfg[ldap_user_dn].",":"").$cfg[ldap_base_dn];
  604. if ($type == LDAP_USER) $filter = $cfg[ldap_username_attribute]."=$wc$name$wc";
  605. if ($type == LDAP_FNAME) $filter = $cfg[ldap_fullname_attribute]."=$wc$name$wc";
  606. if ($type == LDAP_BOTH) $filter = "(|(".$cfg[ldap_username_attribute]."=$wc$name$wc)(".$cfg[ldap_fullname_attribute]."=$wc$name$wc))";
  607. $sr = ldap_search($c,$dn,$filter,$return);
  608. $res = ldap_get_entries($c,$sr);
  609. if ($res['count']) {
  610. $res[0] = array_change_key_case($res[0], CASE_LOWER);
  611. $num = ldap_count_entries($c,$sr);
  612. ldap_close($c);
  613. /* print "<pre>"; */
  614. /* print_r($res); */
  615. /* print "</pre>"; */
  616. if ($num) {
  617. $usernames = array();
  618. for ($i = 0; $i<$res['count'];$i++) {
  619. $uid = $res[$i][strtolower($cfg[ldap_username_attribute])][0];
  620. $fname = $res[$i][strtolower($cfg[ldap_fullname_attribute])][0];
  621. if (!ereg(",",$fname) && !$n) {
  622. $vars = split(" ",$fname);
  623. if (count($vars) == 2)
  624. $fname = $vars[1] . ", " . $vars[0];
  625. if (count($vars) == 3)
  626. $fname = $vars[2] . ", " . $vars[0] . " " . $vars[1]; // for Gabriel B. Schine names
  627. }
  628. // $res[$i]['cn'][0] = $fname;
  629. if ($extra) {
  630. // we must find out if they are a professor or a student.
  631. $areprof = false;
  632. if (is_array($res[0][strtolower($cfg[ldap_group_attribute])])) {
  633. $isProfSearchString = implode("|", $cfg[ldap_prof_groups]);
  634. foreach ($res[0][strtolower($cfg[ldap_group_attribute])] as $item) {
  635. if (eregi($isProfSearchString,$item)) {
  636. $areprof=1;
  637. }
  638. }
  639. }
  640. $userType = ($areprof)?"prof":"stud";
  641. $usernames[strtolower($uid)] = array($fname,$res[$i][strtolower($cfg[ldap_email_attribute])][0],$userType);
  642. }
  643. else $usernames[strtolower($uid)] = $fname;
  644. }
  645. }
  646. }
  647. }
  648. /******************************************************************************
  649. * add in the db users
  650. ******************************************************************************/
  651. $query = "
  652. SELECT
  653. user_uname,
  654. user_fname
  655. FROM
  656. user
  657. WHERE
  658. user_uname LIKE '%".addslashes($name)."%'
  659. OR
  660. user_fname LIKE '%".addslashes($name)."%'
  661. ";
  662. global $dbhost, $dbuser,$dbpass, $dbdb;
  663. db_connect($dbhost, $dbuser, $dbpass, $dbdb);
  664. $r = db_query($query);
  665. $db_users = array();
  666. while ($a = db_fetch_assoc($r)) {
  667. $db_users[$a[user_uname]] = $a[user_fname];
  668. }
  669. /******************************************************************************
  670. * add in the ugroups
  671. ******************************************************************************/
  672. $query = "
  673. SELECT
  674. ugroup_name
  675. FROM
  676. ugroup
  677. WHERE
  678. ugroup_name LIKE '%".addslashes($name)."%'
  679. ";
  680. $r = db_query($query);
  681. $ugroups = array();
  682. while ($a = db_fetch_assoc($r)) {
  683. $ugroups[$a[ugroup_name]] = $a[ugroup_name]." (Group)";
  684. }
  685. $usernames = array_merge($db_users,$usernames,$ugroups);
  686. if ($lc && $usernames) {
  687. foreach ($usernames as $u=>$f)
  688. $usernames[strtoupper($u)] = $usernames[strtolower($u)] = $f;
  689. }
  690. return $usernames;
  691. }
  692. ?>