ソースを参照

global move loading of classes to autoload

Laurent Opprecht 13 年 前
コミット
8e2add3216

+ 1 - 1
custompages/first_login.php

@@ -1,7 +1,7 @@
 <?php
 require_once('language.php');
 require_once(dirname(__FILE__).'/../main/inc/global.inc.php');
-require_once (api_get_path(LIBRARY_PATH).'conditionallogin.lib.php');
+//require_once (api_get_path(LIBRARY_PATH).'conditionallogin.lib.php'); moved to autologin
 require_once (api_get_path(LIBRARY_PATH).'usermanager.lib.php');
 
 if (! isset($_SESSION['conditional_login']['uid']))

+ 1 - 1
main/auth/conditional_login/complete_phone_number.php

@@ -1,6 +1,6 @@
 <?php
 require_once(dirname(__FILE__).'/../../inc/global.inc.php');
-require_once (api_get_path(LIBRARY_PATH).'conditionallogin.lib.php');
+//require_once (api_get_path(LIBRARY_PATH).'conditionallogin.lib.php'); moved to autologin
 require_once (api_get_path(LIBRARY_PATH).'usermanager.lib.php');
 $url =  api_get_path(WEB_PATH).'main/auth/conditional_login/complete_phone_number.php';
 

+ 1 - 1
main/document/document.php

@@ -46,7 +46,7 @@ $lib_path = api_get_path(LIBRARY_PATH);
 require_once $lib_path.'document.lib.php';
 require_once $lib_path.'fileUpload.lib.php';
 require_once $lib_path.'fileDisplay.lib.php';
-require_once $lib_path.'tablesort.lib.php';
+//require_once $lib_path.'tablesort.lib.php';moved to autoload
 
 api_protect_course_script(true);
 

+ 1 - 1
main/document/document_lite.php

@@ -21,7 +21,7 @@ require_once $lib_path.'document.lib.php';
 require_once $lib_path.'fileUpload.lib.php';
 require_once $lib_path.'formvalidator/FormValidator.class.php';
 require_once $lib_path.'fileDisplay.lib.php';
-require_once $lib_path.'tablesort.lib.php';
+//require_once $lib_path.'tablesort.lib.php';moved to autoload
 
 api_protect_course_script(true);
 

+ 1 - 1
main/dropbox/dropbox_init.inc.php

@@ -57,7 +57,7 @@ require_once api_get_path(LIBRARY_PATH).'course.lib.php';
 require_once api_get_path(LIBRARY_PATH).'groupmanager.lib.php';
 
 // including the library for the sortable table
-require_once api_get_path(LIBRARY_PATH).'tablesort.lib.php';
+//require_once api_get_path(LIBRARY_PATH).'tablesort.lib.php';moved to autoload
 
 // including the library for the dropbox
 require_once 'dropbox_class.inc.php';

+ 1 - 1
main/inc/course_document.inc.php

@@ -13,7 +13,7 @@ require_once api_get_path(LIBRARY_PATH).'fckeditor/repository.php';
 require_once api_get_path(SYS_CODE_PATH).'document/document.inc.php';
 require_once api_get_path(LIBRARY_PATH).'fileDisplay.lib.php';
 require_once api_get_path(LIBRARY_PATH).'document.lib.php';
-require_once api_get_path(LIBRARY_PATH).'tablesort.lib.php';
+//require_once api_get_path(LIBRARY_PATH).'tablesort.lib.php'; moved to autoload
 require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
 
 //if(!$is_in_admin){

+ 2 - 2
main/inc/global.inc.php

@@ -106,7 +106,7 @@ require_once $lib_path.'debug.lib.php';
 require_once $lib_path.'rights.lib.php';
 
 require_once $lib_path.'model.lib.php';
-require_once $lib_path.'sortabletable.class.php';
+//require_once $lib_path.'sortabletable.class.php';  moved to autoload
 require_once $lib_path.'usermanager.lib.php';
 require_once $lib_path.'message.lib.php';
 require_once $lib_path.'social.lib.php';
@@ -115,7 +115,7 @@ require_once $lib_path.'course.lib.php';
 require_once $lib_path.'sessionmanager.lib.php';
 require_once $lib_path.'tracking.lib.php';
 
-require_once $lib_path.'formvalidator/FormValidator.class.php';
+//require_once $lib_path.'formvalidator/FormValidator.class.php'; moved to autoload
 require_once $lib_path.'online.inc.php';
 
 //Here we load the new Doctrine class (just for tests)

+ 403 - 24
main/inc/lib/autoload.class.php

@@ -17,11 +17,11 @@ class Autoload
      */
     static public function register()
     {
-        if(self::is_registered())
+        if (self::is_registered())
         {
             return false;
         }
-        
+
         $f = array(new self, 'load');
         spl_autoload_register($f);
         self::$is_registered = true;
@@ -33,7 +33,7 @@ class Autoload
         return self::$is_registered;
     }
 
-    static public function map()
+    static public function &map()
     {
         static $result = false;
 
@@ -42,26 +42,255 @@ class Autoload
             return $result;
         }
 
-        $dir = dirname(__FILE__) . '/';
-        $sys = $dir . '../../';
-
+        $root = dirname(__FILE__) . '/../../';
         $result = array();
