Browse Source

External login info : generic updateUser and newUser files getting data into external table

Noel Dieschburg 13 years ago
parent
commit
2b47354113

+ 81 - 9
main/auth/external_logininfo/newUser.php

@@ -8,6 +8,9 @@
  You also have to implements the external_get_user_info function in this file.
  */
 	require_once(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
+	require_once(api_get_path(LIBRARY_PATH).'course.lib.php');
+  define('USERINFO_TABLE', 'userinfo');
+  define('DEFAULT_PASSWORD', 'boumbalah');
 
 //TODO : Please implements this function for this module to work.
 /**
@@ -26,14 +29,67 @@
 function external_get_user_info($login, $password){
   //Those are the mandatory fields for user creation.
   //See external_add_user function for all the fields you can have.
+  if ($password != DEFAULT_PASSWORD) {
+    return false;
+  }
+  $table = USERINFO_TABLE;
+  $sql = "SELECT * from $table where username='".Database::escape_string($login)."'";
+  $result = Database::query($sql);
+
+  if (Database::num_rows($result) == 0 ) { //false password
+    return false;
+  }
+  $user_info = Database::fetch_assoc($result);
+  // User status
+  $admin = false;
+  switch($user_info['status']){
+  case 'admin': 
+    $status = COURSEMANAGER;
+    $admin = true;
+    break;
+  case 'teacher':
+    $status = COURSEMANAGER;
+    break;
+  case 'user':
+    $status = STUDENT;
+    break;
+  default:
+    $status = STUDENT;
+  }
+  // Language
+  switch($user_info['language']){
+  case 'FR' :
+    $language = 'french';
+    break;
+  case 'EN' :
+    $language = 'english';
+    break;
+  default : 
+    $language = 'english';
+    break;
+  }
+
   $u = array(
-    'firstname' => 'firstname',
-    'lastname' => 'lastname',
-    'status' => STUDENT,
-    'email' => 'email@email.em',
-    'login' => $login,
-    'password' => $password
-  );
+    'firstname' => $user_info['firstname'],
+    'lastname' => $user_info['lastname'],
+    'status' => $status,
+    'admin' => $admin,
+    'email' => $user_info['email'],
+    'login' => $user_info['username'],
+    'language' => $language,
+    'password' => DEFAULT_PASSWORD,
+    'courses' => $user_info['courses'],
+    'profile_link' => $user_info['profile_link'],
+    'worldwide_bu' => $user_info['worlwide_bu'],
+    'manager' => $user_info['manager'],
+    'country_bu' => $user_info['country_bu'],
+    'extra' => array(
+      'position_title' => $user_info['position_title'],
+      'country' => $user_info['country'],
+      'job_family' => $user_info['job_family'],
+      'update_type' => 'external_logininfo')
+    );
+
   return $u; //Please return false if user does not exist
   //return false;
 }
@@ -81,9 +137,25 @@ $user = external_get_user_info($login, $password);
 if ($user !== false && ($chamilo_uid = external_add_user($user)) !== false) {
     //log in the user
     $loginFailed = false;
-    $uidReset = true;
     $_user['user_id'] = $chamilo_uid;
-    api_session_register('_uid');
+    api_session_register('_user');
+    //Autosubscribe to courses
+    if(!empty($user['courses'])){
+      $autoSubscribe = explode('|', $user['courses']);
+      foreach ($autoSubscribe as $code) {
+        if (CourseManager::course_exists($code)) { 
+          CourseManager::subscribe_user($_user['user_id'], $code);
+        }
+      }
+    }
+    // Is User Admin ?
+    if ($user['admin']){
+			$is_platformAdmin           = true;
+      Database::query("INSERT INTO admin values ('$chamilo_uid')");
+    }
+    // Can user create course
+    $is_allowedCreateCourse     = (bool) (($user['status'] == COURSEMANAGER) or (api_get_setting('drhCourseManagerRights') and $user['status'] == SESSIONADMIN));
+
     event_login();
 } else {
 	$loginFailed = true;

+ 127 - 0
main/auth/external_logininfo/updateUser.php

@@ -0,0 +1,127 @@
+<?php //Script loaded by local.inc.php providing update user information of type external_logininfo.
+/*
+This script must not exit.
+ */
+require_once(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
+require_once(api_get_path(LIBRARY_PATH).'course.lib.php');
+define('USERINFO_TABLE', 'userinfo');
+//TODO : Please implements this function for this module to work.
+/**
+ * Gets user info from external source 
+ * @param string login
+ * @param string password
+ * @return user array with at least the following fields:
+ *       firstname
+ *       lastname
+ *       status
+ *       email
+ *       login
+ *       password
+ *   or false if no data
+ **/
+function external_get_user_info($login, $password){
+  //Those are the mandatory fields for user creation.
+  //See external_add_user function for all the fields you can have.
+  $table = USERINFO_TABLE;
+  $sql = "SELECT * from $table where username='".Database::escape_string($login)."'";
+  $result = Database::query($sql);
+
+  if (Database::num_rows($result) == 0 ) { //false password
+    return false;
+  }
+  $user_info = Database::fetch_assoc($result);
+  // User status
+  $admin = false;
+  switch($user_info['status']){
+  case 'admin': 
+    $status = COURSEMANAGER;
+    $admin = true;
+    break;
+  case 'teacher':
+    $status = COURSEMANAGER;
+    break;
+  case 'user':
+    $status = STUDENT;
+    break;
+  default:
+    $status = STUDENT;
+  }
+  // Language
+  switch($user_info['language']){
+  case 'FR' :
+    $language = 'french';
+    break;
+  case 'EN' :
+    $language = 'english';
+    break;
+  default : 
+    $language = 'english';
+    break;
+  }
+
+  $u = array(
+    'firstname' => $user_info['firstname'],
+    'lastname' => $user_info['lastname'],
+    'status' => $status,
+    'admin' => $admin,
+    'email' => $user_info['email'],
+    'login' => $user_info['username'],
+    'language' => $language,
+    'password' => DEFAULT_PASSWORD,
+    'courses' => $user_info['courses'],
+    'profile_link' => $user_info['profile_link'],
+    'worldwide_bu' => $user_info['worlwide_bu'],
+    'manager' => $user_info['manager'],
+    'country_bu' => $user_info['country_bu'],
+    'extra' => array(
+      'position_title' => $user_info['position_title'],
+      'country' => $user_info['country'],
+      'job_family' => $user_info['job_family'],
+      'update_type' => 'external_logininfo')
+    );
+
+  return $u; //Please return false if user does not exist
+}
+
+/**
+ * update user info in database
+ **/
+function external_update_user($u){
+  $updated = UserManager::update_user($u['user_id'], $u['firstname'], $u['lastname'], $u['login'], null, $u['auth_source'], $u['email'], $u['status'], $u['official_code'], $u['phone'], $u['picture_uri'], $u['expiration_date'], $u['active'], $u['creator_id'], $u['hr_dept_id'], $u['extra'], $u['language'],'');
+  if(!empty($user['courses'])){
+    $autoSubscribe = explode('|', $u['courses']);
+    foreach ($autoSubscribe as $code) {
+      if (CourseManager::course_exists($code)) { 
+        CourseManager::subscribe_user($_user['user_id'], $code);
+      }
+    }
+  }
+  // Is User Admin ?
+  if ($user['admin']){
+    $is_platformAdmin           = true;
+    Database::query("INSERT INTO admin values ('$chamilo_uid')");
+  }
+
+}
+//MAIN CODE
+
+//$uData variable is set in local.inc.php
+$user = UserManager::get_user_info_by_id($uData['user_id']);
+$new_user = external_get_user_info($login);
+$user['firstname'] = $new_user['firstname'];
+$user['lastname'] = $new_user['lastname'];
+$user['status'] = $new_user['status'];
+$user['admin'] = $new_user['admin'];
+$user['email'] = $new_user['email'];
+$user['username'] = $new_user['login'];
+$user['profile_link'] = $new_user['profile_link'];
+$user['worldwide_bu'] = $new_user['worldwide_bu'];
+$user['manager'] = $new_user['manager'];
+$user['country_bu'] = $new_user['country_bu'];
+$user['extra'] = $new_user['extra'];
+
+if ($new_user !== false) { 
+  $new_user['user_id'] = $uData['user_id'];
+  external_update_user($new_user);
+}
+?>

+ 6 - 0
main/inc/local.inc.php

@@ -294,6 +294,12 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
 
 				// Check the user's password
 				if ( ($password == $uData['password']  OR $cas_login) AND (trim($login) == $uData['username'])) {
+          require_once(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
+          $update_type = UserManager::get_extra_user_data_by_field($uData['user_id'], 'update_type');
+          $update_type= $update_type['update_type'];
+          if (!empty($extAuthSource[$update_type]['updateUser']) && file_exists($extAuthSource[$update_type]['updateUser'])) {
+            include_once($extAuthSource[$update_type]['updateUser']);
+          }
 					// Check if the account is active (not locked)
 					if ($uData['active']=='1') {
 						// Check if the expiration date has not been reached

+ 1 - 0
main/install/db_main.sql

@@ -2442,6 +2442,7 @@ CREATE TABLE legal (
 
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'legal_accept','Legal',0,0);
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'already_logged_in','Already logged in',0,0);
+INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'update_type','Update script type',0,0);
 
 --
 -- Table structure for certificate with gradebook

+ 1 - 0
main/install/migrate-db-1.8.6.2-1.8.7-pre.sql

@@ -142,6 +142,7 @@ CREATE TABLE `user_rel_event_type` (`id` int(11) NOT NULL AUTO_INCREMENT, `user_
 INSERT INTO `event_type` VALUES (1, 'course_deleted','courseDeletedTitle','courseDeletedComment'),(2,'course_created','courseCreatedTitle','courseCreatedComment'),(3,'user_deleted','userDeletedTitle','userDeletedComment'),(4,'user_created','userCreatedTitle','userCreatedComment'), (5, 'session_created','sessionCreatedTitle','sessionCreatedComment'), (6,'session_deleted','sessionDeletedTitle','sessionDeletedComment'), (7,'session_category_created','sessionCategoryCreatedTitle','sessionCategoryCreatedComment'),(8,'session_category_deleted','sessionCategoryDeletedTitle','sessionCategoryDeletedComment'),(9,'settings_changed','settingsChangedTitle','settingsChangedComment'),(10,'user_subscribed','userSubscribedTitle','userSubscribedComment'), (11,'user_unsubscribed','userUnsubscribedTitle','userUnsubscribedComment');
 INSERT INTO `event_type_message` (`id`,`event_type_id`, `language_id`, `message`,`subject`) VALUES (1,4,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été créé.\r\nEmail : %mail%\r\n\r\nBien à vous.',''),(2,1,10,'Delete formation',''),(3,2,10,'Create formation',''),(4,3,10,'Bonjour, \r\n\r\nL\'utilisateur %username% (%firstname% %lastname%) a été supprimé.\r\n\r\nBien à vous.',''),(6,5,10,'Create session test',''),(7,6,10,'Delete session',''),(8,7,10,'Create category session',''),(9,8,10,'Delete category session',''),(10,9,10,'Change setting',''),(11,10,10,'Subscribe',''),(12,11,10,'Unsubscribe','');
 INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'already_logged_in','Already logged in',0,0);
+INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) values (1, 'update_type','Update script type',0,0);
 CREATE TABLE announcement_rel_group (group_id int NOT NULL, announcement_id int NOT NULL, PRIMARY KEY (group_id, announcement_id));
 
 INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES  ('languagePriority1', NULL, 'radio', 'Languages', 'course_lang', 'LanguagePriority1Title', 'LanguagePriority1Comment', NULL, NULL, 0);