Browse Source

Added portal users limit management - only activates when set to something different from 0 - refs #4792

Yannick Warnier 12 years ago
parent
commit
14682adf1e
3 changed files with 75 additions and 40 deletions
  1. 44 33
      main/admin/user_add.php
  2. 23 2
      main/inc/lib/usermanager.lib.php
  3. 8 5
      main/install/configuration.dist.php

+ 44 - 33
main/admin/user_add.php

@@ -372,51 +372,62 @@ if( $form->validate()) {
     }
 
 		$user_id = UserManager::create_user($firstname, $lastname, $status, $email, $username, $password, $official_code, $language, $phone, $picture_uri, $auth_source, $expiration_date, $active, $hr_dept_id);
+		Security::clear_token();
+		$tok = Security::get_token();
+		if ($user_id === false) {
+			//If any error ocurred during user creation, print it (api_failureList 
+			// stores values as separate words, so rework it
+			$message = '';
+			$message_bits = explode(' ',array_pop($api_failureList));
+			foreach ($message_bits as $bit) {
+				$message .= ucfirst($bit);
+			}
+		} else {
 
-		if (!empty($picture['name'])) {
-			$picture_uri = UserManager::update_user_picture($user_id, $_FILES['picture']['name'], $_FILES['picture']['tmp_name']);
-			UserManager::update_user($user_id, $firstname, $lastname, $username, $password, $auth_source, $email, $status, $official_code, $phone, $picture_uri, $expiration_date, $active, null, $hr_dept_id, null, $language);
-		}
-
-		$extras = array();
-		foreach($user as $key => $value) {
-			if (substr($key, 0, 6) == 'extra_') { //an extra field
-				$myres = UserManager::update_extra_field_value($user_id, substr($key, 6), $value);
+ 			if (!empty($picture['name'])) {
+				$picture_uri = UserManager::update_user_picture($user_id, $_FILES['picture']['name'], $_FILES['picture']['tmp_name']);
+				UserManager::update_user($user_id, $firstname, $lastname, $username, $password, $auth_source, $email, $status, $official_code, $phone, $picture_uri, $expiration_date, $active, null, $hr_dept_id, null, $language);
 			}
-		}
 
-		if ($platform_admin) {
-			$sql = "INSERT INTO $table_admin SET user_id = '".$user_id."'";
-			Database::query($sql);
-		}
-		if (!empty($email) && $send_mail) {
-			$recipient_name = api_get_person_name($firstname, $lastname, null, PERSON_NAME_EMAIL_ADDRESS);
-			$emailsubject = '['.api_get_setting('siteName').'] '.get_lang('YourReg').' '.api_get_setting('siteName');
-
-			$sender_name = api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS);
-			$email_admin = api_get_setting('emailAdministrator');
-
-			if ($_configuration['multiple_access_urls']) {
-				$access_url_id = api_get_current_access_url_id();
-				if ($access_url_id != -1) {
-					$url = api_get_access_url($access_url_id);
-					$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $username ."\n". get_lang('Pass')." : ".stripslashes($password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $url['url'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
+			$extras = array();
+			foreach($user as $key => $value) {
+				if (substr($key, 0, 6) == 'extra_') { //an extra field
+					$myres = UserManager::update_extra_field_value($user_id, substr($key, 6), $value);
 				}
 			}
-			else {
-				$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $username ."\n". get_lang('Pass')." : ".stripslashes($password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $_configuration['root_web'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
+
+			if ($platform_admin) {
+				$sql = "INSERT INTO $table_admin SET user_id = '".$user_id."'";
+				Database::query($sql);
 			}
-			@api_mail($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin);
+			if (!empty($email) && $send_mail) {
+				$recipient_name = api_get_person_name($firstname, $lastname, null, PERSON_NAME_EMAIL_ADDRESS);
+				$emailsubject = '['.api_get_setting('siteName').'] '.get_lang('YourReg').' '.api_get_setting('siteName');
+
+				$sender_name = api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'), null, PERSON_NAME_EMAIL_ADDRESS);
+				$email_admin = api_get_setting('emailAdministrator');
+
+				if ($_configuration['multiple_access_urls']) {
+					$access_url_id = api_get_current_access_url_id();
+					if ($access_url_id != -1) {
+						$url = api_get_access_url($access_url_id);
+						$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $username ."\n". get_lang('Pass')." : ".stripslashes($password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $url['url'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
+					}
+				}
+				else {
+					$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $username ."\n". get_lang('Pass')." : ".stripslashes($password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $_configuration['root_web'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator');
+				}
+				@api_mail($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin);
+			}
+			$message = get_lang('UserAdded');
 		}
-		Security::clear_token();
 		if (isset($user['submit_plus'])) {
 			//we want to add more. Prepare report message and redirect to the same page (to clean the form)
-			$tok = Security::get_token();
-			header('Location: user_add.php?message='.urlencode(get_lang('UserAdded')).'&sec_token='.$tok);
+			header('Location: user_add.php?message='.urlencode($message).'&sec_token='.$tok);
 			exit ();
 		} else {
 			$tok = Security::get_token();
-			header('Location: user_list.php?action=show_message&message='.urlencode(get_lang('UserAdded')).'&sec_token='.$tok);
+			header('Location: user_list.php?action=show_message&message='.urlencode($message).'&sec_token='.$tok);
 			exit ();
 		}
 	}

+ 23 - 2
main/inc/lib/usermanager.lib.php

@@ -84,6 +84,23 @@ class UserManager {
 		
 		// database table definition
 		$table_user = Database::get_main_table(TABLE_MAIN_USER);
+                $access_url_id = 1;
+		if (api_get_multiple_access_url()) {		
+                  $access_url_id = api_get_current_access_url_id();
+                }
+		if ($_configuration[$access_url_id]['hosting_limit_users'] > 0) {
+                  $num = self::get_number_of_users();
+                  if ($num >= $_configuration[$access_url_id]['hosting_limit_users']) {
+                    return api_set_failure('portal users limit reached');
+                  }
+                }
+		if ($status === 1 && $_configuration[$access_url_id]['hosting_limit_teachers'] > 0) {
+                  $num = self::get_number_of_users(1);
+                  if ($num >= $_configuration[$access_url_id]['hosting_limit_teachers']) {
+                    return api_set_failure('portal teachers limit reached');
+                  }
+                }
+		
 
     	//Checking the user language
         $languages = api_get_languages();   
@@ -2364,11 +2381,15 @@ class UserManager {
 
     /**
      * Get the total count of users
+     * @param   int     Status of users to be counted
      * @return	mixed	Number of users or false on error
      */
-    public static function get_number_of_users() {
+    public static function get_number_of_users($status=0) {
         $t_u = Database::get_main_table(TABLE_MAIN_USER);
         $sql = "SELECT count(*) FROM $t_u";
+        if (is_int($status) && $status>0) {
+          $sql .= " WHERE status = $status ";
+        }
         $res = Database::query($sql);
         if (Database::num_rows($res) === 1) {
         	return (int) Database::result($res, 0, 0);
@@ -3480,4 +3501,4 @@ class UserManager {
         }
         return false;
     }
-}
+}

+ 8 - 5
main/install/configuration.dist.php

@@ -107,18 +107,21 @@ $extAuthSource["cas"]["newUser"] = $_configuration['root_sys'].$_configuration['
  * Hosting settings - Allows you to set limits to the Chamilo portal when
  * hosting it for a third party. These settings can be overwritten by an
  * optionally-loaded extension file with only the settings (no comments).
+ * The settings use an index at the first level to represent the ID of the
+ * URL in case you use multi-url (otherwise it will always use 1, which is
+ * the ID of the only URL inside the access_url table).
  */
 // Set a maximum number of users. Default (0) = no limit
-$_configuration['hosting_limit_users'] = 0;
+$_configuration[1]['hosting_limit_users'] = 0;
 // Set a maximum number of teachers. Default (0) = no limit
-$_configuration['hosting_limit_teachers'] = 0;
+$_configuration[1]['hosting_limit_teachers'] = 0;
 // Set a maximum number of courses. Default (0) = no limit
-$_configuration['hosting_limit_courses'] = 0;
+$_configuration[1]['hosting_limit_courses'] = 0;
 // Set a maximum number of sessions. Default (0) = no limit
-$_configuration['hosting_limit_sessions'] = 0;
+$_configuration[1]['hosting_limit_sessions'] = 0;
 // Set a maximum disk space used, in MB (set to 1024 for 1GB, 5120 for 5GB).
 // Default (0) = no limit
-$_configuration['hosting_limit_disk_space'] = 0;
+$_configuration[1]['hosting_limit_disk_space'] = 0;
 
 /**
  * Content Delivery Network (CDN) settings. Only use if you need a separate