Kaynağa Gözat

Adding export, import in usergroups see #4071

Julio Montoya 12 yıl önce
ebeveyn
işleme
b4397d5ec7

+ 43 - 0
main/admin/usergroup_export.php

@@ -0,0 +1,43 @@
+<?php
+/* For licensing terms, see /license.txt */
+/**
+ *	@package chamilo.admin
+ */
+/**
+ * Code
+ */
+// name of the language file that needs to be included
+$language_file = 'admin';
+
+$cidReset = true;
+
+require_once '../inc/global.inc.php';
+$this_section = SECTION_PLATFORM_ADMIN;
+
+api_protect_admin_script();
+require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
+require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
+
+$tool_name = get_lang('Export');
+
+$interbreadcrumb[] = array ("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
+$interbreadcrumb[] = array ('url' => 'usergroups.php', 'name' => get_lang('Classes'));
+
+set_time_limit(0);
+
+$form = new FormValidator('export_users');
+$form->addElement('header',  $tool_name);
+$form->addElement('style_submit_button', 'submit',get_lang('Export'),'class="save"');
+
+if ($form->validate()) {
+    $user_group = new UserGroup;
+    $header = array(array('name', 'description'));
+	$data = $user_group->get_all_for_export();    
+    $data = array_merge($header, $data);    
+    $filename = 'export_classes_'.date('Y-m-d_H-i-s');    
+    Export::export_table_csv($data,$filename);
+
+}
+Display :: display_header($tool_name);
+$form->display();
+Display :: display_footer();

+ 118 - 0
main/admin/usergroup_import.php

@@ -0,0 +1,118 @@
+<?php
+/* For licensing terms, see /license.txt */
+/**
+*	@package chamilo.admin
+*/
+/**
+ * Code
+*   This     tool allows platform admins to add classes by uploading a CSV file
+* @todo Add some langvars to DLTT
+*/
+
+/**
+ * Validates imported data.
+ */
+function validate_data($classes) {
+    $errors = array();
+     $usergroup = new UserGroup();
+    foreach ($classes as $index => $class) {
+        // 1. Check wheter ClassName is available.
+        if (!isset($class['name']) || strlen(trim($class['name'])) == 0) {
+            $class['line'] = $index + 2;
+            $class['error'] = get_lang('MissingClassName');
+            $errors[] = $class;
+        }
+        // 2. Check whether class doesn't exist yet.
+        else {            
+            if ($usergroup->usergroup_exists($class['name'])) {
+                $class['line'] = $index + 2;
+                $class['error'] = get_lang('ClassNameExists').' <strong>'.$class['ClassName'].'</strong>';
+                $errors[] = $class;
+            }
+        }
+    }
+    return $errors;
+}
+
+/**
+ * Save imported class data to database
+ */
+function save_data($classes) {
+    $number_of_added_classes = 0;
+    $usergroup = new UserGroup();
+    var_dump($classes);
+    foreach ($classes as $index => $class) {
+        $id = $usergroup->save($class);
+        if ($id) {
+            $number_of_added_classes++;
+        }
+    }
+    return $number_of_added_classes;
+}
+
+// Language files that should be included.
+$language_file = array ('admin', 'registration');
+
+// Resetting the course id.
+$cidReset = true;
+
+// Including some necessary dokeos files.
+include '../inc/global.inc.php';
+require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
+require_once api_get_path(LIBRARY_PATH).'import.lib.php';
+
+// Setting the section (for the tabs).
+$this_section = SECTION_PLATFORM_ADMIN;
+
+// Access restrictions.
+api_protect_admin_script();
+
+// setting breadcrumbs
+$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
+$interbreadcrumb[] = array ('url' => 'usergroups.php', 'name' => get_lang('Classes'));
+
+// Database Table Definitions
+
+// Setting the name of the tool.
+$tool_name = get_lang('ImportClassListCSV');
+
+// Displaying the header.
+Display :: display_header($tool_name);
+
+set_time_limit(0);
+
+$form = new FormValidator('import_classes');
+$form->addElement('file', 'import_file', get_lang('ImportCSVFileLocation'));
+$form->addElement('style_submit_button', 'submit', get_lang('Import'), 'class="save"');
+
+if ($form->validate()) {
+    $classes = Import::csv_to_array($_FILES['import_file']['tmp_name']);
+    $errors = validate_data($classes);
+    if (count($errors) == 0) {
+        $number_of_added_classes = save_data($classes);
+        Display::display_normal_message($number_of_added_classes.' '.get_lang('Added'));
+    } else {
+        $error_message = get_lang('ErrorsWhenImportingFile');
+        $error_message .= '<ul>';
+        foreach ($errors as $index => $error_class) {
+            $error_message .= '<li>'.$error_class['error'].' ('.get_lang('Line').' '.$error_class['line'].')';
+            $error_message .= '</li>';
+        }
+        $error_message .= '</ul>';
+        $error_message .= get_lang('Error');
+        Display :: display_error_message($error_message);
+    }
+}
+
+$form->display();
+?>
+<p><?php echo get_lang('CSVMustLookLike').' ('.get_lang('MandatoryFields').')'; ?> :</p>
+
+<blockquote>
+  <b>name;description</b>  <br />
+  User group 1;My user group 1
+</blockquote>
+<?php
+
+// Displaying the footer.
+Display :: display_footer();

+ 4 - 0
main/inc/lib/model.lib.php

@@ -89,6 +89,10 @@ class Model {
         return Database::select('*', $this->table, $options);
     }
     
+    public function get_all_for_export($options = null) {
+        return Database::select('name, description', $this->table, $options);
+    }
+    
     /**
      * Get the count of elements
      */

+ 51 - 60
main/install/update-db-1.8.8-1.9.0.inc.php

@@ -67,10 +67,12 @@ if (defined('SYSTEM_INSTALLATION')) {
          * Update the databases "pre" migration
          */
         include '../lang/english/create_course.inc.php';
+        
         if ($languageForm != 'english') {
             // languageForm has been escaped in index.php
             include '../lang/'.$languageForm.'/create_course.inc.php';
         }
+        
         // Get the main queries list (m_q_list)
         $m_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'main');
         
@@ -98,6 +100,14 @@ if (defined('SYSTEM_INSTALLATION')) {
                 }
             }
         }