-        $result['Chamilo'] = $dir . 'chamilo.class.php';
-        $result['Redirect'] = $dir . 'redirect.class.php';
-        $result['Request'] = $dir . 'request.class.php';
-        $result['RequestServer'] = $dir . 'request_server.class.php';
-        $result['AnnouncementEmail'] = $sys . 'announcements/announcement_email.class.php';
-        $result['Javascript'] = $dir . 'javascript.class.php';
-        $result['ClosureCompiler'] = $dir . 'closure_compiler.class.php';
-        $result['Uri'] = $dir . 'uri.class.php';
-        $result['GroupManager'] = $dir . 'groupmanager.lib.php';
-        $result['Header'] = $dir . 'header.class.php';
-        $result['Cache'] = $dir . 'cache.class.php';
-        $result['KeyAuth'] = $sys . 'auth/key/key_auth.class.php';
-        $result['CourseNoticeQuery'] = $sys . 'course_notice/course_notice_query.class.php';
-        $result['CourseNoticeController'] = $sys . 'course_notice/course_notice_controller.class.php';
-        $result['CourseNoticeRss'] = $sys . 'course_notice/course_notice_rss.class.php';
-        
+        $result['AbstractLink'] = '/main/gradebook/lib/be/abstractlink.class.php';
+        $result['Accessurleditcoursestourl'] = '/main/inc/lib/access_url_edit_courses_to_url_functions.lib.php';
+        $result['Accessurleditsessionstourl'] = '/main/inc/lib/access_url_edit_sessions_to_url_functions.lib.php';
+        $result['Accessurledituserstourl'] = '/main/inc/lib/access_url_edit_users_to_url_functions.lib.php';
+        $result['AddCourseToSession'] = '/main/inc/lib/add_courses_to_session_functions.lib.php';
+        $result['AddManySessionToCategoryFunctions'] = '/main/inc/lib/add_many_session_to_category_functions.lib.php';
+        $result['Admin'] = '/main/auth/shibboleth/app/model/admin.class.php';
+        $result['AdminStore'] = '/main/auth/shibboleth/app/model/admin.class.php';
+        $result['Agenda'] = '/main/calendar/agenda.lib.php';
+        $result['Announcement'] = '/main/coursecopy/classes/Announcement.class.php';
+        $result['AnnouncementEmail'] = '/main/announcements/announcement_email.class.php';
+        $result['Answer'] = '/main/exercice/answer.class.php';
+        $result['AppPlugin'] = '/main/inc/lib/plugin.lib.php';
+        $result['AttendanceLink'] = '/main/gradebook/lib/be/attendancelink.class.php';
+        $result['Auth'] = '/main/inc/lib/auth.lib.php';
+        $result['Block'] = '/main/dashboard/block.class.php';
+        $result['Blog'] = '/main/inc/lib/blog.lib.php';
+        $result['Cache'] = '/main/inc/lib/cache.class.php';
+        $result['Career'] = '/main/inc/lib/career.lib.php';
+        $result['CatForm'] = '/main/gradebook/lib/fe/catform.class.php';
+        $result['Category'] = '/main/gradebook/lib/be/category.class.php';
+        $result['Certificate'] = '/main/inc/lib/certificate.lib.php';
+        $result['Chamilo'] = '/main/inc/lib/chamilo.class.php';
+        $result['Chat'] = '/main/inc/lib/chat.lib.php';
+        $result['ClassManager'] = '/main/inc/lib/classmanager.lib.php';
+        $result['ClosureCompiler'] = '/main/inc/lib/closure_compiler.class.php';
+        $result['ConditionalLogin'] = '/main/inc/lib/conditional_login.class.php';
+        $result['Course'] = '/main/coursecopy/classes/Course.class.php';
+        $result['CourseArchiver'] = '/main/coursecopy/classes/CourseArchiver.class.php';
+        $result['CourseBuilder'] = '/main/coursecopy/classes/CourseBuilder.class.php';
+        $result['CourseCopyLearnpath'] = '/main/coursecopy/classes/CourseCopyLearnpath.class.php';
+        $result['CourseHome'] = '/main/inc/lib/course_home.lib.php';
+        $result['CourseManager'] = '/main/inc/lib/course.lib.php';
+        $result['CourseNoticeController'] = '/main/course_notice/course_notice_controller.class.php';
+        $result['CourseNoticeQuery'] = '/main/course_notice/course_notice_query.class.php';
+        $result['CourseNoticeRss'] = '/main/course_notice/course_notice_rss.class.php';
+        $result['CourseRecycler'] = '/main/coursecopy/classes/CourseRecycler.class.php';
+        $result['CourseRequestManager'] = '/main/inc/lib/course_request.lib.php';
+        $result['CourseRestorer'] = '/main/coursecopy/classes/CourseRestorer.class.php';
+        $result['CourseSelectForm'] = '/main/coursecopy/classes/CourseSelectForm.class.php';
+        $result['CourseSession'] = '/main/coursecopy/classes/CourseSession.class.php';
+        $result['CustomPages'] = '/main/inc/lib/custompages.lib.php';
+        $result['DashboardManager'] = '/main/inc/lib/dashboard.lib.php';
+        $result['DataForm'] = '/main/gradebook/lib/fe/dataform.class.php';
+        $result['Debug'] = '/main/inc/lib/debug.lib.php';
+        $result['Diagnoser'] = '/main/inc/lib/diagnoser.lib.php';
+        $result['Display'] = '/main/inc/lib/display.lib.php';
+        $result['Document'] = '/main/coursecopy/classes/Document.class.php';
+        $result['DocumentManager'] = '/main/inc/lib/document.lib.php';
+        $result['DokeosIndexer'] = '/main/inc/lib/search/DokeosIndexer.class.php';
+        $result['DropboxLink'] = '/main/gradebook/lib/be/dropboxlink.class.php';
+        $result['DummyCourseCreator'] = '/main/coursecopy/classes/DummyCourseCreator.class.php';
+        $result['EvalForm'] = '/main/gradebook/lib/fe/evalform.class.php';
+        $result['EvalLink'] = '/main/gradebook/lib/be/evallink.class.php';
+        $result['Evaluation'] = '/main/gradebook/lib/be/evaluation.class.php';
+        $result['Event'] = '/main/coursecopy/classes/Event.class.php';
+        $result['Exercise'] = '/main/exercice/exercise.class.php';
+        $result['ExerciseLink'] = '/main/gradebook/lib/be/exerciselink.class.php';
+        $result['ExerciseResult'] = '/main/exercice/exercise_result.class.php';
+        $result['ExerciseShowFunctions'] = '/main/inc/lib/exercise_show_functions.lib.php';
+        $result['FileManager'] = '/main/inc/lib/fileManage.lib.php';
+        $result['FillBlanks'] = '/main/exercice/fill_blanks.class.php';
+        $result['FlatViewDataGenerator'] = '/main/gradebook/lib/flatview_data_generator.class.php';
+        $result['FlatViewTable'] = '/main/gradebook/lib/fe/flatviewtable.class.php';
+        $result['FormValidator'] = '/main/inc/lib/formvalidator/FormValidator.class.php';
+        $result['Forum'] = '/main/coursecopy/classes/Forum.class.php';
+        $result['ForumCategory'] = '/main/coursecopy/classes/ForumCategory.class.php';
+        $result['ForumPost'] = '/main/coursecopy/classes/ForumPost.class.php';
+        $result['ForumThreadLink'] = '/main/gradebook/lib/be/forumthreadlink.class.php';
+        $result['ForumTopic'] = '/main/coursecopy/classes/ForumTopic.class.php';
+        $result['FreeAnswer'] = '/main/exercice/freeanswer.class.php';
+        $result['GDWrapper'] = '/main/inc/lib/image.lib.php';
+        $result['Glossary'] = '/main/coursecopy/classes/Glossary.class.php';
+        $result['GlossaryManager'] = '/main/inc/lib/glossary.lib.php';
+        $result['GradeBookResult'] = '/main/gradebook/gradebook_result.class.php';
+        $result['GradeModel'] = '/main/inc/lib/grade_model.lib.php';
+        $result['GradeModelComponents'] = '/main/inc/lib/grade_model.lib.php';
+        $result['Gradebook'] = '/main/inc/lib/gradebook.lib.php';
+        $result['GradebookDataGenerator'] = '/main/gradebook/lib/gradebook_data_generator.class.php';
+        $result['GradebookItem'] = '/main/gradebook/lib/be/gradebookitem.class.php';
+        $result['GradebookTable'] = '/main/gradebook/lib/fe/gradebooktable.class.php';
+        $result['GroupManager'] = '/main/inc/lib/groupmanager.lib.php';
+        $result['GroupPortalManager'] = '/main/inc/lib/group_portal_manager.lib.php';
+        $result['Header'] = '/main/inc/lib/header.class.php';
+        $result['HotSpot'] = '/main/exercice/hotspot.class.php';
+        $result['HotSpotDelineation'] = '/main/exercice/hotspot.class.php';
+        $result['Image'] = '/main/inc/lib/image.lib.php';
+        $result['ImageWrapper'] = '/main/inc/lib/image.lib.php';
+        $result['ImagickWrapper'] = '/main/inc/lib/image.lib.php';
+        $result['Import'] = '/main/inc/lib/import.lib.php';
+        $result['IndexManager'] = '/main/inc/lib/userportal.lib.php';
+        $result['IndexableChunk'] = '/main/inc/lib/search/IndexableChunk.class.php';
+        $result['Javascript'] = '/main/inc/lib/javascript.class.php';
+        $result['KeyAuth'] = '/main/auth/key/key_auth.class.php';
+        $result['LearnpathLink'] = '/main/gradebook/lib/be/learnpathlink.class.php';
+        $result['LegalManager'] = '/main/inc/lib/legal.lib.php';
+        $result['Link'] = '/main/coursecopy/classes/Link.class.php';
+        $result['LinkAddEditForm'] = '/main/gradebook/lib/fe/linkaddeditform.class.php';
+        $result['LinkCategory'] = '/main/coursecopy/classes/LinkCategory.class.php';
+        $result['LinkFactory'] = '/main/gradebook/lib/be/linkfactory.class.php';
+        $result['LinkForm'] = '/main/gradebook/lib/fe/linkform.class.php';
+        $result['Login'] = '/main/inc/lib/login.lib.php';
+        $result['LoginRedirection'] = '/main/inc/lib/login_redirection.class.php';
+        $result['Matching'] = '/main/exercice/matching.class.php';
+        $result['MessageManager'] = '/main/inc/lib/message.lib.php';
+        $result['MultipleAnswer'] = '/main/exercice/multiple_answer.class.php';
+        $result['MultipleAnswerCombination'] = '/main/exercice/multiple_answer_combination.class.php';
+        $result['MultipleAnswerCombinationTrueFalse'] = '/main/exercice/multiple_answer_combination_true_false.class.php';
+        $result['MultipleAnswerTrueFalse'] = '/main/exercice/multiple_answer_true_false.class.php';
+        $result['MyHorBar'] = '/main/inc/lib/pchart/MyHorBar.class.php';
+        $result['MySpace'] = '/main/mySpace/myspace.lib.php';
+        $result['Nanogong'] = '/main/inc/lib/nanogong.lib.php';
+        $result['NotebookManager'] = '/main/inc/lib/notebook.lib.php';
+        $result['Notification'] = '/main/inc/lib/notification.lib.php';
+        $result['OpenOfficeTextDocument'] = '/main/newscorm/openoffice_text_document.class.php';
+        $result['OpenofficeDocument'] = '/main/newscorm/openoffice_document.class.php';
+        $result['OpenofficePresentation'] = '/main/newscorm/openoffice_presentation.class.php';
+        $result['OpenofficeText'] = '/main/newscorm/openoffice_text.class.php';
+        $result['OralExpression'] = '/main/exercice/oral_expression.class.php';
+        $result['PDF'] = '/main/inc/lib/pdf.lib.php';
+        $result['PclZip'] = '/main/inc/lib/pclzip/pclzip.lib.php';
+        $result['Plugin'] = '/main/inc/lib/plugin.class.php';
+        $result['Promotion'] = '/main/inc/lib/promotion.lib.php';
+        $result['Question'] = '/main/exercice/question.class.php';
+        $result['Quiz'] = '/main/coursecopy/classes/Quiz.class.php';
+        $result['QuizQuestion'] = '/main/coursecopy/classes/QuizQuestion.class.php';
+        $result['Redirect'] = '/main/inc/lib/redirect.class.php';
+        $result['Request'] = '/main/inc/lib/request.class.php';
+        $result['RequestServer'] = '/main/inc/lib/request_server.class.php';
+        $result['Resource'] = '/main/coursecopy/classes/Resource.class.php';
+        $result['Result'] = '/main/gradebook/lib/be/result.class.php';
+        $result['ResultTable'] = '/main/gradebook/lib/fe/resulttable.class.php';
+        $result['ResultsDataGenerator'] = '/main/gradebook/lib/results_data_generator.class.php';
+        $result['Rights'] = '/main/inc/lib/rights.lib.php';
+        $result['Scaffolder'] = '/main/auth/shibboleth/lib/scaffolder/scaffolder.class.php';
+        $result['ScoreDisplay'] = '/main/gradebook/lib/scoredisplay.class.php';
+        $result['ScoreDisplayForm'] = '/main/gradebook/lib/fe/scoredisplayform.class.php';
+        $result['ScormDocument'] = '/main/coursecopy/classes/ScormDocument.class.php';
+        $result['Security'] = '/main/inc/lib/security.lib.php';
+        $result['SessionManager'] = '/main/inc/lib/sessionmanager.lib.php';
+        $result['Shibboleth'] = '/main/auth/shibboleth/app/shibboleth.class.php';
+        $result['ShibbolethConfig'] = '/main/auth/shibboleth/lib/shibboleth_config.class.php';
+        $result['ShibbolethController'] = '/main/auth/shibboleth/app/controller/shibboleth_controller.class.php';
+        $result['ShibbolethDisplay'] = '/main/auth/shibboleth/app/view/shibboleth_display.class.php';
+        $result['ShibbolethEmailForm'] = '/main/auth/shibboleth/app/view/shibboleth_email_form.class.php';
+        $result['ShibbolethSession'] = '/main/auth/shibboleth/lib/shibboleth_session.class.php';
+        $result['ShibbolethStatusRequestForm'] = '/main/auth/shibboleth/app/view/shibboleth_status_request_form.class.php';
+        $result['ShibbolethStore'] = '/main/auth/shibboleth/app/model/shibboleth_store.class.php';
+        $result['ShibbolethUpgrade'] = '/main/auth/shibboleth/db/shibboleth_upgrade.class.php';
+        $result['ShibbolethUser'] = '/main/auth/shibboleth/app/model/shibboleth_user.class.php';
+        $result['Skill'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillProfile'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillRelGradebook'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillRelProfile'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillRelSkill'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillRelUser'] = '/main/inc/lib/skill.lib.php';
+        $result['SkillVisualizer'] = '/main/inc/lib/skill.visualizer.lib.php';
+        $result['SocialManager'] = '/main/inc/lib/social.lib.php';
+        $result['SortableTable'] = '/main/inc/lib/sortable_table.class.php';
+        $result['SortableTableFromArray'] = '/main/inc/lib/sortable_table.class.php';
+        $result['SortableTableFromArrayConfig'] = '/main/inc/lib/sortable_table.class.php';
+        $result['Statistics'] = '/main/admin/statistics/statistics.lib.php';
+        $result['Store'] = '/main/auth/shibboleth/lib/store.class.php';
+        $result['StudentPublicationLink'] = '/main/gradebook/lib/be/studentpublicationlink.class.php';
+        $result['SubLanguageManager'] = '/main/admin/sub_language.class.php';
+        $result['Survey'] = '/main/coursecopy/classes/Survey.class.php';
+        $result['SurveyInvitation'] = '/main/coursecopy/classes/SurveyInvitation.class.php';
+        $result['SurveyLink'] = '/main/gradebook/lib/be/surveylink.class.php';
+        $result['SurveyQuestion'] = '/main/coursecopy/classes/SurveyQuestion.class.php';
+        $result['SurveyTree'] = '/main/inc/lib/surveymanager.lib.php';
+        $result['SurveyUtil'] = '/main/survey/survey.lib.php';
+        $result['SystemAnnouncementManager'] = '/main/inc/lib/system_announcements.lib.php';
+        $result['TableSort'] = '/main/inc/lib/table_sort.class.php';
+        $result['Template'] = '/main/inc/lib/template.lib.php';
+        $result['Timeline'] = '/main/inc/lib/timeline.lib.php';
+        $result['ToolIntro'] = '/main/coursecopy/classes/ToolIntro.class.php';
+        $result['Tracking'] = '/main/inc/lib/tracking.lib.php';
+        $result['TrackingCourseLog'] = '/main/inc/lib/tracking.lib.php';
+        $result['TrackingUserLog'] = '/main/inc/lib/tracking.lib.php';
+        $result['TrackingUserLogCSV'] = '/main/inc/lib/tracking.lib.php';
+        $result['UniqueAnswer'] = '/main/exercice/unique_answer.class.php';
+        $result['UniqueAnswerNoOption'] = '/main/exercice/unique_answer_no_option.class.php';
+        $result['Uri'] = '/main/inc/lib/uri.class.php';
+        $result['UrlManager'] = '/main/inc/lib/urlmanager.lib.php';
+        $result['User'] = '/main/auth/shibboleth/app/model/user.class.php';
+        $result['UserDataGenerator'] = '/main/gradebook/lib/user_data_generator.class.php';
+        $result['UserForm'] = '/main/gradebook/lib/fe/userform.class.php';
+        $result['UserGroup'] = '/main/inc/lib/usergroup.lib.php';
+        $result['UserManager'] = '/main/inc/lib/usermanager.lib.php';
+        $result['UserStore'] = '/main/auth/shibboleth/app/model/user.class.php';
+        $result['UserTable'] = '/main/gradebook/lib/fe/usertable.class.php';
+        $result['Wiki'] = '/main/coursecopy/classes/wiki.class.php';
+        $result['XapianIndexer'] = '/main/inc/lib/search/xapian/XapianIndexer.class.php';
+        $result['CodeUtilities'] = '/main/inc/lib/code_utilities.class.php';
+        $result['_Admin'] = '/main/auth/shibboleth/app/model/scaffold/admin.class.php';
+        $result['_AdminStore'] = '/main/auth/shibboleth/app/model/scaffold/admin.class.php';
+        $result['_IndexableChunk'] = '/main/inc/lib/search/IndexableChunk.class.php';
+        $result['_User'] = '/main/auth/shibboleth/app/model/scaffold/user.class.php';
+        $result['_UserStore'] = '/main/auth/shibboleth/app/model/scaffold/user.class.php';
+        $result['aai'] = '/main/auth/shibboleth/config/aai.class.php';
+        $result['aicc'] = '/main/newscorm/aicc.class.php';
+        $result['aiccBlock'] = '/main/newscorm/aiccBlock.class.php';
+        $result['aiccItem'] = '/main/newscorm/aiccItem.class.php';
+        $result['aiccObjective'] = '/main/newscorm/aiccObjective.class.php';
+        $result['aiccResource'] = '/main/newscorm/aiccResource.class.php';
+        $result['api_failure'] = '/main/inc/lib/main_api.lib.php';
+        $result['calendarComponent'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['ch_comment'] = '/main/survey/survey.lib.php';
+        $result['ch_dropdown'] = '/main/survey/survey.lib.php';
+        $result['ch_multiplechoice'] = '/main/survey/survey.lib.php';
+        $result['ch_multipleresponse'] = '/main/survey/survey.lib.php';
+        $result['ch_open'] = '/main/survey/survey.lib.php';
+        $result['ch_pagebreak'] = '/main/survey/survey.lib.php';
+        $result['ch_percentage'] = '/main/survey/survey.lib.php';
+        $result['ch_personality'] = '/main/survey/survey.lib.php';
+        $result['ch_score'] = '/main/survey/survey.lib.php';
+        $result['ch_yesno'] = '/main/survey/survey.lib.php';
+        $result['db'] = '/main/inc/lib/db.lib.php';
+        $result['document_processor'] = '/main/inc/lib/search/tool_processors/document_processor.class.php';
+        $result['learnpath'] = '/main/newscorm/learnpath.class.php';
+        $result['learnpathItem'] = '/main/newscorm/learnpathItem.class.php';
+        $result['learnpathList'] = '/main/newscorm/learnpathList.class.php';
+        $result['learnpath_processor'] = '/main/inc/lib/search/tool_processors/learnpath_processor.class.php';
+        $result['link_processor'] = '/main/inc/lib/search/tool_processors/link_processor.class.php';
+        $result['pCache'] = '/main/inc/lib/pchart/pCache.class.php';
+        $result['pChart'] = '/main/inc/lib/pchart/pChart.class.php';
+        $result['pData'] = '/main/inc/lib/pchart/pData.class.php';
+        $result['quiz_processor'] = '/main/inc/lib/search/tool_processors/quiz_processor.class.php';
+        $result['scorm'] = '/main/newscorm/scorm.class.php';
+        $result['scormItem'] = '/main/newscorm/scormItem.class.php';
+        $result['scormMetadata'] = '/main/newscorm/scormMetadata.class.php';
+        $result['scormOrganization'] = '/main/newscorm/scormOrganization.class.php';
+        $result['scormResource'] = '/main/newscorm/scormResource.class.php';
+        $result['search_processor'] = '/main/inc/lib/search/tool_processors/search_processor.class.php';
+        $result['session_handler'] = '/main/inc/lib/session_handler.class.php';
+        $result['sso'] = '/main/auth/sso/sso.class.php';
+        $result['survey_manager'] = '/main/survey/survey.lib.php';
+        $result['survey_question'] = '/main/survey/survey.lib.php';
+        $result['valarm'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vcalendar'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vevent'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vfreebusy'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vjournal'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vtimezone'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['vtodo'] = '/main/inc/lib/icalcreator/iCalcreator.class.php';
+        $result['xhtdoc'] = '/main/inc/lib/xht.lib.php';
+
         return $result;
     }
 
@@ -74,10 +303,11 @@ class Autoload
      */
     public function load($class_name)
     {
-        $map = self::map();
+        $root = dirname(__FILE__) . '/../../../';
+        $map = &self::map();
         if (isset($map[$class_name]))
         {
-            $path = $map[$class_name];
+            $path = $root . $map[$class_name];
             require_once $path;
             return true;
         }
@@ -88,3 +318,152 @@ class Autoload
     }
 
 }
+
+/**
+ * Scan directorie for class declarations and returns an array made of 
+ * 
+ *  classname => relative path
+ * 
+ * @license see /license.txt
+ * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
+ */
+class AutoloadClassFinder
+{
+
+    protected $root_dir;
+    protected $map = array();
+    protected $duplicates = array();
+
+    public function __construct($root_dir = null)
+    {
+        $root_dir = $root_dir ? $root_dir : Chamilo::root();
+        $root_dir = realpath($root_dir);
+        $this->root_dir = $root_dir;
+    }
+
+    public function get_map()
+    {
+        return $this->map;
+    }
+
+    public function get_duplicates()
+    {
+        return $this->duplicates;
+    }
+
+    public function run()
+    {
+        $this->synch(Chamilo::path('/main'));
+        ksort($this->map);
+    }
+
+    public function to_string()
+    {
+        $result = array();
+
+        $result[] = '$result = array();';
+        foreach ($this->map as $name => $path)
+        {
+            $result[] = '$result[' . "'" . $name . "']" . ' = ' . "'" . $path . "';";
+        }
+
+        $result[] = "<br/>Duplicates </br>";
+
+        foreach ($this->get_duplicates() as $key => $items)
+        {
+            foreach ($items as $value)
+            {
+                $result[] = "$key => $value";
+            }
+        }
+        return implode("<br/>", $result);
+    }
+
+    /**
+     * Synchronize the autoloader map with the current file structure.
+     * 
+     * Searches all files and sub directories for class declarations.
+     * Creates a map of class name to (relative) file path.
+     * Update the autoloader with the map declaration if $update equals true.
+     * Returns a map of class name to file path.
+     * 
+     * @param string $current_dir   The current directory in which we search for class declarations
+     */
+    protected function synch($current_dir = null)
+    {
+        $result = array();
+
+        $root_dir = $this->root_dir;
+
+        $current_dir = $current_dir ? $current_dir : $root_dir;
+        $current_dir = realpath($current_dir);
+
+        //plugins are not handled by the autoloader. 
+        if (basename($current_dir) == 'plugin')
+        {
+            return $result;
+        }
+
+        $files = scandir($current_dir);
+        $files = array_diff($files, array('.', '..'));
+
+        foreach ($files as $file)
+        {
+            $path = $current_dir . '/' . $file;
+            if (is_readable($path) &&
+                    is_file($path) &&
+                    (strpos($path, '.class.php') || strpos($path, '.lib.php')) &&
+                    $file != 'autoload.class.php' &&
+                    strpos($file, 'test') === false)
+            {
+                $content = file_get_contents($path);
+                $classes = CodeUtilities::get_classes($content);
+
+                $namespace = CodeUtilities::get_namespace($content);
+                $namespace = $namespace ? $namespace . '\\' : '';
+
+                foreach ($classes as $class)
+                {
+                    /* a few classes have the same namespace and class name
+                     * in this case we let the latest win as this may 
+                     * relates to different autoloader.
+                     */
+                    $rel_path = realpath($path);
+                    $rel_path = str_ireplace($root_dir, '', $rel_path);
+                    $rel_path = str_replace('\\', '/', $rel_path);
+
+                    $key = $namespace . $class;
+
+                    if (isset($this->duplicates[$key]))
+                    {
+                        $this->duplicates[$key][] = $rel_path;
+                    }
+                    else if (isset($this->map[$key]))
+                    {
+                        if (!isset($this->duplicates[$key]))
+                        {
+                            $this->duplicates[$key] = array();
+                        }
+                        $this->duplicates[$key][] = $rel_path;
+                        $this->duplicates[$key][] = $this->map[$key];
+                        unset($this->map[$key]);
+                    }
+                    else
+                    {
+                        $this->map[$key] = $rel_path;
+                    }
+                }
+            }
+        }
+
+        foreach ($files as $dir)
+        {
+            $path = $current_dir . '/' . $dir;
+            if (is_dir($path))
+            {
+                $this->synch($current_dir . '/' . $dir);
+            }
+        }
+    }
+
+}

+ 106 - 0
main/inc/lib/code_utilities.class.php

@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * Description of code_utilities
+ *
+ * @license see /license.txt
+ * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva 
+ */
+class CodeUtilities
+{
+
+    const CLASS_PATTERN = '/(?:\s+class\s+[a-zA-Z_0-9\x7f-\xff]+\s*{)|(?:\s+class\s+[a-zA-Z_0-9\x7f-\xff]+\s*extends)|(?:\s+class\s+[a-zA-Z_0-9\x7f-\xff]+\s*implements)|(?:\s+interface\s+[a-zA-Z_0-9\x7f-\xff]+\s*{)|(?:\s+interface\s+[a-zA-Z_0-9\x7f-\xff]+\s*extends)/mi';
+    const INLINE_COMMENT_PATTERN = '#//.*$#m';
+    const MULTILINE_COMMENT_PATTERN = '#/\*.*?\*/#ms';
+    const NAMESPACE_PATTERN = '/namespace\s*(.*);/';
+    const IDENTIFIER_PATTERN = '/[a-zA-Z_][a-zA-Z0-9_]*/';
+
+    static function remove_comments($content)
+    {
+        $content = preg_replace(self::INLINE_COMMENT_PATTERN, '', $content);
+        $content = preg_replace(self::MULTILINE_COMMENT_PATTERN, '', $content);
+        return $content;
+    }
+
+    /**
+     * Returns the name of classes and interfaces contained in content.
+     * 
+     * @param text $content
+     * @return array
+     */
+    static function get_classes($content)
+    {
+        $result = array();
+        $cls_pattern = self::CLASS_PATTERN;
+
+        $content = self::remove_comments($content); //comments may contains class declaration we don't want to capture.      
+
+        $matches = array();
+        if (preg_match_all($cls_pattern, $content, $matches))
+        {
+            $matches = reset($matches);
+            foreach ($matches as $match)
+            {
+                $match = str_replace("\n", ' ', $match);
+                $match = str_replace('{', ' ', $match);
+                $words = explode(' ', $match);
+                foreach ($words as $word)
+                {
+                    $word = trim($word);
+                    //we capture the interface/class name with the current pattern
+                    if (strtolower($word) != 'class' && strtolower($word) != 'interface' && strtolower($word) != 'implements' && strtolower($word) != 'extends' && !empty($word))
+                    {
+                        $result[] = $word;
+                        break; //we only take the first name as we don't want to capture the name of the interface or of the parent class name
+                    }
+                }
+            }
+        }
+        return $result;
+    }
+
+    static function get_namespace($content)
+    {
+        $namespace_pattern = self::NAMESPACE_PATTERN;
+        if (preg_match($namespace_pattern, $content, $matches))
+        {
+            $result = end($matches);
+            if (self::is_valid_identifier($result))
+            {
+                return $result;
+            }
+            else
+            {
+                return false;
+            }
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    static function is_valid_identifier($name)
+    {
+        $pattern = self::IDENTIFIER_PATTERN;
+        $r = preg_match($pattern, $name);
+        return $r;
+    }
+
+    /**
+     * Make path relative to root.
+     * 
+     * @param string $root
+     * @param string $path
+     * @return string
+     */
+    static function relative_path($root, $path)
+    {
+        $path = realpath($path);
+        $root = realpath($root);
+        $path = str_ireplace($root, '', $path);
+        $path = str_ireplace('\\', '/', $path);
+        return $path;
+    }
+
+}

+ 30 - 0
main/inc/lib/conditional_login.class.php

@@ -0,0 +1,30 @@
+<?php
+// Conditional login
+// Used to implement the loading of custom pages
+// 2011, Noel Dieschburg <noel@cblue.be>
+
+class ConditionalLogin {
+
+    public static function check_conditions($user) {
+        if (file_exists(api_get_path(SYS_PATH).'main/auth/conditional_login/conditional_login.php')) {
+            include_once api_get_path(SYS_PATH).'main/auth/conditional_login/conditional_login.php';
+            if (isset($dc_conditions)){
+                foreach ($dc_conditions as $dc_condition) { 
+                    if (isset($dc_condition['conditional_function']) && $dc_condition['conditional_function']($user)) {
+                        $_SESSION['conditional_login']['uid'] = $user['user_id'];
+                        $_SESSION['conditional_login']['can_login'] = false;
+                        header("Location:". $dc_condition['url']);
+                        exit();
+                    }
+                }
+            }
+        }
+    }
+
+	public static function login() {
+		//require_once api_get_path(LIBRARY_PATH).'loginredirection.lib.php'; moved to autologin
+	    $_SESSION['conditional_login']['can_login'] = true;
+		LoginRedirection::redirect();
+	    exit();
+	}
+}

+ 4 - 29
main/inc/lib/conditionallogin.lib.php

@@ -1,30 +1,5 @@
 <?php
-// Conditional login
-// Used to implement the loading of custom pages
-// 2011, Noel Dieschburg <noel@cblue.be>
-
-class ConditionalLogin {
-
-    public static function check_conditions($user) {
-        if (file_exists(api_get_path(SYS_PATH).'main/auth/conditional_login/conditional_login.php')) {
-            include_once api_get_path(SYS_PATH).'main/auth/conditional_login/conditional_login.php';
-            if (isset($dc_conditions)){
-                foreach ($dc_conditions as $dc_condition) { 
-                    if (isset($dc_condition['conditional_function']) && $dc_condition['conditional_function']($user)) {
-                        $_SESSION['conditional_login']['uid'] = $user['user_id'];
-                        $_SESSION['conditional_login']['can_login'] = false;
-                        header("Location:". $dc_condition['url']);
-                        exit();
-                    }
-                }
-            }
-        }
-    }
-
-	public static function login() {
-		require_once api_get_path(LIBRARY_PATH).'loginredirection.lib.php';
-	    $_SESSION['conditional_login']['can_login'] = true;
-		LoginRedirection::redirect();
-	    exit();
-	}
-}
+/**
+ * Added to autologin
+ * moved to conditional_login.class.php 
+ */

+ 1 - 1
main/inc/lib/course_home.lib.php

@@ -1,7 +1,7 @@
 <?php
 /* For licensing terms, see /license.txt */
 
-require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpath.class.php';
+//require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpath.class.php'; moved to autoload
 
 define('SHORTCUTS_HORIZONTAL', 0);
 define('SHORTCUTS_VERTICAL', 1);

+ 1 - 1
main/inc/lib/groupmanager.lib.php

@@ -7,7 +7,7 @@
 /**
  * Code
  */
-require_once 'tablesort.lib.php';
+//require_once 'tablesort.lib.php';moved to autoload
 require_once 'fileManage.lib.php';
 require_once 'fileUpload.lib.php';
 require_once 'document.lib.php';

+ 62 - 0
main/inc/lib/login_redirection.class.php

@@ -0,0 +1,62 @@
+<?php
+/**
+* When a user login, the function LoginRedirection::redirect is called.
+* When this function is called all user info has already been registered in $_user session variable
+**/
+Class LoginRedirection {
+
+  //checks user status and redirect him through custom page if setting is enabled
+  public static function redirect(){
+
+    global $param;
+    $param = isset($param) ? $param : '';
+    $redirect_url = '';
+/*
+    //If session request url is setted, we go there
+    if (!empty($_SESSION['request_uri'])) {
+      $req = $_SESSION['request_uri'];
+      unset($_SESSION['request_uri']);
+      header('location: '.$req);
+      exit();
+    }
+ */
+
+    if ( api_is_student() && !api_get_setting('student_page_after_login') == '' ){
+      $redirect_url = html_entity_decode(api_get_setting('student_page_after_login'));
+      if ($redirect_url[0] == "/") {
+        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
+      }
+    }
+    if ( api_is_teacher() && !api_get_setting('teacher_page_after_login') == '' ){
+      $redirect_url = html_entity_decode(api_get_setting('teacher_page_after_login'));
+      if ($redirect_url[0] == "/") {
+        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
+      }
+    }
+    if ( api_is_drh() && !api_get_setting('drh_page_after_login') == '' ){
+      $redirect_url = html_entity_decode(api_get_setting('drh_page_after_login'));
+      if ($redirect_url[0] == "/") {
+        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
+      }
+    }
+    if ( api_is_session_admin() && !api_get_setting('sessionadmin_page_after_login') == '' ){
+      $redirect_url = html_entity_decode(api_get_setting('sessionadmin_page_after_login'));
+      if ($redirect_url[0] == "/") {
+        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
+      }
+    }
+
+    if (!empty($redirect_url)){
+      header('Location: '.$redirect_url.$param);
+      exit();
+    }
+
+    // Custom pages
+    if (api_get_setting('use_custom_pages') == 'true') {
+      require_once api_get_path(LIBRARY_PATH).'custompages.lib.php';
+      CustomPages::displayPage('index-logged');
+    }
+    header('location: '.api_get_path(WEB_PATH).api_get_setting('page_after_login').$param);
+    exit();
+  }
+}

+ 5 - 60
main/inc/lib/loginredirection.lib.php

@@ -1,62 +1,7 @@
 <?php
-/**
-* When a user login, the function LoginRedirection::redirect is called.
-* When this function is called all user info has already been registered in $_user session variable
-**/
-Class LoginRedirection {
-
-  //checks user status and redirect him through custom page if setting is enabled
-  public static function redirect(){
-
-    global $param;
-    $param = isset($param) ? $param : '';
-    $redirect_url = '';
-/*
-    //If session request url is setted, we go there
-    if (!empty($_SESSION['request_uri'])) {
-      $req = $_SESSION['request_uri'];
-      unset($_SESSION['request_uri']);
-      header('location: '.$req);
-      exit();
-    }
- */
 
-    if ( api_is_student() && !api_get_setting('student_page_after_login') == '' ){
-      $redirect_url = html_entity_decode(api_get_setting('student_page_after_login'));
-      if ($redirect_url[0] == "/") {
-        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
-      }
-    }
-    if ( api_is_teacher() && !api_get_setting('teacher_page_after_login') == '' ){
-      $redirect_url = html_entity_decode(api_get_setting('teacher_page_after_login'));
-      if ($redirect_url[0] == "/") {
-        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
-      }
-    }
-    if ( api_is_drh() && !api_get_setting('drh_page_after_login') == '' ){
-      $redirect_url = html_entity_decode(api_get_setting('drh_page_after_login'));
-      if ($redirect_url[0] == "/") {
-        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
-      }
-    }
-    if ( api_is_session_admin() && !api_get_setting('sessionadmin_page_after_login') == '' ){
-      $redirect_url = html_entity_decode(api_get_setting('sessionadmin_page_after_login'));
-      if ($redirect_url[0] == "/") {
-        $redirect_url = substr(api_get_path(WEB_PATH), 0, -1).$redirect_url;
-      }
-    }
-
-    if (!empty($redirect_url)){
-      header('Location: '.$redirect_url.$param);
-      exit();
-    }
-
-    // Custom pages
-    if (api_get_setting('use_custom_pages') == 'true') {
-      require_once api_get_path(LIBRARY_PATH).'custompages.lib.php';
-      CustomPages::displayPage('index-logged');
-    }
-    header('location: '.api_get_path(WEB_PATH).api_get_setting('page_after_login').$param);
-    exit();
-  }
-}
+/**
+ * Added to autologin
+ * @see login_redirection.class.php
+ *  
+ */

+ 1 - 1
main/inc/lib/sortabletable.class.php → main/inc/lib/sortable_table.class.php

@@ -8,7 +8,7 @@
  */
 require_once 'pear/HTML/Table.php';
 require_once 'pear/Pager/Pager.php';
-require_once 'tablesort.lib.php';
+//require_once 'tablesort.lib.php'; moved to autoload table_sort.class.php
 /**
  * This class allows you to display a sortable data-table. It is possible to
  * split the data in several pages.

+ 266 - 0
main/inc/lib/table_sort.class.php

@@ -0,0 +1,266 @@
+<?php
+/* For licensing terms, see /license.txt */
+/**
+ *	This is a library with some functions to sort tabular data
+ *
+ *	@package chamilo.library
+ */
+/**
+ * Code
+ */
+define('SORT_DATE', 3);
+define('SORT_IMAGE', 4);
+
+/**
+ *	@package chamilo.library
+ */
+class TableSort {
+
+	/**
+	 * Sorts 2-dimensional table.
+	 * @param array $data The data to be sorted.
+	 * @param int $column The column on which the data should be sorted (default = 0)
+	 * @param string $direction The direction to sort (SORT_ASC (default) or SORT_DESC)
+	 * @param constant $type How should data be sorted (SORT_REGULAR, SORT_NUMERIC,
+	 * SORT_STRING,SORT_DATE,SORT_IMAGE)
+	 * @return array The sorted dataset
+	 * @author bart.mollet@hogent.be
+	 */
+	public function sort_table($data, $column = 0, $direction = SORT_ASC, $type = SORT_REGULAR) {
+		if (!is_array($data) || empty($data)) {
+			return array();
+		}
+		if ($column != strval(intval($column))) {
+			// Probably an attack
+			return $data;
+		}
+		if (!in_array($direction, array(SORT_ASC, SORT_DESC))) {
+			// Probably an attack
+			return $data;
+		}
+
+		if ($type == SORT_REGULAR) {
+			if (TableSort::is_image_column($data, $column)) {
+				$type = SORT_IMAGE;
+			} elseif (TableSort::is_date_column($data, $column)) {
+				$type = SORT_DATE;
+			} elseif (TableSort::is_numeric_column($data, $column)) {
+				$type = SORT_NUMERIC;
+			} else {
+				$type = SORT_STRING;
+			}
+		}
+
+		$compare_operator = $direction == SORT_ASC ? '>' : '<=';
+		switch ($type) {
+			case SORT_NUMERIC:
+				$compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
+				break;
+			case SORT_IMAGE:
+				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "<img>")), api_strtolower(strip_tags($b['.$column.'], "<img>"))) '.$compare_operator.' 0;';
+				break;
+			case SORT_DATE:
+				$compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
+				break;
+			case SORT_STRING:
+			default:
+				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
+				break;
+		}
+
+		// Sort the content
+		usort($data, create_function('$a, $b', $compare_function));
+
+		return $data;
+	}
+
+	/**
+	 * Sorts 2-dimensional table. It is possile changing the columns that will be shown and the way that the columns are to be sorted.
+	 * @param array $data The data to be sorted.
+	 * @param int $column The column on which the data should be sorted (default = 0)
+	 * @param string $direction The direction to sort (SORT_ASC (default) orSORT_DESC)
+	 * @param array $column_show The columns that we will show in the table i.e: $column_show = array('1','0','1') we will show the 1st and the 3th column.
+	 * @param array $column_order Changes how the columns will be sorted ie. $column_order = array('0','3','2','3') The column [1] will be sorted like the column [3]
+	 * @param constant $type How should data be sorted (SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_DATE, SORT_IMAGE)
+	 * @return array The sorted dataset
+	 * @author bart.mollet@hogent.be
+	 */
+	public function sort_table_config($data, $column = 0, $direction = SORT_ASC, $column_show = null, $column_order = null, $type = SORT_REGULAR, $doc_filter = false) {
+
+		if (!is_array($data) || empty($data)) {
+			return array();
+		}
+		if ($column != strval(intval($column))) {
+			// Probably an attack
+			return $data;
+		}
+		if (!in_array($direction, array(SORT_ASC, SORT_DESC))) {
+			// Probably an attack
+			return $data;
+		}
+
+		// Change columns sort
+	 	// Here we say that the real way of how the columns are going to be order is manage by the $column_order array
+	 	if (is_array($column_order)) {
+	 		$column = isset($column_order[$column]) ? $column_order[$column] : $column;
+	 	}
+
+		if ($type == SORT_REGULAR) {
+			if (TableSort::is_image_column($data, $column)) {
+				$type = SORT_IMAGE;
+			} elseif (TableSort::is_date_column($data, $column)) {
+				$type = SORT_DATE;
+			} elseif (TableSort::is_numeric_column($data, $column)) {
+				$type = SORT_NUMERIC;
+			} else {
+				$type = SORT_STRING;
+			}
+		}
+		
+		//This fixs only works in the document tool when ordering by name
+		if ($doc_filter && in_array($type, array(SORT_STRING))) {
+    		$data_to_sort = $folder_to_sort = array();
+    		$new_data = array();
+    		if (!empty($data)) {
+        		foreach ($data as $document) {
+        		    if ($document['type'] == 'folder') {
+        		      $docs_to_sort[$document['id']]   = api_strtolower($document['name']);
+        		    } else {
+        		      $folder_to_sort[$document['id']] = api_strtolower($document['name']);  
+        		    }
+        		    $new_data[$document['id']] = $document;    		        		     
+        		}   
+                if ($direction == SORT_ASC) {
+                    if (!empty($docs_to_sort)) {
+                        api_natrsort($docs_to_sort);
+                    }
+                    if (!empty($folder_to_sort)) {
+                        api_natrsort($folder_to_sort);
+                    }                
+                } else {
+                    if (!empty($docs_to_sort)) {
+                        api_natsort($docs_to_sort);
+                    }
+                    if (!empty($folder_to_sort)) {
+                        api_natsort($folder_to_sort);
+                    }
+                }
+                $new_data_order = array();
+                if (!empty($docs_to_sort)) {
+                    foreach($docs_to_sort as $id => $document) {
+                        $new_data_order[] = $new_data[$id];
+                    }
+                }
+                if (!empty($folder_to_sort)) {
+                    foreach($folder_to_sort as $id => $document) {
+                        $new_data_order[] = $new_data[$id];
+                    }
+                }
+                $data = $new_data_order; 		
+    		}              
+		} else {		
+    		$compare_operator = $direction == SORT_ASC ? '>' : '<=';    		
+    		switch ($type) {
+    			case SORT_NUMERIC:
+    				$compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
+    				break;
+    			case SORT_IMAGE:
+    				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "<img>")), api_strtolower(strip_tags($b['.$column.'], "<img>"))) '.$compare_operator.' 0;';
+    				break;
+    			case SORT_DATE:
+    				$compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
+    				break;
+    			case SORT_STRING:
+    			default:
+    			    $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
+    				break;
+    		}		
+        	// Sort the content
+    		usort($data, create_function('$a, $b', $compare_function));
+		}
+
+		if (is_array($column_show)) {
+			// We show only the columns data that were set up on the $column_show array
+			$new_order_data = array();
+			$count_data = count($data);
+			$count_column_show = count($column_show);
+			for ($j = 0; $j < $count_data; $j++) {
+				$k = 0;
+				for ($i = 0; $i < $count_column_show; $i++) {
+					if ($column_show[$i]) {
+						$new_order_data[$j][$k] = $data[$j][$i];
+					}
+					$k++;
+				}
+			}
+			// Replace the multi-arrays
+			$data = $new_order_data;
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Checks whether a column of a 2D-array contains only numeric values
+	 * @param array $data		The data-array
+	 * @param int $column		The index of the column to check
+	 * @return bool				TRUE if column contains only dates, FALSE otherwise
+	 * @todo Take locale into account (eg decimal point or comma ?)
+	 * @author bart.mollet@hogent.be
+	 */
+	private function is_numeric_column(& $data, $column) {
+		$is_numeric = true;
+		foreach ($data as $index => & $row) {
+			$is_numeric &= is_numeric(strip_tags($row[$column]));
+			if (!$is_numeric) {
+				break;
+			}
+		}
+		return $is_numeric;
+	}
+
+	/**
+	 * Checks whether a column of a 2D-array contains only dates (GNU date syntax)
+	 * @param array $data		The data-array
+	 * @param int $column		The index of the column to check
+	 * @return bool				TRUE if column contains only dates, FALSE otherwise
+	 * @author bart.mollet@hogent.be
+	 */
+	private function is_date_column(& $data, $column) {
+		$is_date = true;
+		foreach ($data as $index => & $row) {
+			if (strlen(strip_tags($row[$column])) != 0) {
+				$check_date = strtotime(strip_tags($row[$column]));
+				// strtotime Returns a timestamp on success, FALSE otherwise.
+				// Previous to PHP 5.1.0, this function would return -1 on failure.
+				$is_date &= ($check_date != -1 && $check_date);
+			} else {
+				$is_date &= false;
+			}
+			if (!$is_date) {
+				break;
+			}
+		}
+		return $is_date;
+	}
+
+	/**
+	 * Checks whether a column of a 2D-array contains only images (<img src="path/file.ext" alt=".."/>)
+	 * @param array $data		The data-array
+	 * @param int $column		The index of the column to check
+	 * @return bool				TRUE if column contains only images, FALSE otherwise
+	 * @author bart.mollet@hogent.be
+	 */
+	private function is_image_column(& $data, $column) {
+		$is_image = true;
+		foreach ($data as $index => & $row) {
+			$is_image &= strlen(trim(strip_tags($row[$column], '<img>'))) > 0; // at least one img-tag
+			$is_image &= strlen(trim(strip_tags($row[$column]))) == 0; // and no text outside attribute-values
+			if (!$is_image) {
+				break;
+			}
+		}
+		return $is_image;
+	}
+
+}