+        
+        if (INSTALL_TYPE_UPDATE == 'update') {
+            $session_mod = api_get_setting('use_session_mode');
+            if ($session_mod == 'false') {
+                
+            }
+        }
+        
 
         // Get the stats queries list (s_q_list)
         $s_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'stats');
@@ -167,23 +177,6 @@ if (defined('SYSTEM_INSTALLATION')) {
 	        iDatabase::select_db($dbNameForm);
         }
         
-        //Renaming user tables in the main DB
-        $user_tables = array(
-            'personal_agenda',
-            'personal_agenda_repeat',
-            'personal_agenda_repeat_not',
-            'user_course_category',
-        );
-                
-        if ($dbNameForm != $dbUserForm) {
-        	Database::select_db($dbUserForm);
-	        foreach ($user_tables as $table) {
-	        	$sql = "ALTER TABLE $dbUserForm.$table RENAME $dbNameForm.$table";
-	        	Database::query($sql);
-	        }
-	        Database::select_db($dbNameForm);
-        }
-        
         // Get the user queries list (u_q_list)
         $u_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'user');
         
@@ -213,8 +206,8 @@ if (defined('SYSTEM_INSTALLATION')) {
             }
         }
         
-        //Moving User DB to the main database
-        $users_table = array(
+        //Moving user database to the main database
+        $users_tables = array(
         			"personal_agenda",
         			"personal_agenda_repeat",
         			"personal_agenda_repeat_not",
@@ -223,12 +216,12 @@ if (defined('SYSTEM_INSTALLATION')) {
         
         if ($dbNameForm != $dbUserForm) {
         	iDatabase::select_db($dbUserForm);
-        	foreach($users_table as $table) {
+        	foreach ($users_tables as $table) {
         		$sql = "ALTER TABLE $dbUserForm.$table RENAME  $dbNameForm.$table";
         		iDatabase::query($sql);
         	}
         	iDatabase::select_db($dbNameForm);
-        }                
+        }
     }    
     
     //Adding admin user in the access_url_rel_user  table
@@ -251,44 +244,6 @@ if (defined('SYSTEM_INSTALLATION')) {
     if ($singleDbForm) {
         $prefix =  get_config_param('table_prefix');
     }
-    
-    function check_work($folder_id, $work_url, $work_table, $base_work_dir) {            
-        $uniq_id = uniqid();
-        //Looking for subfolders
-        $sql 	= "SELECT * FROM $work_table WHERE parent_id = $folder_id AND filetype ='folder'";             
-        $result = Database::query($sql);
-
-        if (Database::num_rows($result)) {
-            while ($row = Database::fetch_array($result, 'ASSOC')) {
-                check_work($row['id'], $row['url'], $work_table, $base_work_dir);
-            }
-        }
-        
-        //Moving the subfolder in the root
-        $new_url = '/'.basename($work_url).'_mv_'.$uniq_id;              
-        $new_url = Database::escape_string($new_url);
-        $sql = "UPDATE $work_table SET url = '$new_url', parent_id = 0 WHERE id = $folder_id";
-        iDatabase::query($sql);
-        
-        if (is_dir($base_work_dir.$work_url)) {
-            rename($base_work_dir.$work_url, $base_work_dir.$new_url);
-            
-            //Rename all files inside the folder                        
-            $sql 	= "SELECT * FROM $work_table WHERE parent_id = $folder_id AND filetype ='file'";             
-            $result = Database::query($sql);
-            
-            if (Database::num_rows($result)) {
-                while ($row = Database::fetch_array($result, 'ASSOC')) {                                
-                    $new_url = "work".$new_url.'/'.basename($row['url']);     
-                    $new_url = Database::escape_string($new_url);
-                    $sql = "UPDATE $work_table SET url = '$new_url', parent_id = $folder_id, contains_file = '1' WHERE id = {$row['id']}";                                
-                    iDatabase::query($sql);
-                }
-            }
-        }
-        
-        
-    }
 
     // Get the courses databases queries list (c_q_list)
     $c_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-pre.sql', 'course');
@@ -452,7 +407,7 @@ if (defined('SYSTEM_INSTALLATION')) {
                                 check_work($folder_id, $work_folder['url'], $work_table, $base_work_dir);                                
                             }
                         }
-                    }                    
+                    }         
                     
                     /*  End of work fix  */
                  