+ 2 - 263
main/inc/lib/tablesort.lib.php

@@ -1,266 +1,5 @@
 <?php
-/* For licensing terms, see /license.txt */
-/**
- *	This is a library with some functions to sort tabular data
- *
- *	@package chamilo.library
- */
-/**
- * Code
- */
-define('SORT_DATE', 3);
-define('SORT_IMAGE', 4);
 
 /**
- *	@package chamilo.library
- */
-class TableSort {
-
-	/**
-	 * Sorts 2-dimensional table.
-	 * @param array $data The data to be sorted.
-	 * @param int $column The column on which the data should be sorted (default = 0)
-	 * @param string $direction The direction to sort (SORT_ASC (default) or SORT_DESC)
-	 * @param constant $type How should data be sorted (SORT_REGULAR, SORT_NUMERIC,
-	 * SORT_STRING,SORT_DATE,SORT_IMAGE)
-	 * @return array The sorted dataset
-	 * @author bart.mollet@hogent.be
-	 */
-	public function sort_table($data, $column = 0, $direction = SORT_ASC, $type = SORT_REGULAR) {
-		if (!is_array($data) || empty($data)) {
-			return array();
-		}
-		if ($column != strval(intval($column))) {
-			// Probably an attack
-			return $data;
-		}
-		if (!in_array($direction, array(SORT_ASC, SORT_DESC))) {
-			// Probably an attack
-			return $data;
-		}
-
-		if ($type == SORT_REGULAR) {
-			if (TableSort::is_image_column($data, $column)) {
-				$type = SORT_IMAGE;
-			} elseif (TableSort::is_date_column($data, $column)) {
-				$type = SORT_DATE;
-			} elseif (TableSort::is_numeric_column($data, $column)) {
-				$type = SORT_NUMERIC;
-			} else {
-				$type = SORT_STRING;
-			}
-		}
-
-		$compare_operator = $direction == SORT_ASC ? '>' : '<=';
-		switch ($type) {
-			case SORT_NUMERIC:
-				$compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
-				break;
-			case SORT_IMAGE:
-				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "<img>")), api_strtolower(strip_tags($b['.$column.'], "<img>"))) '.$compare_operator.' 0;';
-				break;
-			case SORT_DATE:
-				$compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
-				break;
-			case SORT_STRING:
-			default:
-				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
-				break;
-		}
-
-		// Sort the content
-		usort($data, create_function('$a, $b', $compare_function));
-
-		return $data;
-	}
-
-	/**
-	 * Sorts 2-dimensional table. It is possile changing the columns that will be shown and the way that the columns are to be sorted.
-	 * @param array $data The data to be sorted.
-	 * @param int $column The column on which the data should be sorted (default = 0)
-	 * @param string $direction The direction to sort (SORT_ASC (default) orSORT_DESC)
-	 * @param array $column_show The columns that we will show in the table i.e: $column_show = array('1','0','1') we will show the 1st and the 3th column.
-	 * @param array $column_order Changes how the columns will be sorted ie. $column_order = array('0','3','2','3') The column [1] will be sorted like the column [3]
-	 * @param constant $type How should data be sorted (SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_DATE, SORT_IMAGE)
-	 * @return array The sorted dataset
-	 * @author bart.mollet@hogent.be
-	 */
-	public function sort_table_config($data, $column = 0, $direction = SORT_ASC, $column_show = null, $column_order = null, $type = SORT_REGULAR, $doc_filter = false) {
-
-		if (!is_array($data) || empty($data)) {
-			return array();
-		}
-		if ($column != strval(intval($column))) {
-			// Probably an attack
-			return $data;
-		}
-		if (!in_array($direction, array(SORT_ASC, SORT_DESC))) {
-			// Probably an attack
-			return $data;
-		}
-
-		// Change columns sort
-	 	// Here we say that the real way of how the columns are going to be order is manage by the $column_order array
-	 	if (is_array($column_order)) {
-	 		$column = isset($column_order[$column]) ? $column_order[$column] : $column;
-	 	}
-
-		if ($type == SORT_REGULAR) {
-			if (TableSort::is_image_column($data, $column)) {
-				$type = SORT_IMAGE;
-			} elseif (TableSort::is_date_column($data, $column)) {
-				$type = SORT_DATE;
-			} elseif (TableSort::is_numeric_column($data, $column)) {
-				$type = SORT_NUMERIC;
-			} else {
-				$type = SORT_STRING;
-			}
-		}
-		
-		//This fixs only works in the document tool when ordering by name
-		if ($doc_filter && in_array($type, array(SORT_STRING))) {
-    		$data_to_sort = $folder_to_sort = array();
-    		$new_data = array();
-    		if (!empty($data)) {
-        		foreach ($data as $document) {
-        		    if ($document['type'] == 'folder') {
-        		      $docs_to_sort[$document['id']]   = api_strtolower($document['name']);
-        		    } else {
-        		      $folder_to_sort[$document['id']] = api_strtolower($document['name']);  
-        		    }
-        		    $new_data[$document['id']] = $document;    		        		     
-        		}   
-                if ($direction == SORT_ASC) {
-                    if (!empty($docs_to_sort)) {
-                        api_natrsort($docs_to_sort);
-                    }
-                    if (!empty($folder_to_sort)) {
-                        api_natrsort($folder_to_sort);
-                    }                
-                } else {
-                    if (!empty($docs_to_sort)) {
-                        api_natsort($docs_to_sort);
-                    }
-                    if (!empty($folder_to_sort)) {
-                        api_natsort($folder_to_sort);
-                    }
-                }
-                $new_data_order = array();
-                if (!empty($docs_to_sort)) {
-                    foreach($docs_to_sort as $id => $document) {
-                        $new_data_order[] = $new_data[$id];
-                    }
-                }
-                if (!empty($folder_to_sort)) {
-                    foreach($folder_to_sort as $id => $document) {
-                        $new_data_order[] = $new_data[$id];
-                    }
-                }
-                $data = $new_data_order; 		
-    		}              
-		} else {		
-    		$compare_operator = $direction == SORT_ASC ? '>' : '<=';    		
-    		switch ($type) {
-    			case SORT_NUMERIC:
-    				$compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
-    				break;
-    			case SORT_IMAGE:
-    				$compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "<img>")), api_strtolower(strip_tags($b['.$column.'], "<img>"))) '.$compare_operator.' 0;';
-    				break;
-    			case SORT_DATE:
-    				$compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
-    				break;
-    			case SORT_STRING:
-    			default:
-    			    $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
-    				break;
-    		}		
-        	// Sort the content
-    		usort($data, create_function('$a, $b', $compare_function));
-		}
-
-		if (is_array($column_show)) {
-			// We show only the columns data that were set up on the $column_show array
-			$new_order_data = array();
-			$count_data = count($data);
-			$count_column_show = count($column_show);
-			for ($j = 0; $j < $count_data; $j++) {
-				$k = 0;
-				for ($i = 0; $i < $count_column_show; $i++) {
-					if ($column_show[$i]) {
-						$new_order_data[$j][$k] = $data[$j][$i];
-					}
-					$k++;
-				}
-			}
-			// Replace the multi-arrays
-			$data = $new_order_data;
-		}
-
-		return $data;
-	}
-
-	/**
-	 * Checks whether a column of a 2D-array contains only numeric values
-	 * @param array $data		The data-array
-	 * @param int $column		The index of the column to check
-	 * @return bool				TRUE if column contains only dates, FALSE otherwise
-	 * @todo Take locale into account (eg decimal point or comma ?)
-	 * @author bart.mollet@hogent.be
-	 */
-	private function is_numeric_column(& $data, $column) {
-		$is_numeric = true;
-		foreach ($data as $index => & $row) {
-			$is_numeric &= is_numeric(strip_tags($row[$column]));
-			if (!$is_numeric) {
-				break;
-			}
-		}
-		return $is_numeric;
-	}
-
-	/**
-	 * Checks whether a column of a 2D-array contains only dates (GNU date syntax)
-	 * @param array $data		The data-array
-	 * @param int $column		The index of the column to check
-	 * @return bool				TRUE if column contains only dates, FALSE otherwise
-	 * @author bart.mollet@hogent.be
-	 */
-	private function is_date_column(& $data, $column) {
-		$is_date = true;
-		foreach ($data as $index => & $row) {
-			if (strlen(strip_tags($row[$column])) != 0) {
-				$check_date = strtotime(strip_tags($row[$column]));
-				// strtotime Returns a timestamp on success, FALSE otherwise.
-				// Previous to PHP 5.1.0, this function would return -1 on failure.
-				$is_date &= ($check_date != -1 && $check_date);
-			} else {
-				$is_date &= false;
-			}
-			if (!$is_date) {
-				break;
-			}
-		}
-		return $is_date;
-	}
-
-	/**
-	 * Checks whether a column of a 2D-array contains only images (<img src="path/file.ext" alt=".."/>)
-	 * @param array $data		The data-array
-	 * @param int $column		The index of the column to check
-	 * @return bool				TRUE if column contains only images, FALSE otherwise
-	 * @author bart.mollet@hogent.be
-	 */
-	private function is_image_column(& $data, $column) {
-		$is_image = true;
-		foreach ($data as $index => & $row) {
-			$is_image &= strlen(trim(strip_tags($row[$column], '<img>'))) > 0; // at least one img-tag
-			$is_image &= strlen(trim(strip_tags($row[$column]))) == 0; // and no text outside attribute-values
-			if (!$is_image) {
-				break;
-			}
-		}
-		return $is_image;
-	}
-
-}
+ * @see tablesort.class.php 
+ */

+ 1 - 1
main/inc/lib/tracking.lib.php

@@ -13,7 +13,7 @@
 define('SESSION_LINK_TARGET','_self');
 
 require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
-require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.class.php';
+//require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.class.php'; moved to autoload
 require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
 
 /**

+ 2 - 2
main/inc/local.inc.php

@@ -129,7 +129,7 @@
 	 variables should be initialised here
  */
 
-require_once api_get_path(LIBRARY_PATH).'conditionallogin.lib.php';
+//require_once api_get_path(LIBRARY_PATH).'conditionallogin.lib.php'; moved to autologin
 // verified if exists the username and password in session current
 
 if (isset($_SESSION['info_current_user'][1]) && isset($_SESSION['info_current_user'][2])) {	
@@ -669,7 +669,7 @@ if (isset($uidReset) && $uidReset) {    // session data refresh requested
                     //If we just want to reset info without redirecting user
                     unset($_SESSION['noredirection']);
                 } else {
-                    require_once api_get_path(LIBRARY_PATH).'loginredirection.lib.php';
+                    //require_once api_get_path(LIBRARY_PATH).'loginredirection.lib.php'; moved to autologin
                     LoginRedirection::redirect();
                 }
             }

+ 1 - 1
tests/main/inc/lib/groupmanager.lib.test.php

@@ -5,7 +5,7 @@ require_once(api_get_path(LIBRARY_PATH).'course.lib.php');
 require_once(api_get_path(LIBRARY_PATH).'classmanager.lib.php');
 require_once(api_get_path(LIBRARY_PATH).'fileUpload.lib.php');
 require_once(api_get_path(LIBRARY_PATH).'fileManage.lib.php');
-require_once(api_get_path(LIBRARY_PATH).'tablesort.lib.php');
+//require_once(api_get_path(LIBRARY_PATH).'tablesort.lib.php');moved to autoload
 
 
 class TestGroupManager extends UnitTestCase {