@@ -622,4 +577,40 @@ if (defined('SYSTEM_INSTALLATION')) {
     }
 } else {
     echo 'You are not allowed here !';
+}
+
+function check_work($folder_id, $work_url, $work_table, $base_work_dir) {
+    $uniq_id = uniqid();
+    //Looking for subfolders
+    $sql 	= "SELECT * FROM $work_table WHERE parent_id = $folder_id AND filetype ='folder'";             
+    $result = Database::query($sql);
+
+    if (Database::num_rows($result)) {
+        while ($row = Database::fetch_array($result, 'ASSOC')) {
+            check_work($row['id'], $row['url'], $work_table, $base_work_dir);
+        }
+    }
+
+    //Moving the subfolder in the root
+    $new_url = '/'.basename($work_url).'_mv_'.$uniq_id;              
+    $new_url = Database::escape_string($new_url);
+    $sql = "UPDATE $work_table SET url = '$new_url', parent_id = 0 WHERE id = $folder_id";
+    iDatabase::query($sql);
+
+    if (is_dir($base_work_dir.$work_url)) {
+        rename($base_work_dir.$work_url, $base_work_dir.$new_url);
+
+        //Rename all files inside the folder                        
+        $sql 	= "SELECT * FROM $work_table WHERE parent_id = $folder_id AND filetype ='file'";             
+        $result = Database::query($sql);
+
+        if (Database::num_rows($result)) {
+            while ($row = Database::fetch_array($result, 'ASSOC')) {                                
+                $new_url = "work".$new_url.'/'.basename($row['url']);     
+                $new_url = Database::escape_string($new_url);
+                $sql = "UPDATE $work_table SET url = '$new_url', parent_id = $folder_id, contains_file = '1' WHERE id = {$row['id']}";                                
+                iDatabase::query($sql);
+            }
+        }
+    }
 }