Moving installation files in chash

skala
Julio Montoya 13 years ago
parent ad23368aed
commit 09bd04ce23
  1. 5
      console.php
  2. 4
      main/inc/services.php
  3. 1736
      main/install/1.8.7/db_course1.sql
  4. 1736
      main/install/1.8.7/db_course2.sql
  5. 2420
      main/install/1.8.7/db_main.sql
  6. 267
      main/install/1.8.7/db_stats.sql
  7. 41
      main/install/1.8.7/db_user.sql
  8. 1782
      main/install/1.8.8/db_course1.sql
  9. 1782
      main/install/1.8.8/db_course2.sql
  10. 2648
      main/install/1.8.8/db_main.sql
  11. 268
      main/install/1.8.8/db_stats.sql
  12. 44
      main/install/1.8.8/db_user.sql
  13. 231
      main/install/1.8.8/migrate-db-1.8.7-1.8.8-pre.sql
  14. 144
      main/install/1.8.8/update-db-1.8.7-1.8.8.inc.php
  15. 1947
      main/install/1.9.0/db_course.sql
  16. 3028
      main/install/1.9.0/db_main.sql
  17. 329
      main/install/1.9.0/db_stats.sql
  18. 53
      main/install/1.9.0/db_user.sql
  19. 326
      main/install/1.9.0/migrate-db-1.8.8-1.9.0-pre.sql
  20. 539
      main/install/1.9.0/update-db-1.8.8-1.9.0.inc.php
  21. 23
      main/install/1.9.0/update-files-1.8.8-1.9.0.inc.php
  22. 18
      main/install/index.php
  23. 598
      src/ChamiloLMS/Command/Database/CommonCommand.php
  24. 509
      src/ChamiloLMS/Command/Database/InstallCommand.php
  25. 26
      src/ChamiloLMS/Command/Database/InstallExtendCommand.php
  26. 67
      src/ChamiloLMS/Command/Database/SetupCommand.php
  27. 57
      src/ChamiloLMS/Command/Database/StatusCommand.php
  28. 613
      src/ChamiloLMS/Command/Database/UpgradeCommand.php
  29. 48
      src/ChamiloLMS/Component/Installer/Installer.php
  30. 2
      vendor/autoload.php
  31. 6
      vendor/composer/autoload_real.php
  32. 65
      vendor/composer/installed.json

@ -71,11 +71,10 @@ $cli->addCommands(
new \Doctrine\DBAL\Migrations\Tools\Console\Command\VersionCommand(),
// Chamilo commands.
new ChamiloLMS\Command\Database\UpgradeCommand(),
/*new ChamiloLMS\Command\Database\UpgradeCommand(),
new ChamiloLMS\Command\Database\InstallCommand(),
//new ChamiloLMS\Command\Database\InstallExtendCommand(),
new ChamiloLMS\Command\Database\StatusCommand(),
new ChamiloLMS\Command\Database\SetupCommand(),
new ChamiloLMS\Command\Database\SetupCommand(),*/
new ChamiloLMS\Command\Template\AsseticDumpCommand(),
new ChamiloLMS\Command\Translation\ExportLanguagesCommand(),

@ -485,6 +485,10 @@ class ChamiloServiceProvider implements ServiceProviderInterface
$db = new Database($app['db'], $app['dbs']);
return $db;
});
$app['installer'] = $app->share(function () use ($app) {
return new ChamiloLMS\Component\Installer\Installer();
});
}
public function boot(Application $app)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,267 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE TABLE track_c_browsers (
id int NOT NULL auto_increment,
browser varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_countries (
id int NOT NULL auto_increment,
code varchar(40) NOT NULL default '',
country varchar(50) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_os (
id int NOT NULL auto_increment,
os varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_providers (
id int NOT NULL auto_increment,
provider varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_referers (
id int NOT NULL auto_increment,
referer varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_e_access (
access_id int NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL default '',
access_tool varchar(30) default NULL,
access_session_id int NOT NULL default 0,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code)
);
CREATE TABLE track_e_lastaccess (
access_id bigint NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL,
access_tool varchar(30) default NULL,
access_session_id int unsigned default NULL,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code),
KEY access_session_id (access_session_id)
);
CREATE TABLE track_e_default (
default_id int NOT NULL auto_increment,
default_user_id int unsigned NOT NULL default 0,
default_cours_code varchar(40) NOT NULL default '',
default_date datetime NOT NULL default '0000-00-00 00:00:00',
default_event_type varchar(20) NOT NULL default '',
default_value_type varchar(20) NOT NULL default '',
default_value tinytext NOT NULL,
PRIMARY KEY (default_id)
);
CREATE TABLE track_e_downloads (
down_id int NOT NULL auto_increment,
down_user_id int unsigned default NULL,
down_date datetime NOT NULL default '0000-00-00 00:00:00',
down_cours_id varchar(40) NOT NULL default '',
down_doc_path varchar(255) NOT NULL default '',
down_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (down_id),
KEY down_user_id (down_user_id),
KEY down_cours_id (down_cours_id)
);
CREATE TABLE track_e_exercices (
exe_id int NOT NULL auto_increment,
exe_user_id int unsigned default NULL,
exe_date datetime NOT NULL default '0000-00-00 00:00:00',
exe_cours_id varchar(40) NOT NULL default '',
exe_exo_id mediumint unsigned NOT NULL default 0,
exe_result float(6,2) NOT NULL default 0,
exe_weighting float(6,2) NOT NULL default 0,
PRIMARY KEY (exe_id),
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
ALTER TABLE track_e_exercices ADD status varchar(20) NOT NULL default '';
ALTER TABLE track_e_exercices ADD data_tracking text NOT NULL default '';
ALTER TABLE track_e_exercices ADD start_date datetime NOT NULL default '0000-00-00 00:00:00';
ALTER TABLE track_e_exercices ADD steps_counter SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD session_id SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD INDEX ( session_id ) ;
ALTER TABLE track_e_exercices ADD orig_lp_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD orig_lp_item_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD exe_duration int UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD COLUMN expired_time_control datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
CREATE TABLE track_e_attempt (
exe_id int default NULL,
user_id int NOT NULL default 0,
question_id int NOT NULL default 0,
answer text NOT NULL,
teacher_comment text NOT NULL,
marks float(6,2) NOT NULL default 0,
course_code varchar(40) NOT NULL default '',
position int default 0,
tms datetime NOT NULL default '0000-00-00 00:00:00',
session_id INT NOT NULL DEFAULT 0
);
ALTER TABLE track_e_attempt ADD INDEX (exe_id);
ALTER TABLE track_e_attempt ADD INDEX (user_id);
ALTER TABLE track_e_attempt ADD INDEX (question_id);
ALTER TABLE track_e_attempt ADD INDEX (session_id);
CREATE TABLE track_e_attempt_recording (
exe_id int unsigned NOT NULL,
question_id int unsigned NOT NULL,
marks int NOT NULL,
insert_date datetime NOT NULL default '0000-00-00 00:00:00',
author int unsigned NOT NULL,
teacher_comment text NOT NULL,
session_id INT NOT NULL DEFAULT 0
);
ALTER TABLE track_e_attempt_recording ADD INDEX (exe_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (question_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (session_id);
CREATE TABLE track_e_hotpotatoes (
exe_name VARCHAR( 255 ) NOT NULL ,
exe_user_id int unsigned DEFAULT NULL ,
exe_date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL ,
exe_cours_id varchar(40) NOT NULL ,
exe_result smallint default 0 NOT NULL ,
exe_weighting smallint default 0 NOT NULL,
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
CREATE TABLE track_e_links (
links_id int NOT NULL auto_increment,
links_user_id int unsigned default NULL,
links_date datetime NOT NULL default '0000-00-00 00:00:00',
links_cours_id varchar(40) NOT NULL default '' ,
links_link_id int NOT NULL default 0,
links_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (links_id),
KEY links_cours_id (links_cours_id),
KEY links_user_id (links_user_id)
);
CREATE TABLE track_e_login (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
logout_date datetime NULL default NULL,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
CREATE TABLE track_e_online (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
course varchar(40) default NULL,
session_id INT NOT NULL DEFAULT 0,
access_url_id INT NOT NULL DEFAULT 1,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
CREATE TABLE track_e_open (
open_id int NOT NULL auto_increment,
open_remote_host tinytext NOT NULL,
open_agent tinytext NOT NULL,
open_referer tinytext NOT NULL,
open_date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (open_id)
);
CREATE TABLE track_e_uploads (
upload_id int NOT NULL auto_increment,
upload_user_id int unsigned default NULL,
upload_date datetime NOT NULL default '0000-00-00 00:00:00',
upload_cours_id varchar(40) NOT NULL default '',
upload_work_id int NOT NULL default 0,
upload_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (upload_id),
KEY upload_user_id (upload_user_id),
KEY upload_cours_id (upload_cours_id)
);
CREATE TABLE track_e_course_access (
course_access_id int NOT NULL auto_increment,
course_code varchar(40) NOT NULL,
user_id int NOT NULL,
login_course_date datetime NOT NULL default '0000-00-00 00:00:00',
logout_course_date datetime default NULL,
counter int NOT NULL,
session_id int NOT NULL default 0,
PRIMARY KEY (course_access_id)
);
CREATE TABLE track_e_hotspot (
hotspot_id int NOT NULL auto_increment,
hotspot_user_id int NOT NULL,
hotspot_course_code varchar(50) NOT NULL,
hotspot_exe_id int NOT NULL,
hotspot_question_id int NOT NULL,
hotspot_answer_id int NOT NULL,
hotspot_correct tinyint(3) unsigned NOT NULL,
hotspot_coordinate text NOT NULL,
PRIMARY KEY (hotspot_id),
KEY hotspot_course_code (hotspot_course_code),
KEY hotspot_user_id (hotspot_user_id),
KEY hotspot_exe_id (hotspot_exe_id),
KEY hotspot_question_id (hotspot_question_id)
);
CREATE TABLE track_e_item_property (
id int NOT NULL auto_increment PRIMARY KEY,
course_id int NOT NULL,
item_property_id int NOT NULL,
title varchar(255),
content text,
progress int NOT NULL default 0,
lastedit_date datetime NOT NULL default '0000-00-00 00:00:00',
lastedit_user_id int NOT NULL,
session_id int NOT NULL default 0
);
ALTER TABLE track_e_course_access ADD INDEX (user_id);
ALTER TABLE track_e_course_access ADD INDEX (login_course_date);
ALTER TABLE track_e_course_access ADD INDEX (course_code);
ALTER TABLE track_e_course_access ADD INDEX (session_id);
ALTER TABLE track_e_access ADD INDEX (access_session_id);
ALTER TABLE track_e_online ADD INDEX (course);
ALTER TABLE track_e_online ADD INDEX (session_id);
ALTER TABLE track_e_item_property ADD INDEX (course_id, item_property_id, session_id);
ALTER TABLE track_e_downloads ADD INDEX (down_session_id);
ALTER TABLE track_e_links ADD INDEX (links_session_id);
ALTER TABLE track_e_uploads ADD INDEX (upload_session_id);

@ -1,41 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE TABLE personal_agenda (
id int NOT NULL auto_increment,
user int unsigned,
title text,
`text` text,
`date` datetime default NULL,
enddate datetime default NULL,
course varchar(255),
parent_event_id int null,
UNIQUE KEY id (id)
);
CREATE TABLE personal_agenda_repeat (
cal_id INT DEFAULT 0 NOT NULL,
cal_type VARCHAR(20),
cal_end INT,
cal_frequency INT DEFAULT 1,
cal_days CHAR(7),
PRIMARY KEY (cal_id)
);
CREATE TABLE personal_agenda_repeat_not (
cal_id INT NOT NULL,
cal_date INT NOT NULL,
PRIMARY KEY ( cal_id, cal_date )
);
CREATE TABLE user_course_category (
id int unsigned NOT NULL auto_increment,
user_id int unsigned NOT NULL default 0,
title text NOT NULL,
sort int,
PRIMARY KEY (id)
);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,268 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE TABLE track_c_browsers (
id int NOT NULL auto_increment,
browser varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_countries (
id int NOT NULL auto_increment,
code varchar(40) NOT NULL default '',
country varchar(50) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_os (
id int NOT NULL auto_increment,
os varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_providers (
id int NOT NULL auto_increment,
provider varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_c_referers (
id int NOT NULL auto_increment,
referer varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
CREATE TABLE track_e_access (
access_id int NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL default '',
access_tool varchar(30) default NULL,
access_session_id int NOT NULL default 0,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code)
);
CREATE TABLE track_e_lastaccess (
access_id bigint NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL,
access_tool varchar(30) default NULL,
access_session_id int unsigned default NULL,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code),
KEY access_session_id (access_session_id)
);
CREATE TABLE track_e_default (
default_id int NOT NULL auto_increment,
default_user_id int unsigned NOT NULL default 0,
default_cours_code varchar(40) NOT NULL default '',
default_date datetime NOT NULL default '0000-00-00 00:00:00',
default_event_type varchar(20) NOT NULL default '',
default_value_type varchar(20) NOT NULL default '',
default_value tinytext NOT NULL,
PRIMARY KEY (default_id)
);
CREATE TABLE track_e_downloads (
down_id int NOT NULL auto_increment,
down_user_id int unsigned default NULL,
down_date datetime NOT NULL default '0000-00-00 00:00:00',
down_cours_id varchar(40) NOT NULL default '',
down_doc_path varchar(255) NOT NULL default '',
down_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (down_id),
KEY down_user_id (down_user_id),
KEY down_cours_id (down_cours_id)
);
CREATE TABLE track_e_exercices (
exe_id int NOT NULL auto_increment,
exe_user_id int unsigned default NULL,
exe_date datetime NOT NULL default '0000-00-00 00:00:00',
exe_cours_id varchar(40) NOT NULL default '',
exe_exo_id mediumint unsigned NOT NULL default 0,
exe_result float(6,2) NOT NULL default 0,
exe_weighting float(6,2) NOT NULL default 0,
PRIMARY KEY (exe_id),
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
ALTER TABLE track_e_exercices ADD status varchar(20) NOT NULL default '';
ALTER TABLE track_e_exercices ADD data_tracking text NOT NULL default '';
ALTER TABLE track_e_exercices ADD start_date datetime NOT NULL default '0000-00-00 00:00:00';
ALTER TABLE track_e_exercices ADD steps_counter SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD session_id SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD INDEX ( session_id ) ;
ALTER TABLE track_e_exercices ADD orig_lp_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD orig_lp_item_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD exe_duration int UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD COLUMN expired_time_control datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE track_e_exercices ADD COLUMN orig_lp_item_view_id INT NOT NULL DEFAULT 0;
CREATE TABLE track_e_attempt (
exe_id int default NULL,
user_id int NOT NULL default 0,
question_id int NOT NULL default 0,
answer text NOT NULL,
teacher_comment text NOT NULL,
marks float(6,2) NOT NULL default 0,
course_code varchar(40) NOT NULL default '',
position int default 0,
tms datetime NOT NULL default '0000-00-00 00:00:00',
session_id INT NOT NULL DEFAULT 0
);
ALTER TABLE track_e_attempt ADD INDEX (exe_id);
ALTER TABLE track_e_attempt ADD INDEX (user_id);
ALTER TABLE track_e_attempt ADD INDEX (question_id);
ALTER TABLE track_e_attempt ADD INDEX (session_id);
CREATE TABLE track_e_attempt_recording (
exe_id int unsigned NOT NULL,
question_id int unsigned NOT NULL,
marks int NOT NULL,
insert_date datetime NOT NULL default '0000-00-00 00:00:00',
author int unsigned NOT NULL,
teacher_comment text NOT NULL,
session_id INT NOT NULL DEFAULT 0
);
ALTER TABLE track_e_attempt_recording ADD INDEX (exe_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (question_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (session_id);
CREATE TABLE track_e_hotpotatoes (
exe_name VARCHAR( 255 ) NOT NULL ,
exe_user_id int unsigned DEFAULT NULL ,
exe_date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL ,
exe_cours_id varchar(40) NOT NULL ,
exe_result smallint default 0 NOT NULL ,
exe_weighting smallint default 0 NOT NULL,
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
CREATE TABLE track_e_links (
links_id int NOT NULL auto_increment,
links_user_id int unsigned default NULL,
links_date datetime NOT NULL default '0000-00-00 00:00:00',
links_cours_id varchar(40) NOT NULL default '' ,
links_link_id int NOT NULL default 0,
links_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (links_id),
KEY links_cours_id (links_cours_id),
KEY links_user_id (links_user_id)
);
CREATE TABLE track_e_login (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
logout_date datetime NULL default NULL,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
CREATE TABLE track_e_online (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
course varchar(40) default NULL,
session_id INT NOT NULL DEFAULT 0,
access_url_id INT NOT NULL DEFAULT 1,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
CREATE TABLE track_e_open (
open_id int NOT NULL auto_increment,
open_remote_host tinytext NOT NULL,
open_agent tinytext NOT NULL,
open_referer tinytext NOT NULL,
open_date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (open_id)
);
CREATE TABLE track_e_uploads (
upload_id int NOT NULL auto_increment,
upload_user_id int unsigned default NULL,
upload_date datetime NOT NULL default '0000-00-00 00:00:00',
upload_cours_id varchar(40) NOT NULL default '',
upload_work_id int NOT NULL default 0,
upload_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (upload_id),
KEY upload_user_id (upload_user_id),
KEY upload_cours_id (upload_cours_id)
);
CREATE TABLE track_e_course_access (
course_access_id int NOT NULL auto_increment,
course_code varchar(40) NOT NULL,
user_id int NOT NULL,
login_course_date datetime NOT NULL default '0000-00-00 00:00:00',
logout_course_date datetime default NULL,
counter int NOT NULL,
session_id int NOT NULL default 0,
PRIMARY KEY (course_access_id)
);
CREATE TABLE track_e_hotspot (
hotspot_id int NOT NULL auto_increment,
hotspot_user_id int NOT NULL,
hotspot_course_code varchar(50) NOT NULL,
hotspot_exe_id int NOT NULL,
hotspot_question_id int NOT NULL,
hotspot_answer_id int NOT NULL,
hotspot_correct tinyint(3) unsigned NOT NULL,
hotspot_coordinate text NOT NULL,
PRIMARY KEY (hotspot_id),
KEY hotspot_course_code (hotspot_course_code),
KEY hotspot_user_id (hotspot_user_id),
KEY hotspot_exe_id (hotspot_exe_id),
KEY hotspot_question_id (hotspot_question_id)
);
CREATE TABLE track_e_item_property (
id int NOT NULL auto_increment PRIMARY KEY,
course_id int NOT NULL,
item_property_id int NOT NULL,
title varchar(255),
content text,
progress int NOT NULL default 0,
lastedit_date datetime NOT NULL default '0000-00-00 00:00:00',
lastedit_user_id int NOT NULL,
session_id int NOT NULL default 0
);
ALTER TABLE track_e_course_access ADD INDEX (user_id);
ALTER TABLE track_e_course_access ADD INDEX (login_course_date);
ALTER TABLE track_e_course_access ADD INDEX (course_code);
ALTER TABLE track_e_course_access ADD INDEX (session_id);
ALTER TABLE track_e_access ADD INDEX (access_session_id);
ALTER TABLE track_e_online ADD INDEX (course);
ALTER TABLE track_e_online ADD INDEX (session_id);
ALTER TABLE track_e_item_property ADD INDEX (course_id, item_property_id, session_id);
ALTER TABLE track_e_downloads ADD INDEX (down_session_id);
ALTER TABLE track_e_links ADD INDEX (links_session_id);
ALTER TABLE track_e_uploads ADD INDEX (upload_session_id);

@ -1,44 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE TABLE personal_agenda (
id int NOT NULL auto_increment,
user int unsigned,
title text,
`text` text,
`date` datetime default NULL,
enddate datetime default NULL,
course varchar(255),
parent_event_id int null,
PRIMARY KEY id (id)
);
CREATE TABLE personal_agenda_repeat (
cal_id INT DEFAULT 0 NOT NULL,
cal_type VARCHAR(20),
cal_end INT,
cal_frequency INT DEFAULT 1,
cal_days CHAR(7),
PRIMARY KEY (cal_id)
);
CREATE TABLE personal_agenda_repeat_not (
cal_id INT NOT NULL,
cal_date INT NOT NULL,
PRIMARY KEY ( cal_id, cal_date )
);
CREATE TABLE user_course_category (
id int unsigned NOT NULL auto_increment,
user_id int unsigned NOT NULL default 0,
title text NOT NULL,
sort int,
PRIMARY KEY (id)
);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_user (user);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_parent (parent_event_id);
ALTER TABLE user_course_category ADD INDEX idx_user_c_cat_uid (user_id);

@ -1,231 +0,0 @@
-- This script updates the databases structure before migrating the data from
-- version 1.8.7 (or 1.8.7.1) to version 1.8.8
-- it is intended as a standalone script, however, because of the multiple
-- databases related difficulties, it should be parsed by a PHP script in
-- order to connect to and update the right databases.
-- There is one line per query, allowing the PHP function file() to read
-- all lines separately into an array. The xxMAINxx-type markers are there
-- to tell the PHP script which database we're talking about.
-- By always using the keyword "TABLE" in the queries, we should be able
-- to retrieve and modify the table name from the PHP script if needed, which
-- will allow us to deal with the unique-database-type installations
--
-- This first part is for the main database
-- xxMAINxx
DROP PROCEDURE IF EXISTS drop_index;
CREATE PROCEDURE drop_index(in t_name varchar(128), in i_name varchar(128) ) BEGIN IF ( (SELECT count(*) AS index_exists FROM information_schema.statistics WHERE table_schema = DATABASE( ) AND table_name = t_name AND index_name = i_name ) > 0) THEN SET @s = CONCAT('DROP INDEX ' , i_name , ' ON ' , t_name ); PREPARE stmt FROM @s; EXECUTE stmt; END IF; END;
CREATE TABLE course_request (id int NOT NULL AUTO_INCREMENT, code varchar(40) NOT NULL, user_id int unsigned NOT NULL default '0', directory varchar(40) DEFAULT NULL, db_name varchar(40) DEFAULT NULL, course_language varchar(20) DEFAULT NULL, title varchar(250) DEFAULT NULL, description text, category_code varchar(40) DEFAULT NULL, tutor_name varchar(200) DEFAULT NULL, visual_code varchar(40) DEFAULT NULL, request_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00', objetives text, target_audience text, status int unsigned NOT NULL default '0', info int unsigned NOT NULL default '0', exemplary_content int unsigned NOT NULL default '0', PRIMARY KEY (id), UNIQUE KEY code (code));
CALL drop_index('settings_current', 'unique_setting');
CALL drop_index('settings_options', 'unique_setting_option');
ALTER TABLE settings_current ADD UNIQUE unique_setting (variable(110), subkey(110), category(110), access_url);
ALTER TABLE settings_options ADD UNIQUE unique_setting_option (variable(165), value(165));
ALTER TABLE settings_current CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE settings_options CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE user MODIFY COLUMN username VARCHAR(40) NOT NULL;
UPDATE settings_current SET variable='chamilo_database_version' WHERE variable='dokeos_database_version';
ALTER TABLE sys_announcement ADD COLUMN access_url_id INT NOT NULL default 1;
ALTER TABLE sys_calendar ADD COLUMN access_url_id INT NOT NULL default 1;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('users_copy_files', NULL, 'radio', 'Tools', 'true', 'AllowUsersCopyFilesTitle','AllowUsersCopyFilesComment', NULL,NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('users_copy_files', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('users_copy_files', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_validation', NULL, 'radio', 'Platform', 'false', 'EnableCourseValidation', 'EnableCourseValidationComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('course_validation', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('course_validation', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_validation_terms_and_conditions_url', NULL, 'textfield', 'Platform', '', 'CourseValidationTermsAndConditionsLink', 'CourseValidationTermsAndConditionsLinkComment', NULL, NULL, 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('sso_authentication',NULL,'radio','Security','false','EnableSSOTitle','EnableSSOComment',NULL,NULL,1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('sso_authentication_domain',NULL,'textfield','Security','','SSOServerDomainTitle','SSOServerDomainComment',NULL,NULL,1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('sso_authentication_auth_uri',NULL,'textfield','Security','/?q=user','SSOServerAuthURITitle','SSOServerAuthURIComment',NULL,NULL,1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('sso_authentication_unauth_uri',NULL,'textfield','Security','/?q=logout','SSOServerUnAuthURITitle','SSOServerUnAuthURIComment',NULL,NULL,1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('sso_authentication_protocol',NULL,'radio','Security','http://','SSOServerProtocolTitle','SSOServerProtocolComment',NULL,NULL,1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('sso_authentication', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('sso_authentication', 'false', 'No');
INSERT INTO settings_options (variable, value, display_text) VALUES ('sso_authentication_protocol', 'http://', 'http://');
INSERT INTO settings_options (variable, value, display_text) VALUES ('sso_authentication_protocol', 'https://', 'https://');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_asciisvg',NULL,'radio','Editor','false','AsciiSvgTitle','AsciiSvgComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_asciisvg', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_asciisvg', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('include_asciimathml_script',NULL,'radio','Editor','false','IncludeAsciiMathMlTitle','IncludeAsciiMathMlComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('include_asciimathml_script', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('include_asciimathml_script', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_wiris',NULL,'radio','Editor','false','EnabledWirisTitle','EnabledWirisComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_wiris', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_wiris', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_spellcheck',NULL,'radio','Editor','false','AllowSpellCheckTitle','AllowSpellCheckComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_spellcheck', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_spellcheck', 'false', 'No');
ALTER TABLE course ADD INDEX idx_course_category_code (category_code);
ALTER TABLE course ADD INDEX idx_course_directory (directory(10));
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('force_wiki_paste_as_plain_text',NULL,'radio','Editor','false','ForceWikiPasteAsPlainText','ForceWikiPasteAsPlainTextComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('force_wiki_paste_as_plain_text', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('force_wiki_paste_as_plain_text', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_googlemaps',NULL,'radio','Editor','false','EnabledGooglemapsTitle','EnabledGooglemapsComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_googlemaps', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_googlemaps', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_imgmap',NULL,'radio','Editor','true','EnabledImageMapsTitle','EnabledImageMapsComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_imgmap', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_imgmap', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_support_svg',NULL,'radio','Tools','true','EnabledSVGTitle','EnabledSVGComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_svg', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_svg', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_enable', NULL,'radio', 'Platform', 'false','PDFExportWatermarkEnableTitle', 'PDFExportWatermarkEnableComment','platform',NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_enable','true','Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_enable','false','No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_by_course', NULL,'radio', 'Platform', 'false','PDFExportWatermarkByCourseTitle', 'PDFExportWatermarkByCourseComment','platform',NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_by_course','true','Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('pdf_export_watermark_by_course','false','No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('hide_courses_in_sessions', NULL,'radio', 'Platform', 'false','HideCoursesInSessionsTitle', 'HideCoursesInSessionsComment','platform',NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('hide_courses_in_sessions','true','Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('hide_courses_in_sessions','false','No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('pdf_export_watermark_text', NULL,'textfield', 'Platform', '', 'PDFExportWatermarkTextTitle','PDFExportWatermarkTextComment','platform',NULL, 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_insertHtml',NULL,'radio','Editor','true','EnabledInsertHtmlTitle','EnabledInsertHtmlComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_insertHtml', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_insertHtml', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('students_export2pdf',NULL,'radio','Tools','true','EnabledStudentExport2PDFTitle','EnabledStudentExport2PDFComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('students_export2pdf', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('students_export2pdf', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('exercise_min_score', NULL,'textfield', 'Course', '', 'ExerciseMinScoreTitle', 'ExerciseMinScoreComment','platform',NULL, 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('exercise_max_score', NULL,'textfield', 'Course', '', 'ExerciseMaxScoreTitle', 'ExerciseMaxScoreComment','platform',NULL, 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_users_folders',NULL,'radio','Tools','true','ShowUsersFoldersTitle','ShowUsersFoldersComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_users_folders', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_users_folders', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_default_folders',NULL,'radio','Tools','true','ShowDefaultFoldersTitle','ShowDefaultFoldersComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_default_folders', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_default_folders', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_chat_folder',NULL,'radio','Tools','true','ShowChatFolderTitle','ShowChatFolderComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_chat_folder', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_chat_folder', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_text2audio',NULL,'radio','Tools','false','Text2AudioTitle','Text2AudioComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_text2audio', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_text2audio', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','course_description','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'CourseDescription', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','calendar_event','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Agenda', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','document','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Documents', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','learnpath','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'LearningPath', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','link','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Links', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','announcement','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Announcements', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','forum','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Forums', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','dropbox','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Dropbox', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','quiz','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Quiz', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','user','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Users', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','group','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Groups', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','chat','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Chat', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','student_publication','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'StudentPublications', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','wiki','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Wiki', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','gradebook','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Gradebook', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','survey','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Survey', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','glossary','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Glossary', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','notebook','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Notebook', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','attendance','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Attendances', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','course_progress','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'CourseProgress', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','blog_management','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Blog',1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','tracking','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Stats',1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','course_maintenance','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'Maintenance',1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('course_hide_tools','course_setting','checkbox','Tools','false','CourseHideToolsTitle','CourseHideToolsComment',NULL,'CourseSettings',1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enabled_support_pixlr',NULL,'radio','Tools','false','EnabledPixlrTitle','EnabledPixlrComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_pixlr', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enabled_support_pixlr', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_groups_to_users',NULL,'radio','Platform','false','ShowGroupsToUsersTitle','ShowGroupsToUsersComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_groups_to_users', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_groups_to_users', 'false', 'No');
INSERT INTO language (original_name, english_name, isocode, dokeos_folder, available) VALUES ('हिन्दी', 'hindi', 'hi', 'hindi', 0);
ALTER TABLE session ADD COLUMN promotion_id INT NOT NULL;
CREATE TABLE career (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT NOT NULL, status INT NOT NULL default '0', created_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', updated_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (id));
CREATE TABLE promotion (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT NOT NULL, status INT NOT NULL default '0', career_id INT NOT NULL, created_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', updated_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY(id));
CREATE TABLE usergroup ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT NOT NULL,PRIMARY KEY (id));
CREATE TABLE usergroup_rel_user ( usergroup_id INT NOT NULL, user_id INT NOT NULL );
CREATE TABLE usergroup_rel_course ( usergroup_id INT NOT NULL, course_id INT NOT NULL );
CREATE TABLE usergroup_rel_session ( usergroup_id INT NOT NULL, session_id INT NOT NULL );
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('accessibility_font_resize',NULL,'radio','Platform','false','EnableAccessibilityFontResizeTitle','EnableAccessibilityFontResizeComment',NULL,NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('accessibility_font_resize', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('accessibility_font_resize', 'false', 'No');
CREATE TABLE notification (id BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT,dest_user_id INT NOT NULL, dest_mail CHAR(255),title CHAR(255), content CHAR(255), send_freq SMALLINT DEFAULT 1, created_at DATETIME NOT NULL, sent_at DATETIME NULL);
ALTER TABLE notification ADD index mail_notify_sent_index (sent_at);
ALTER TABLE notification ADD index mail_notify_freq_index (sent_at, send_freq, created_at);
ALTER TABLE session_category ADD COLUMN access_url_id INT NOT NULL default 1;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_quiz_scenario', NULL,'radio','Course','false','EnableQuizScenarioTitle','EnableQuizScenarioComment',NULL,NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_quiz_scenario', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_quiz_scenario', 'false', 'No');
UPDATE settings_current SET category='Search' WHERE variable='search_enable';
INSERT INTO settings_options (variable, value, display_text) VALUES ('homepage_view', 'activity_big', 'HomepageViewActivityBig');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_nanogong',NULL,'radio','Tools','false','EnableNanogongTitle','EnableNanogongComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_nanogong', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_nanogong', 'false', 'No');
ALTER TABLE gradebook_evaluation ADD COLUMN locked int NOT NULL DEFAULT 0;
UPDATE settings_current SET selected_value = '1.8.8.14911' WHERE variable = 'chamilo_database_version';
-- xxSTATSxx
ALTER TABLE track_e_exercices ADD COLUMN orig_lp_item_view_id INT NOT NULL DEFAULT 0;
-- xxUSERxx
ALTER TABLE personal_agenda ADD PRIMARY KEY (id);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_user (user);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_parent (parent_event_id);
ALTER TABLE user_course_category ADD INDEX idx_user_c_cat_uid (user_id);
-- xxCOURSExx
ALTER TABLE course_setting CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE forum_forum ADD start_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE forum_forum ADD end_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE wiki_mailcue ADD session_id smallint DEFAULT 0;
ALTER TABLE lp ADD COLUMN use_max_score INT DEFAULT 1;
ALTER TABLE lp_item MODIFY COLUMN max_score FLOAT UNSIGNED DEFAULT 100;
ALTER TABLE tool MODIFY COLUMN category varchar(20) not null default 'authoring';
ALTER TABLE lp ADD COLUMN autolunch INT DEFAULT 0;
ALTER TABLE lp ADD COLUMN created_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE lp ADD COLUMN modified_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE lp ADD COLUMN expired_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE lp ADD COLUMN publicated_on DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
CREATE TABLE quiz_question_option (id int NOT NULL, name varchar(255), position int unsigned NOT NULL, PRIMARY KEY (id));
ALTER TABLE quiz_question ADD COLUMN extra varchar(255) DEFAULT NULL;
ALTER TABLE quiz_question CHANGE question question TEXT NOT NULL;
INSERT INTO course_setting(variable,value,category) VALUES ('enable_lp_auto_launch',0,'learning_path');
INSERT INTO course_setting(variable,value,category) VALUES ('pdf_export_watermark_text','','course');
ALTER TABLE quiz ADD COLUMN propagate_neg INT NOT NULL DEFAULT 0;
ALTER TABLE quiz_answer MODIFY COLUMN hotspot_type ENUM('square','circle','poly','delineation','oar');
ALTER TABLE attendance ADD COLUMN locked int NOT NULL default 0;
CREATE TABLE attendance_sheet_log (id INT NOT NULL AUTO_INCREMENT, attendance_id INT NOT NULL DEFAULT 0, lastedit_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', lastedit_type VARCHAR(200) NOT NULL, lastedit_user_id INT NOT NULL DEFAULT 0, calendar_date_value DATETIME NULL, PRIMARY KEY (id));

@ -1,144 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
$update = function($_configuration, $mainConnection, $dryRun, $output, $app) {
$mainConnection->beginTransaction();
$singleDbForm = false;
$dbNameForm = $_configuration['main_database'];
if ($singleDbForm) {
$dbStatsForm = isset($_configuration['statistics_database']) ? $_configuration['statistics_database'] : $_configuration['main_database'];
$dbUserForm = isset($_configuration['user_personal_database']) ? $_configuration['user_personal_database'] : $_configuration['main_database'];
}
$prefix = '';
if ($singleDbForm) {
$prefix = $_configuration['table_prefix'];
}
iDatabase::select_db($dbNameForm);
$output->writeln('Getting the course list: ');
$res = iDatabase::query("SELECT code,db_name,directory,course_language FROM course WHERE target_course_code IS NULL ORDER BY code");
if ($res === false) { die('Error while querying the courses list in update_db-1.8.7.1-1.8.8.inc.php'); }
if (iDatabase::num_rows($res) > 0) {
$i = 0;
$list = array();
while ($row = iDatabase::fetch_array($res)) {
$list[] = $row;
$i++;
}
foreach ($list as $row_course) {
/**
* We connect to the right DB first to make sure we can use the queries
* without a database name
*/
if (!$singleDbForm) { // otherwise just use the main one
iDatabase::select_db($row_course['db_name']);
}
$output->writeln('Updating course db: ' . $row_course['db_name']);
$table_lp_item_view = $row_course['db_name'].".lp_item_view";
$table_lp_view = $row_course['db_name'].".lp_view";
$table_lp_item = $row_course['db_name'].".lp_item";
if ($singleDbForm) {
$table_lp_item_view = "$prefix{$row_course['db_name']}_lp_item_view";
$table_lp_view = "$prefix{$row_course['db_name']}_lp_view";
$table_lp_item = "$prefix{$row_course['db_name']}_lp_item";
}
// Filling the track_e_exercices.orig_lp_item_view_id field in order to have better traceability in exercises included in a LP see #3188
$query = "SELECT DISTINCT path as exercise_id, lp_item_id, lp_view_id, user_id, v.lp_id
FROM $table_lp_item_view iv INNER JOIN $table_lp_view v ON v.id = iv.lp_view_id INNER JOIN $table_lp_item i ON i.id = lp_item_id
WHERE item_type = 'quiz'";
$result = iDatabase::query($query);
if (iDatabase::num_rows($result) > 0) {
while ($row = iDatabase::fetch_array($result,'ASSOC')) {
$sql = "SELECT exe_id FROM $dbStatsForm.track_e_exercices
WHERE exe_user_id = {$row['user_id']} AND
exe_cours_id = '{$row_course['code']}' AND
exe_exo_id = {$row['exercise_id']} AND
orig_lp_id = {$row['lp_id']} AND
orig_lp_item_id = {$row['lp_item_id']} ";
$sub_result = iDatabase::query($sql);
$exe_list = array();
while ($sub_row = iDatabase::fetch_array($sub_result,'ASSOC')) {
$exe_list[] = $sub_row['exe_id'];
}
$sql = "SELECT iv.id, iv.view_count
FROM $table_lp_item_view iv INNER JOIN $table_lp_view v ON v.id = iv.lp_view_id INNER JOIN $table_lp_item i ON i.id = lp_item_id
WHERE item_type = 'quiz' AND user_id = {$row['user_id']} AND path = {$row['exercise_id']} ";
$sub_result = iDatabase::query($sql);
$lp_item_view_id_list = array();
while ($sub_row = iDatabase::fetch_array($sub_result,'ASSOC')) {
$lp_item_view_id_list[] = $sub_row['id'];
}
$i = 0;
foreach($exe_list as $exe_id) {
$lp_item_view_id = $lp_item_view_id_list[$i];
$update = "UPDATE $dbNameForm.track_e_exercices SET orig_lp_item_view_id = '$lp_item_view_id' WHERE exe_id = $exe_id ";
iDatabase::query($update);
$i++;
}
}
}
}
}
//Adding notifications options
$sql = "INSERT INTO $dbNameForm.user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_invitation', 'MailNotifyInvitation',1,1,'1') ";
$result = iDatabase::query($sql);
$id = iDatabase::insert_id();
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '1', 'AtOnce',1) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '8', 'Daily',2) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '0', 'No',3) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_message', 'MailNotifyMessage',1,1,'1')";
$result = iDatabase::query($sql);
$id = iDatabase::insert_id();
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '1', 'AtOnce',1) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '8', 'Daily',2) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '0', 'No',3) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field (field_type, field_variable, field_display_text, field_visible, field_changeable, field_default_value) values (4, 'mail_notify_group_message','MailNotifyGroupMessage',1,1,'1') ";
$result = iDatabase::query($sql);
$id = iDatabase::insert_id();
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '1', 'AtOnce',1) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '8', 'Daily',2) ";
$result = iDatabase::query($sql);
$sql = "INSERT INTO $dbNameForm.user_field_options (field_id, option_value, option_display_text, option_order) values ($id, '0', 'No',3) ";
$result = iDatabase::query($sql);
//Fixing table access_url_rel_course if the platform have courses that were created in Dok€os 1.8.5
if (!isset($_configuration['multiple_access_urls']) || $_configuration['multiple_access_urls'] == false) {
$sql = "SELECT code FROM $dbNameForm.course";
$result = iDatabase::query($sql);
while ($row = iDatabase::fetch_array($result)) {
//Adding course to default URL just in case
$sql = "INSERT INTO $dbNameForm.access_url_rel_course SET course_code = '".iDatabase::escape_string($row['code'])."', access_url_id = '1' ";
iDatabase::query($sql);
}
}
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,329 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS track_c_browsers;
CREATE TABLE track_c_browsers (
id int NOT NULL auto_increment,
browser varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS track_c_countries;
CREATE TABLE track_c_countries (
id int NOT NULL auto_increment,
code varchar(40) NOT NULL default '',
country varchar(50) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS track_c_os;
CREATE TABLE track_c_os (
id int NOT NULL auto_increment,
os varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS track_c_providers;
CREATE TABLE track_c_providers (
id int NOT NULL auto_increment,
provider varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS track_c_referers;
CREATE TABLE track_c_referers (
id int NOT NULL auto_increment,
referer varchar(255) NOT NULL default '',
counter int NOT NULL default 0,
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS track_e_access;
CREATE TABLE track_e_access (
access_id int NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL default '',
access_tool varchar(30) default NULL,
access_session_id int NOT NULL default 0,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code)
);
DROP TABLE IF EXISTS track_e_lastaccess;
CREATE TABLE track_e_lastaccess (
access_id bigint NOT NULL auto_increment,
access_user_id int unsigned default NULL,
access_date datetime NOT NULL default '0000-00-00 00:00:00',
access_cours_code varchar(40) NOT NULL,
access_tool varchar(30) default NULL,
access_session_id int unsigned default NULL,
PRIMARY KEY (access_id),
KEY access_user_id (access_user_id),
KEY access_cours_code (access_cours_code),
KEY access_session_id (access_session_id)
);
DROP TABLE IF EXISTS track_e_default;
CREATE TABLE track_e_default (
default_id int NOT NULL auto_increment,
default_user_id int unsigned NOT NULL default 0,
default_cours_code varchar(40) NOT NULL default '',
default_date datetime NOT NULL default '0000-00-00 00:00:00',
default_event_type varchar(20) NOT NULL default '',
default_value_type varchar(20) NOT NULL default '',
default_value text NOT NULL,
c_id int unsigned default NULL,
PRIMARY KEY (default_id)
);
DROP TABLE IF EXISTS track_e_downloads;
CREATE TABLE track_e_downloads (
down_id int NOT NULL auto_increment,
down_user_id int unsigned default NULL,
down_date datetime NOT NULL default '0000-00-00 00:00:00',
down_cours_id varchar(40) NOT NULL default '',
down_doc_path varchar(255) NOT NULL default '',
down_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (down_id),
KEY down_user_id (down_user_id),
KEY down_cours_id (down_cours_id)
);
DROP TABLE IF EXISTS track_e_exercices;
CREATE TABLE track_e_exercices (
exe_id int NOT NULL auto_increment,
exe_user_id int unsigned default NULL,
exe_date datetime NOT NULL default '0000-00-00 00:00:00',
exe_cours_id varchar(40) NOT NULL default '',
exe_exo_id mediumint unsigned NOT NULL default 0,
exe_result float(6,2) NOT NULL default 0,
exe_weighting float(6,2) NOT NULL default 0,
PRIMARY KEY (exe_id),
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
ALTER TABLE track_e_exercices ADD status varchar(20) NOT NULL default '';
ALTER TABLE track_e_exercices ADD data_tracking text NOT NULL default '';
ALTER TABLE track_e_exercices ADD start_date datetime NOT NULL default '0000-00-00 00:00:00';
ALTER TABLE track_e_exercices ADD steps_counter SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD session_id SMALLINT UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD INDEX ( session_id ) ;
ALTER TABLE track_e_exercices ADD orig_lp_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD orig_lp_item_id int NOT NULL default 0;
ALTER TABLE track_e_exercices ADD exe_duration int UNSIGNED NOT NULL default 0;
ALTER TABLE track_e_exercices ADD COLUMN expired_time_control datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE track_e_exercices ADD COLUMN orig_lp_item_view_id INT NOT NULL DEFAULT 0;
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';
DROP TABLE IF EXISTS track_e_attempt;
CREATE TABLE track_e_attempt (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
exe_id int default NULL,
user_id int NOT NULL default 0,
question_id int NOT NULL default 0,
answer text NOT NULL,
teacher_comment text NOT NULL,
marks float(6,2) NOT NULL default 0,
course_code varchar(40) NOT NULL default '',
position int default 0,
tms datetime NOT NULL default '0000-00-00 00:00:00',
session_id INT NOT NULL DEFAULT 0,
filename VARCHAR(255) DEFAULT NULL
);
ALTER TABLE track_e_attempt ADD INDEX (exe_id);
ALTER TABLE track_e_attempt ADD INDEX (user_id);
ALTER TABLE track_e_attempt ADD INDEX (question_id);
ALTER TABLE track_e_attempt ADD INDEX (session_id);
DROP TABLE IF EXISTS track_e_attempt_recording;
CREATE TABLE track_e_attempt_recording (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
exe_id int unsigned NOT NULL,
question_id int unsigned NOT NULL,
marks int NOT NULL,
insert_date datetime NOT NULL default '0000-00-00 00:00:00',
author int unsigned NOT NULL,
teacher_comment text NOT NULL,
session_id INT NOT NULL DEFAULT 0
);
ALTER TABLE track_e_attempt_recording ADD INDEX (exe_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (question_id);
ALTER TABLE track_e_attempt_recording ADD INDEX (session_id);
DROP TABLE IF EXISTS track_e_hotpotatoes;
CREATE TABLE track_e_hotpotatoes (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
exe_name VARCHAR( 255 ) NOT NULL ,
exe_user_id int unsigned DEFAULT NULL ,
exe_date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL ,
exe_cours_id varchar(40) NOT NULL ,
exe_result smallint default 0 NOT NULL ,
exe_weighting smallint default 0 NOT NULL,
KEY exe_user_id (exe_user_id),
KEY exe_cours_id (exe_cours_id)
);
DROP TABLE IF EXISTS track_e_links;
CREATE TABLE track_e_links (
links_id int NOT NULL auto_increment,
links_user_id int unsigned default NULL,
links_date datetime NOT NULL default '0000-00-00 00:00:00',
links_cours_id varchar(40) NOT NULL default '' ,
links_link_id int NOT NULL default 0,
links_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (links_id),
KEY links_cours_id (links_cours_id),
KEY links_user_id (links_user_id)
);
DROP TABLE IF EXISTS track_e_login;
CREATE TABLE track_e_login (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
logout_date datetime NULL default NULL,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
DROP TABLE IF EXISTS track_e_online;
CREATE TABLE track_e_online (
login_id int NOT NULL auto_increment,
login_user_id int unsigned NOT NULL default 0,
login_date datetime NOT NULL default '0000-00-00 00:00:00',
login_ip varchar(39) NOT NULL default '',
course varchar(40) default NULL,
session_id INT NOT NULL DEFAULT 0,
access_url_id INT NOT NULL DEFAULT 1,
PRIMARY KEY (login_id),
KEY login_user_id (login_user_id)
);
DROP TABLE IF EXISTS track_e_open;
CREATE TABLE track_e_open (
open_id int NOT NULL auto_increment,
open_remote_host tinytext NOT NULL,
open_agent tinytext NOT NULL,
open_referer tinytext NOT NULL,
open_date datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (open_id)
);
DROP TABLE IF EXISTS track_e_uploads;
CREATE TABLE track_e_uploads (
upload_id int NOT NULL auto_increment,
upload_user_id int unsigned default NULL,
upload_date datetime NOT NULL default '0000-00-00 00:00:00',
upload_cours_id varchar(40) NOT NULL default '',
upload_work_id int NOT NULL default 0,
upload_session_id INT NOT NULL DEFAULT 0,
PRIMARY KEY (upload_id),
KEY upload_user_id (upload_user_id),
KEY upload_cours_id (upload_cours_id)
);
DROP TABLE IF EXISTS track_e_course_access;
CREATE TABLE track_e_course_access (
course_access_id int NOT NULL auto_increment,
course_code varchar(40) NOT NULL,
user_id int NOT NULL,
login_course_date datetime NOT NULL default '0000-00-00 00:00:00',
logout_course_date datetime default NULL,
counter int NOT NULL,
session_id int NOT NULL default 0,
PRIMARY KEY (course_access_id)
);
DROP TABLE IF EXISTS track_e_hotspot;
CREATE TABLE track_e_hotspot (
hotspot_id int NOT NULL auto_increment,
hotspot_user_id int NOT NULL,
hotspot_course_code varchar(50) NOT NULL,
hotspot_exe_id int NOT NULL,
hotspot_question_id int NOT NULL,
hotspot_answer_id int NOT NULL,
hotspot_correct tinyint(3) unsigned NOT NULL,
hotspot_coordinate text NOT NULL,
PRIMARY KEY (hotspot_id),
KEY hotspot_course_code (hotspot_course_code),
KEY hotspot_user_id (hotspot_user_id),
KEY hotspot_exe_id (hotspot_exe_id),
KEY hotspot_question_id (hotspot_question_id)
);
DROP TABLE IF EXISTS track_e_item_property;
CREATE TABLE track_e_item_property (
id int NOT NULL auto_increment PRIMARY KEY,
course_id int NOT NULL,
item_property_id int NOT NULL,
title varchar(255),
content text,
progress int NOT NULL default 0,
lastedit_date datetime NOT NULL default '0000-00-00 00:00:00',
lastedit_user_id int NOT NULL,
session_id int NOT NULL default 0
);
ALTER TABLE track_e_course_access ADD INDEX (user_id);
ALTER TABLE track_e_course_access ADD INDEX (login_course_date);
ALTER TABLE track_e_course_access ADD INDEX (course_code);
ALTER TABLE track_e_course_access ADD INDEX (session_id);
ALTER TABLE track_e_access ADD INDEX (access_session_id);
ALTER TABLE track_e_online ADD INDEX (course);
ALTER TABLE track_e_online ADD INDEX (session_id);
ALTER TABLE track_e_item_property ADD INDEX (course_id, item_property_id, session_id);
ALTER TABLE track_e_downloads ADD INDEX (down_session_id);
ALTER TABLE track_e_links ADD INDEX (links_session_id);
ALTER TABLE track_e_uploads ADD INDEX (upload_session_id);
--
-- Table structure for LP custom storage API
--
DROP TABLE IF EXISTS track_stored_values;
CREATE TABLE IF NOT EXISTS track_stored_values (
id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
sco_id INT NOT NULL,
course_id CHAR(40) NOT NULL,
sv_key CHAR(64) NOT NULL,
sv_value TEXT NOT NULL
);
ALTER TABLE track_stored_values ADD KEY (user_id, sco_id, course_id, sv_key);
ALTER TABLE track_stored_values ADD UNIQUE (user_id, sco_id, course_id, sv_key);
DROP TABLE IF EXISTS track_stored_value_stack;
CREATE TABLE IF NOT EXISTS track_stored_values_stack (
id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
sco_id INT NOT NULL,
stack_order INT NOT NULL,
course_id CHAR(40) NOT NULL,
sv_key CHAR(64) NOT NULL,
sv_value TEXT NOT NULL
);
ALTER TABLE track_stored_values_stack ADD KEY (user_id, sco_id, course_id, sv_key, stack_order);
ALTER TABLE track_stored_values_stack ADD UNIQUE (user_id, sco_id, course_id, sv_key, stack_order);
DROP TABLE IF EXISTS track_e_attempt_coeff;
CREATE TABLE track_e_attempt_coeff (
id int unsigned not null auto_increment primary key,
attempt_id INT NOT NULL,
marks_coeff float(6,2)
);

@ -1,53 +0,0 @@
-- MySQL dump
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS personal_agenda;
CREATE TABLE personal_agenda (
id int NOT NULL auto_increment,
user int unsigned,
title text,
`text` text,
`date` datetime DEFAULT NULL,
enddate datetime DEFAULT NULL,
course varchar(255),
parent_event_id int NULL,
all_day int NOT NULL DEFAULT 0,
PRIMARY KEY id (id)
);
DROP TABLE IF EXISTS personal_agenda_repeat;
CREATE TABLE personal_agenda_repeat (
cal_id INT DEFAULT 0 NOT NULL,
cal_type VARCHAR(20),
cal_end INT,
cal_frequency INT DEFAULT 1,
cal_days CHAR(7),
PRIMARY KEY (cal_id)
);
DROP TABLE IF EXISTS personal_agenda_repeat_not;
CREATE TABLE personal_agenda_repeat_not (
cal_id INT NOT NULL,
cal_date INT NOT NULL,
PRIMARY KEY ( cal_id, cal_date )
);
DROP TABLE IF EXISTS user_course_category;
CREATE TABLE user_course_category (
id int unsigned NOT NULL auto_increment,
user_id int unsigned NOT NULL default 0,
title text NOT NULL,
sort int,
PRIMARY KEY (id)
);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_user (user);
ALTER TABLE personal_agenda ADD INDEX idx_personal_agenda_parent (parent_event_id);
ALTER TABLE user_course_category ADD INDEX idx_user_c_cat_uid (user_id);

@ -1,326 +0,0 @@
-- This script updates the databases structure before migrating the data from
-- version 1.8.8 (or version 1.8.8.2, 1.8.8.4) to version 1.9.0
-- it is intended as a standalone script, however, because of the multiple
-- databases related difficulties, it should be parsed by a PHP script in
-- order to connect to and update the right databases.
-- There is one line per query, allowing the PHP function file() to read
-- all lines separately into an array. The xxMAINxx-type markers are there
-- to tell the PHP script which database we're talking about.
-- By always using the keyword "TABLE" in the queries, we should be able
-- to retrieve and modify the table name from the PHP script if needed, which
-- will allow us to deal with the unique-database-type installations
--
-- This first part is for the main database
-- xxMAINxx
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('filter_terms', NULL, 'textarea', 'Security', '', 'FilterTermsTitle', 'FilterTermsComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('header_extra_content', NULL, 'textarea', 'Tracking', '', 'HeaderExtraContentTitle', 'HeaderExtraContentComment', NULL, NULL, 1),('footer_extra_content', NULL, 'textarea', 'Tracking', '', 'FooterExtraContentTitle', 'FooterExtraContentComment', NULL, NULL,1);
ALTER TABLE sys_calendar ADD COLUMN all_day INTEGER NOT NULL DEFAULT 0;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_documents_preview', NULL, 'radio', 'Tools', 'false', 'ShowDocumentPreviewTitle', 'ShowDocumentPreviewComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_documents_preview', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_documents_preview', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('htmlpurifier_wiki',NULL,'radio','Editor','false','HtmlPurifierWikiTitle','HtmlPurifierWikiComment',NULL,NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('htmlpurifier_wiki', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('htmlpurifier_wiki', 'false', 'No');
-- CAS feature
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_activate', NULL, 'radio', 'CAS', 'false', 'CasMainActivateTitle', 'CasMainActivateComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) values ('cas_activate', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) values ('cas_activate', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_server', NULL, 'textfield', 'CAS', '', 'CasMainServerTitle', 'CasMainServerComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_server_uri', NULL, 'textfield', 'CAS', '', 'CasMainServerURITitle', 'CasMainServerURIComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_port', NULL, 'textfield', 'CAS', '', 'CasMainPortTitle', 'CasMainPortComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_protocol', NULL, 'radio', 'CAS', '', 'CasMainProtocolTitle', 'CasMainProtocolComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'CAS1', 'CAS1Text');
INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'CAS2', 'CAS2Text');
INSERT INTO settings_options (variable, value, display_text) values ('cas_protocol', 'SAML', 'SAMLText');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('cas_add_user_activate', NULL, 'radio', 'CAS', 'false', 'CasUserAddActivateTitle', 'CasUserAddActivateComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) values ('cas_add_user_activate', 'platform', 'casAddUserActivatePlatform');
INSERT INTO settings_options (variable, value, display_text) values ('cas_add_user_activate', 'extldap', 'casAddUserActivateLDAP');
INSERT INTO settings_options (variable, value, display_text) values ('cas_add_user_activate', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('update_user_info_cas_with_ldap', NULL, 'radio', 'CAS', 'true', 'UpdateUserInfoCasWithLdapTitle', 'UpdateUserInfoCasWithLdapComment', NULL, NULL, 0)
-- Custom Pages
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('use_custom_pages', NULL, 'radio','Platform','false','UseCustomPagesTitle','UseCustomPagesComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) values ('use_custom_pages', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) values ('use_custom_pages', 'false', 'No');
-- Pages after login by role
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('student_page_after_login', NULL, 'textfield', 'Platform', '', 'StudentPageAfterLoginTitle', 'StudentPageAfterLoginComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('teacher_page_after_login', NULL, 'textfield', 'Platform', '', 'TeacherPageAfterLoginTitle', 'TeacherPageAfterLoginComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('drh_page_after_login', NULL, 'textfield', 'Platform', '', 'DRHPageAfterLoginTitle', 'DRHPageAfterLoginComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('sessionadmin_page_after_login', NULL, 'textfield', 'Session', '', 'SessionAdminPageAfterLoginTitle', 'SessionAdminPageAfterLoginComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('student_autosubscribe', NULL, 'textfield', 'Platform', '', 'StudentAutosubscribeTitle', 'StudentAutosubscribeComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('teacher_autosubscribe', NULL, 'textfield', 'Platform', '', 'TeacherAutosubscribeTitle', 'TeacherAutosubscribeComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('drh_autosubscribe', NULL, 'textfield', 'Platform', '', 'DRHAutosubscribeTitle', 'DRHAutosubscribeComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('sessionadmin_autosubscribe', NULL, 'textfield', 'Session', '', 'SessionadminAutosubscribeTitle', 'SessionadminAutosubscribeComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_1', 'checkbox', 'Platform', 'true', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom1', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_2', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom2', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('show_tabs', 'custom_tab_3', 'checkbox', 'Platform', 'false', 'ShowTabsTitle', 'ShowTabsComment', NULL, 'TabsCustom3', 1);
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);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('languagePriority2', NULL, 'radio', 'Languages', 'user_profil_lang', 'LanguagePriority2Title', 'LanguagePriority2Comment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('languagePriority3', NULL, 'radio', 'Languages', 'user_selected_lang', 'LanguagePriority3Title', 'LanguagePriority3Comment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('languagePriority4', NULL, 'radio', 'Languages', 'platform_lang', 'LanguagePriority4Title', 'LanguagePriority4Comment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('languagePriority1','platform_lang','PlatformLanguage'), ('languagePriority1','user_profil_lang','UserLanguage'), ('languagePriority1','user_selected_lang','UserSelectedLanguage'), ('languagePriority1','course_lang','CourseLanguage'), ('languagePriority2','platform_lang','PlatformLanguage'), ('languagePriority2','user_profil_lang','UserLanguage'), ('languagePriority2','user_selected_lang','UserSelectedLanguage'), ('languagePriority2','course_lang','CourseLanguage'), ('languagePriority3','platform_lang','PlatformLanguage'), ('languagePriority3','user_profil_lang','UserLanguage'), ('languagePriority3','user_selected_lang','UserSelectedLanguage'), ('languagePriority3','course_lang','CourseLanguage'), ('languagePriority4','platform_lang','PlatformLanguage'), ('languagePriority4','user_profil_lang','UserLanguage'), ('languagePriority4','user_selected_lang','UserSelectedLanguage'), ('languagePriority4','course_lang','CourseLanguage');
-- Email is login
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('login_is_email', NULL, 'radio', 'Platform', 'false', 'LoginIsEmailTitle', 'LoginIsEmailComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('login_is_email','true','Yes'),('login_is_email','false','No') ;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('scorm_cumulative_session_time', NULL, 'radio', 'Course', 'true', 'ScormCumulativeSessionTimeTitle', 'ScormCumulativeSessionTimeComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('scorm_cumulative_session_time','true','Yes'), ('scorm_cumulative_session_time','false','No');
CREATE TABLE event_type ( id int unsigned NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, name_lang_var varchar(50) NOT NULL, desc_lang_var varchar(50) NOT NULL, extendable_variables varchar(255) NOT NULL, PRIMARY KEY (id));
ALTER TABLE event_type ADD INDEX ( name );
CREATE TABLE event_type_email_template ( id int unsigned NOT NULL AUTO_INCREMENT, event_type_id int NOT NULL, language_id int NOT NULL, message text NOT NULL, subject varchar(60) NOT NULL, PRIMARY KEY (id));
ALTER TABLE event_type_email_template ADD INDEX ( language_id );
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));
CREATE TABLE group_rel_group ( id int NOT NULL AUTO_INCREMENT, group_id int NOT NULL, subgroup_id int NOT NULL, relation_type int NOT NULL, PRIMARY KEY (id));
ALTER TABLE group_rel_group ADD INDEX ( group_id );
ALTER TABLE group_rel_group ADD INDEX ( subgroup_id );
ALTER TABLE group_rel_group ADD INDEX ( relation_type );
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('gradebook_enable_grade_model', NULL, 'radio', 'Gradebook', 'false', 'GradebookEnableGradeModelTitle', 'GradebookEnableGradeModelComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('gradebook_enable_grade_model', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('gradebook_enable_grade_model', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('teachers_can_change_grade_model_settings', NULL, 'radio', 'Gradebook', 'true', 'TeachersCanChangeGradeModelSettingsTitle', 'TeachersCanChangeGradeModelSettingsComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('teachers_can_change_grade_model_settings', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('teachers_can_change_grade_model_settings', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('gradebook_locking_enabled', NULL, 'radio', 'Gradebook', 'false', 'GradebookEnableLockingTitle', 'GradebookEnableLockingComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('gradebook_locking_enabled', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('gradebook_locking_enabled', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('teachers_can_change_score_settings', NULL, 'radio', 'Gradebook', 'true', 'TeachersCanChangeScoreSettingsTitle', 'TeachersCanChangeScoreSettingsComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('teachers_can_change_score_settings', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('teachers_can_change_score_settings', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_users_to_change_email_with_no_password', NULL, 'radio', 'User', 'false', 'AllowUsersToChangeEmailWithNoPasswordTitle', 'AllowUsersToChangeEmailWithNoPasswordComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_users_to_change_email_with_no_password', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_users_to_change_email_with_no_password', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_session_admins_to_manage_all_sessions', NULL, 'radio', 'Session', 'false', 'AllowSessionAdminsToSeeAllSessionsTitle', 'AllowSessionAdminsToSeeAllSessionsComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_session_admins_to_manage_all_sessions', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_session_admins_to_manage_all_sessions', 'false', 'No');
-- Shibboleth and Facebook auth and ldap
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('shibboleth_description', NULL, 'radio', 'Shibboleth', 'false', 'ShibbolethMainActivateTitle', 'ShibbolethMainActivateComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('facebook_description', NULL, 'radio', 'Facebook', 'false', 'FacebookMainActivateTitle', 'FacebookMainActivateComment', NULL, NULL, 0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('ldap_description', NULL, 'radio', 'LDAP', NULL, 'LdapDescriptionTitle', 'LdapDescriptionComment', NULL, NULL, 0);
ALTER TABLE course_rel_user ADD COLUMN legal_agreement INTEGER DEFAULT 0;
ALTER TABLE session_rel_course_rel_user ADD COLUMN legal_agreement INTEGER DEFAULT 0;
ALTER TABLE course ADD COLUMN legal TEXT NOT NULL;
ALTER TABLE course ADD COLUMN activate_legal INT NOT NULL DEFAULT 0;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_help_link', NULL, 'radio', 'Platform', 'true', 'EnableHelpLinkTitle', 'EnableHelpLinkComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_help_link', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_help_link', 'false', 'No');
ALTER TABLE gradebook_category MODIFY COLUMN weight FLOAT NOT NULL;
ALTER TABLE gradebook_link MODIFY COLUMN weight FLOAT NOT NULL;
ALTER TABLE gradebook_link ADD COLUMN locked INT DEFAULT 0;
ALTER TABLE gradebook_category ADD COLUMN locked INT DEFAULT 0;
ALTER TABLE gradebook_category ADD COLUMN default_lowest_eval_exclude TINYINT default null;
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_hr_skills_management', NULL, 'radio', 'Gradebook', 'true', 'AllowHRSkillsManagementTitle', 'AllowHRSkillsManagementComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_hr_skills_management', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_admin_toolbar', NULL, 'radio', 'Platform', 'show_to_admin', 'ShowAdminToolbarTitle', 'ShowAdminToolbarComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'do_not_show', 'DoNotShow');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_admin', 'ShowToAdminsOnly');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_admin_and_teachers', 'ShowToAdminsAndTeachers');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_admin_toolbar', 'show_to_all', 'ShowToAllUsers');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_global_chat', NULL, 'radio', 'Platform', 'true', 'AllowGlobalChatTitle', 'AllowGlobalChatComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_global_chat', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_global_chat', 'false', 'No');
CREATE TABLE chat (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, from_user INTEGER, to_user INTEGER, message TEXT NOT NULL, sent DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', recd INTEGER UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (id));
ALTER TABLE chat ADD INDEX idx_chat_to_user (to_user);
ALTER TABLE chat ADD INDEX idx_chat_from_user (from_user);
INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES (1, 'google_calendar_url','Google Calendar URL',0,0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('courses_default_creation_visibility', NULL, 'radio', 'Course', '2', 'CoursesDefaultCreationVisibilityTitle', 'CoursesDefaultCreationVisibilityComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('courses_default_creation_visibility', '3', 'OpenToTheWorld');
INSERT INTO settings_options (variable, value, display_text) VALUES ('courses_default_creation_visibility', '2', 'OpenToThePlatform');
INSERT INTO settings_options (variable, value, display_text) VALUES ('courses_default_creation_visibility', '1', 'Private');
INSERT INTO settings_options (variable, value, display_text) VALUES ('courses_default_creation_visibility', '0', 'CourseVisibilityClosed');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_browser_sniffer', NULL, 'radio', 'Tuning', 'false', 'AllowBrowserSnifferTitle', 'AllowBrowserSnifferComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_browser_sniffer', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_browser_sniffer', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_wami_record', NULL, 'radio', 'Tools', 'false', 'EnableWamiRecordTitle', 'EnableWamiRecordComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_wami_record', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_wami_record', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_public_certificates', NULL, 'radio', 'Course', 'false', 'AllowPublicCertificatesTitle', 'AllowPublicCertificatesComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_public_certificates', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_public_certificates', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_iframe_inclusion', NULL, 'radio', 'Editor', 'false', 'EnableIframeInclusionTitle', 'EnableIframeInclusionComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_iframe_inclusion', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_iframe_inclusion', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('show_hot_courses', NULL, 'radio', 'Platform', 'true', 'ShowHotCoursesTitle', 'ShowHotCoursesComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_hot_courses', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('show_hot_courses', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('gradebook_default_weight', NULL, 'textfield', 'Gradebook', '100', 'GradebookDefaultWeightTitle', 'GradebookDefaultWeightComment', NULL, NULL, 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('gradebook_default_grade_model_id', NULL, 'select', 'Gradebook', '', 'GradebookDefaultGradeModelTitle', 'GradebookDefaultGradeModelComment', NULL, NULL, 1);
UPDATE settings_current SET category = 'Session' WHERE variable IN ('show_tutor_data', 'use_session_mode', 'add_users_by_coach', 'show_session_coach', 'show_session_data', 'allow_coach_to_edit_course_session','hide_courses_in_sessions', 'show_groups_to_users');
INSERT INTO language (original_name, english_name, isocode, dokeos_folder, available) VALUES ('&#2476;&#2494;&#2434;&#2482;&#2494;','bengali','bn','bengali',0), ('&#1575;&#1604;&#1589;&#1608;&#1605;&#1575;&#1604;&#1610;&#1577;','somali','so','somali',0);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('enable_webcam_clip', NULL, 'radio', 'Tools', 'false', 'EnableWebCamClipTitle', 'EnableWebCamClipComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_webcam_clip', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_webcam_clip', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','documents','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Documents', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','learning_path','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'LearningPath', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','links','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Links', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','announcements','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Announcements', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','forums','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Forums', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','quiz','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Quiz', 1);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('tool_visible_by_default_at_creation','gradebook','checkbox','Tools','true','ToolVisibleByDefaultAtCreationTitle','ToolVisibleByDefaultAtCreationComment',NULL,'Gradebook', 1);
-- Course ranking
CREATE TABLE track_course_ranking (id int unsigned not null PRIMARY KEY AUTO_INCREMENT, c_id int unsigned not null, session_id int unsigned not null default 0, url_id int unsigned not null default 0, accesses int unsigned not null default 0, total_score int unsigned not null default 0, users int unsigned not null default 0, creation_date datetime not null);
ALTER TABLE track_course_ranking ADD INDEX idx_tcc_cid (c_id);
ALTER TABLE track_course_ranking ADD INDEX idx_tcc_sid (session_id);
ALTER TABLE track_course_ranking ADD INDEX idx_tcc_urlid (url_id);
ALTER TABLE track_course_ranking ADD INDEX idx_tcc_creation_date (creation_date);
CREATE TABLE user_rel_course_vote ( id int unsigned not null AUTO_INCREMENT PRIMARY KEY, c_id int unsigned not null, user_id int unsigned not null, session_id int unsigned not null default 0, url_id int unsigned not null default 0, vote int unsigned not null default 0);
ALTER TABLE user_rel_course_vote ADD INDEX idx_ucv_cid (c_id);
ALTER TABLE user_rel_course_vote ADD INDEX idx_ucv_uid (user_id);
ALTER TABLE user_rel_course_vote ADD INDEX idx_ucv_cuid (user_id, c_id);
--User chat status
INSERT INTO user_field (field_type, field_variable, field_display_text, field_visible, field_changeable) VALUES (1, 'user_chat_status','User chat status', 0, 0);
UPDATE settings_current SET selected_value = 'true' WHERE variable = 'more_buttons_maximized_mode';
--Grade model
CREATE TABLE grade_model (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT, default_lowest_eval_exclude TINYINT default null, default_external_eval_prefix VARCHAR(140) default null, PRIMARY KEY (id));
CREATE TABLE grade_components (id INTEGER NOT NULL AUTO_INCREMENT, percentage VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL, acronym VARCHAR(255) NOT NULL, grade_model_id INTEGER NOT NULL, PRIMARY KEY (id));
ALTER TABLE gradebook_category ADD COLUMN grade_model_id INT DEFAULT 0;
UPDATE settings_current SET title = 'DatabaseVersion' WHERE variable = 'chamilo_database_version';
ALTER TABLE gradebook_evaluation MODIFY COLUMN weight FLOAT NOT NULL;
INSERT INTO settings_options(variable, value, display_text) VALUES ('page_after_login', 'main/auth/courses.php', 'CourseCatalog');
ALTER TABLE settings_current ADD COLUMN access_url_locked INTEGER NOT NULL DEFAULT 0;
-- Event mail
CREATE TABLE event_email_template ( id int NOT NULL AUTO_INCREMENT, message text, subject varchar(255) DEFAULT NULL, event_type_name varchar(255) DEFAULT NULL, activated tinyint NOT NULL DEFAULT '0', language_id int DEFAULT NULL, PRIMARY KEY (id));
ALTER TABLE event_email_template ADD INDEX event_name_index (event_type_name);
CREATE TABLE event_sent ( id int NOT NULL AUTO_INCREMENT, user_from int NOT NULL, user_to int DEFAULT NULL, event_type_name varchar(100) DEFAULT NULL, PRIMARY KEY (id));
ALTER TABLE event_sent ADD INDEX event_name_index (event_type_name);
CREATE TABLE user_rel_event_type ( id int NOT NULL AUTO_INCREMENT, user_id int NOT NULL, event_type_name varchar(255) NOT NULL, PRIMARY KEY (id));
ALTER TABLE user_rel_event_type ADD INDEX event_name_index (event_type_name);
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('activate_email_template', NULL, 'radio', 'Platform', 'false', 'ActivateEmailTemplateTitle', 'ActivateEmailTemplateComment', NULL, NULL, 0);
INSERT INTO settings_options (variable, value, display_text) VALUES ('activate_email_template', 'true', 'Yes'),('activate_email_template', 'false', 'No');
-- Skills
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_skills_tool', NULL, 'radio', 'Platform', 'false', 'AllowSkillsToolTitle', 'AllowSkillsToolComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_skills_tool', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_skills_tool', 'false', 'No');
CREATE TABLE IF NOT EXISTS skill ( id int NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, short_code varchar(100) NOT NULL, description TEXT NOT NULL, access_url_id int NOT NULL, icon varchar(255) NOT NULL, PRIMARY KEY (id));
INSERT INTO skill (name) VALUES ('Root');
CREATE TABLE IF NOT EXISTS skill_rel_gradebook ( id int NOT NULL AUTO_INCREMENT, gradebook_id int NOT NULL, skill_id int NOT NULL, type varchar(10) NOT NULL, PRIMARY KEY (id));
CREATE TABLE IF NOT EXISTS skill_rel_skill (id int NOT NULL AUTO_INCREMENT, skill_id int NOT NULL, parent_id int NOT NULL, relation_type int NOT NULL, level int NOT NULL, PRIMARY KEY (id));
INSERT INTO skill_rel_skill VALUES(1, 1, 0, 0, 0);
CREATE TABLE IF NOT EXISTS skill_rel_user ( id int NOT NULL AUTO_INCREMENT, user_id int NOT NULL, skill_id int NOT NULL, acquired_skill_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00',assigned_by int NOT NULL,PRIMARY KEY (id));
CREATE TABLE IF NOT EXISTS skill_profile ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id));
CREATE TABLE IF NOT EXISTS skill_rel_profile ( id INTEGER NOT NULL AUTO_INCREMENT, skill_id INTEGER NOT NULL, profile_id INTEGER NOT NULL, PRIMARY KEY (id));
-- Removing use_document_title
DELETE FROM settings_current WHERE variable = 'use_document_title';
DELETE FROM settings_options WHERE variable = 'use_document_title';
ALTER TABLE course MODIFY COLUMN disk_quota bigint unsigned DEFAULT NULL;
ALTER TABLE user MODIFY COLUMN username VARCHAR(100) NOT NULL;
UPDATE language SET english_name = 'basque' , dokeos_folder = 'basque' where english_name = 'euskera';
UPDATE language SET english_name = 'turkish', dokeos_folder = 'turkish' where english_name = 'turkce';
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES('platform_unsubscribe_allowed', NULL, 'radio', 'Platform', 'false', 'PlatformUnsubscribeTitle', 'PlatformUnsubscribeComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) values ('platform_unsubscribe_allowed', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) values ('platform_unsubscribe_allowed', 'false', 'No');
ALTER TABLE usergroup_rel_session ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE usergroup_rel_course ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE usergroup_rel_user ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE admin ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE reservation_category_rights ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
CREATE TABLE course_type (id int unsigned not null auto_increment primary key, name varchar(50) not null, translation_var char(40) default 'UndefinedCourseTypeLabel', description TEXT default '', props text default '');
INSERT INTO course_type (id, name) VALUES (1, 'All tools');
INSERT INTO course_type (id, name) VALUES (2, 'Entry exam');
ALTER TABLE course add course_type_id int unsigned default 1;
CREATE TABLE usergroup_rel_question (id int unsigned not null auto_increment primary key, c_id int unsigned not null, question_id int unsigned not null, usergroup_id int unsigned not null, coefficient float(6,2));
-- Remove settings entry that doesnt exist anymore
DELETE FROM settings_current WHERE variable = 'read_more_limit';
DELETE FROM settings_current WHERE variable = 'user_order_by';
DELETE FROM settings_options WHERE variable = 'user_order_by';
ALTER TABLE user_api_key ADD COLUMN api_end_point text DEFAULT NULL;
ALTER TABLE user_api_key ADD COLUMN created_date datetime DEFAULT NULL;
ALTER TABLE user_api_key ADD COLUMN validity_start_date datetime DEFAULT NULL;
ALTER TABLE user_api_key ADD COLUMN validity_end_date datetime DEFAULT NULL;
ALTER TABLE user_api_key ADD COLUMN description text DEFAULT NULL;
-- Do not move this query
UPDATE settings_current SET selected_value = '1.9.0.18715' WHERE variable = 'chamilo_database_version';
-- xxSTATSxx
ALTER TABLE track_e_default MODIFY COLUMN default_value TEXT;
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';
--CREATE TABLE track_filtered_terms (id int, user_id int, course_id int, session_id int, tool_id char(12), filtered_term varchar(255), created_at datetime);
CREATE TABLE track_stored_values (id int unsigned not null AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, sco_id INT NOT NULL, course_id CHAR(40) NOT NULL, sv_key CHAR(64) NOT NULL, sv_value TEXT NOT NULL);
ALTER TABLE track_stored_values ADD KEY (user_id, sco_id, course_id, sv_key);
ALTER TABLE track_stored_values ADD UNIQUE (user_id, sco_id, course_id, sv_key);
CREATE TABLE track_stored_values_stack (id int unsigned not null AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL, sco_id INT NOT NULL, stack_order INT NOT NULL, course_id CHAR(40) NOT NULL, sv_key CHAR(64) NOT NULL, sv_value TEXT NOT NULL);
ALTER TABLE track_stored_values_stack ADD KEY (user_id, sco_id, course_id, sv_key, stack_order);
ALTER TABLE track_stored_values_stack ADD UNIQUE (user_id, sco_id, course_id, sv_key, stack_order);
ALTER TABLE track_e_attempt ADD COLUMN filename VARCHAR(255) DEFAULT NULL;
ALTER TABLE track_e_default ADD COLUMN c_id INTEGER DEFAULT NULL;
ALTER TABLE track_e_attempt_recording ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE track_e_attempt ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
ALTER TABLE track_e_hotpotatoes ADD COLUMN id INTEGER NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);
CREATE TABLE track_e_attempt_coeff ( id int unsigned not null auto_increment primary key, attempt_id INT NOT NULL, marks_coeff float(6,2));
-- xxUSERxx
ALTER TABLE personal_agenda ADD COLUMN all_day INTEGER NOT NULL DEFAULT 0;

@ -1,539 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Chamilo LMS
*
* @package chamilo.install
*/
$update = function($_configuration, $mainConnection, $dryRun, $output, $app) {
$mainConnection->beginTransaction();
$singleDbForm = isset($_configuration['single_database']) ? $_configuration['single_database'] : false;
$dbNameForm = $_configuration['main_database'];
$dbStatsForm = isset($_configuration['statistics_database']) ? $_configuration['statistics_database'] : $_configuration['main_database'];
$dbUserForm = isset($_configuration['user_personal_database']) ? $_configuration['user_personal_database'] : $_configuration['main_database'];
//Migrate classes to the new classes (usergroups)
$sql = "SELECT selected_value FROM $dbNameForm.settings_current WHERE variable='use_session_mode' ";
$result = iDatabase::query($sql);
$result = Database::fetch_array($result);
$session_mode = $result['selected_value'];
if ($session_mode == 'true') {
$sql = "UPDATE settings_current SET selected_value = 'true' WHERE variable='use_session_mode' ";
$mainConnection->executeQuery($sql);
$sql = "SELECT * FROM $dbNameForm.class";
$result = iDatabase::query($sql);
$count = 0;
$new_table = "$dbNameForm.usergroup";
$classes_added = 0;
$mapping_classes = array();
if (Database::num_rows($result)) {
$output->writeln('Moving classes to usergroups ');
while($row = iDatabase::fetch_array($result, 'ASSOC')) {
$old_id = $row['id'];
unset($row['id']);
unset($row['code']);
$new_user_group_id = Database::insert($new_table, $row);
if (is_numeric($new_user_group_id)) {
$mapping_classes[$old_id] = $new_user_group_id;
$classes_added ++;
}
}
$output->writeln("Classes added: $classes_added");
}
$sql = "SELECT * FROM $dbNameForm.class_user";
$result = iDatabase::query($sql);
$new_table = "$dbNameForm.usergroup_rel_user";
if (Database::num_rows($result)) {
$output->writeln('Moving users from class_user to usergroup_rel_user ');
while ($row = iDatabase::fetch_array($result, 'ASSOC')) {
$values = array(
'usergroup_id' => $mapping_classes[$row['class_id']],
'user_id' => $row['user_id']
);
Database::insert($new_table, $values);
$output->writeln("Saving : ".implode(', ', $values));
}
}
$sql = "SELECT * FROM $dbNameForm.course_rel_class";
$result = iDatabase::query($sql);
$new_table = "$dbNameForm.usergroup_rel_course";
if (Database::num_rows($result)) {
$output->writeln("Moving course_rel_class to usergroup_rel_course");
while ($row = iDatabase::fetch_array($result, 'ASSOC')) {
$course_code = $row['course_code'];
$course_code = addslashes($course_code);
$sql_course = "SELECT id from $dbNameForm.course WHERE code = '$course_code'";
$result_course = iDatabase::query($sql_course);
$result_course = Database::fetch_array($result_course);
$course_id = $result_course['id'];
$values = array(
'usergroup_id' => $mapping_classes[$row['class_id']],
'course_id' => $course_id
);
Database::insert($new_table, $values);
$output->writeln("Saving : ".implode(', ', $values));
}
}
}
//Moving Stats DB to the main DB
$stats_table = array(
"track_c_browsers",
"track_c_countries",
"track_c_os",
"track_c_providers",
"track_c_referers",
"track_e_access",
"track_e_attempt",
"track_e_attempt_recording",
"track_e_course_access",
"track_e_default",
"track_e_downloads",
"track_e_exercices",
"track_e_hotpotatoes",
"track_e_hotspot",
"track_e_item_property",
"track_e_lastaccess",
"track_e_links",
"track_e_login",
"track_e_online",
"track_e_open",
"track_e_uploads",
"track_stored_values",
"track_stored_values_stack",
);
if ($dbNameForm != $dbStatsForm) {
iDatabase::select_db($dbStatsForm);
foreach ($stats_table as $stat_table) {
$sql = "ALTER TABLE $dbStatsForm.$stat_table RENAME $dbNameForm.$stat_table";
Database::query($sql);
$output->writeln($sql);
}
iDatabase::select_db($dbNameForm);
}
//Moving user database to the main database
$users_tables = array(
"personal_agenda",
"personal_agenda_repeat",
"personal_agenda_repeat_not",
"user_course_category"
);
if ($dbNameForm != $dbUserForm) {
iDatabase::select_db($dbUserForm);
foreach ($users_tables as $table) {
$sql = "ALTER TABLE $dbUserForm.$table RENAME $dbNameForm.$table";
iDatabase::query($sql);
$output->writeln($sql);
}
iDatabase::select_db($dbNameForm);
}
//Adding admin user in the access_url_rel_user table
$sql = "SELECT user_id FROM admin WHERE user_id = 1";
$result = iDatabase::query($sql);
$has_user_id = Database::num_rows($result) > 0;
$sql = "SELECT * FROM access_url_rel_user WHERE user_id = 1 AND access_url_id = 1";
$result = iDatabase::query($sql);
$has_entry = Database::num_rows($result) > 0;
if ($has_user_id && !$has_entry) {
$sql = "INSERT INTO access_url_rel_user VALUES(1, 1)";
iDatabase::query($sql);
$output->writeln($sql);
}
$output->writeln("Dropping c_* tables ...");
$this->dropCourseTables();
$output->writeln("Creating c_* tables ...");
$this->createCourseTables($output);
$prefix = '';
if ($singleDbForm) {
$prefix = $_configuration['table_prefix'];
}
$app['monolog']->addInfo("Database prefix: '$prefix'");
iDatabase::select_db($dbNameForm);
$res = iDatabase::query("SELECT id, code, db_name, directory, course_language, id as real_id FROM course WHERE target_course_code IS NULL ORDER BY code");
if ($res === false) { die('Error while querying the courses list in update_db-1.8.8-1.9.0.inc.php'); }
$errors = array();
if (iDatabase::num_rows($res) > 0) {
$i = 0;
$list = array();
while ($row = iDatabase::fetch_array($res)) {
$list[] = $row;
$i++;
}
$output->writeln("Moving old course tables to the new structure 1 single database");
$progress = $this->getHelperSet()->get('progress');
$progress->start($output, count($list));
foreach ($list as $row_course) {
if (!$singleDbForm) {
// otherwise just use the main one
iDatabase::select_db($row_course['db_name']);
}
if (!$singleDbForm) {
// otherwise just use the main one
iDatabase::select_db($row_course['db_name']);
} else {
iDatabase::select_db($dbNameForm);
}
//Course tables to be migrated
$table_list = array(
'announcement',
'announcement_attachment',
'attendance',
'attendance_calendar',
'attendance_result',
'attendance_sheet',
'attendance_sheet_log',
'blog',
'blog_attachment',
'blog_comment',
'blog_post',
'blog_rating',
'blog_rel_user',
'blog_task',
'blog_task_rel_user',
'calendar_event',
'calendar_event_attachment',
'calendar_event_repeat',
'calendar_event_repeat_not',
'chat_connected',
'course_description',
'course_setting',
'document',
'dropbox_category',
'dropbox_feedback',
'dropbox_file',
'dropbox_person',
'dropbox_post',
'forum_attachment',
'forum_category',
'forum_forum',
'forum_mailcue',
'forum_notification',
'forum_post',
'forum_thread',
'forum_thread_qualify',
'forum_thread_qualify_log',
'glossary',
'group_category',
'group_info',
'group_rel_tutor',
'group_rel_user',
'item_property',
'link',
'link_category',
'lp',
'lp_item',
'lp_item_view',
'lp_iv_interaction',
'lp_iv_objective',
'lp_view',
'notebook',
'metadata',
'online_connected',
'online_link',
'permission_group',
'permission_task',
'permission_user',
'quiz',
'quiz_answer',
'quiz_question',
'quiz_question_option',
'quiz_rel_question',
'resource',
'role',
'role_group',
'role_permissions',
'role_user',
'student_publication',
'student_publication_assignment',
'survey',
'survey_answer',
'survey_group',
'survey_invitation',
'survey_question',
'survey_question_option',
'thematic',
'thematic_advance',
'thematic_plan',
'tool',
'tool_intro',
'userinfo_content',
'userinfo_def',
'wiki',
'wiki_conf',
'wiki_discuss',
'wiki_mailcue'
);
$output->writeln('');
$output->writeln('Course DB'.$row_course['db_name']);
$old_count = 0;
foreach ($table_list as $table) {
$just_table_name = $table;
$old_table = $row_course['db_name'].".".$table;
if ($singleDbForm) {
$old_table = "$prefix{$row_course['db_name']}_".$table;
$just_table_name = "$prefix{$row_course['db_name']}_".$table;
}
$course_id = $row_course['id'];
$new_table = DB_COURSE_PREFIX.$table;
//Use the old database (if this is the case)
if (!$singleDbForm) {
// otherwise just use the main one
iDatabase::select_db($row_course['db_name']);
} else {
iDatabase::select_db($dbNameForm);
}
//Count of rows
$sql = "SHOW TABLES LIKE '$just_table_name'";
$result = iDatabase::query($sql);
if (Database::num_rows($result)) {
$sql = "SELECT count(*) FROM $old_table";
$result = iDatabase::query($sql);
$old_count = 0;
if ($result) {
$row = iDatabase::fetch_row($result);
$old_count = $row[0];
} else {
$output->writeln("Count(*) in table $old_table failed");
}
$sql = "SELECT * FROM $old_table";
$result = iDatabase::query($sql);
$count = 0;
/* Loads the main database */
iDatabase::select_db($dbNameForm);
while($row = iDatabase::fetch_array($result, 'ASSOC')) {
$row['c_id'] = $course_id;
$id = iDatabase::insert($new_table, $row);
if (is_numeric($id)) {
$count++;
} else {
$errors[$old_table][] = $row;
}
}
//$output->writeln("$count/$old_count rows inserted in $new_table");
if ($old_count != $count) {
$output->writeln("ERROR count of new and old table doesn't match: $old_count - $new_table");
$output->writeln("Check the results: ");
$output->writeln(print_r($errors, 1));
}
} else {
$output->writeln('');
$output->writeln("Seems that the table $old_table doesn't exists ");
}
}
$progress->advance();
}
$progress->finish();
$output->writeln("End course migration");
/* Start work fix */
$output->writeln("Starting work fix");
/* Fixes the work subfolder and work with no parent issues */
$courseList = \CourseManager::get_real_course_list();
$work_table = $_configuration['main_database'].".student_publication";
$item_table = $_configuration['main_database'].".item_property";
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
$sys_course_path = api_get_path(SYS_COURSE_PATH);
$today = api_get_utc_datetime();
$user_id = 1;
foreach ($courseList as $course) {
$courseId = $course['id']; //int id
//1. Searching for works with no parents
$sql = "SELECT * FROM $work_table WHERE parent_id = 0 AND filetype ='file' AND c_id = $courseId ";
$result = Database::query($sql);
$work_list = array();
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$work_list[] = $row;
}
}
$course_dir = $sys_course_path.$course['directory'];
$base_work_dir = $course_dir.'/work';
//2. Looping if there are works with no parents
if (!empty($work_list)) {
$work_dir_created = array();
foreach ($work_list as $work) {
$session_id = intval($work['session_id']);
$group_id = intval($work['post_group_id']);
$work_key = $session_id.$group_id;
//Only create the folder once
if (!isset($work_dir_created[$work_key])) {
$dir_name = "default_tasks_".$group_id."_".$session_id;
//2.1 Creating a new work folder
$sql = "INSERT INTO $work_table SET
c_id = '$courseId',
url = 'work/".$dir_name."',
title = 'Tasks',
description = '',
author = '',
active = '1',
accepted = '1',
filetype = 'folder',
post_group_id = '$group_id',
sent_date = '".$today."',
parent_id = '0',
qualificator_id = '',
user_id = '".$user_id."'";
iDatabase::query($sql);
$id = Database::insert_id();
//2.2 Adding the folder in item property
if ($id) {
//api_item_property_update($row_course, 'work', $id, 'DirectoryCreated', $user_id, $group_id, null, 0, 0 , $session_id);
$sql = "INSERT INTO $item_table (c_id, tool, ref, insert_date, insert_user_id, lastedit_date, lastedit_type, lastedit_user_id, to_group_id, visibility, id_session)
VALUES ('$courseId', 'work','$id','$today', '$user_id', '$today', 'DirectoryCreated','$user_id', '$group_id', '1', '$session_id')";
iDatabase::query($sql);
$work_dir_created[$work_key] = $id;
create_unexisting_work_directory($base_work_dir, $dir_name);
$final_dir = $base_work_dir.'/'.$dir_name;
}
} else {
$final_dir = $base_work_dir.'/'.$dir_name;
}
//2.3 Updating the url
if (!empty($work_dir_created[$work_key])) {
$parent_id = $work_dir_created[$work_key];
$new_url = "work/".$dir_name.'/'.basename($work['url']);
$new_url = Database::escape_string($new_url);
$sql = "UPDATE $work_table SET url = '$new_url', parent_id = $parent_id, contains_file = '1' WHERE id = {$work['id']} AND c_id = $courseId";
iDatabase::query($sql);
if (is_dir($final_dir)) {
rename($course_dir.'/'.$work['url'], $course_dir.'/'.$new_url);
}
}
}
}
//3.0 Moving subfolders to the root
$sql = "SELECT * FROM $work_table WHERE parent_id <> 0 AND filetype ='folder' AND c_id = $courseId";
$result = Database::query($sql);
$work_list = array();
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
$work_list[] = $row;
}
if (!empty($work_list)) {
foreach ($work_list as $work_folder) {
$folder_id = $work_folder['id'];
check_work($folder_id, $work_folder['url'], $work_table, $base_work_dir, $courseId);
}
}
}
}
$output->writeln("End work fix");
//Remove dn_name
/*$query = "UPDATE course SET db_name = ''";
$mainConnection->executeQuery($query);*/
$mainConnection->commit();
}
};
function check_work($folder_id, $work_url, $work_table, $base_work_dir, $courseId) {
$uniq_id = uniqid();
//Looking for subfolders
$sql = "SELECT * FROM $work_table WHERE parent_id = $folder_id AND filetype ='folder' AND c_id = $courseId";
$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, $courseId);
}
}
//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 AND c_id = $courseId";
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' AND c_id = $courseId";
$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']} AND c_id = $courseId";
iDatabase::query($sql);
}
}
}
}

@ -1,23 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Chamilo LMS
*
* @package chamilo.install
*/
if (defined('SYSTEM_INSTALLATION')) {
$conf_dir = api_get_path(CONFIGURATION_PATH);
$portfolio_conf_dist = $conf_dir . 'portfolio.conf.dist.php';
$portfolio_conf = $conf_dir . 'portfolio.conf.dist.php';
if (!file_exists($portfolio_conf)) {
copy($portfolio_conf_dist, $portfolio_conf);
}
//Adds events.conf file
if (! file_exists(api_get_path(CONFIGURATION_PATH).'events.conf.php')) {
copy(api_get_path(CONFIGURATION_PATH).'events.conf.dist.php', api_get_path(CONFIGURATION_PATH).'events.conf.php');
}
}

@ -107,23 +107,9 @@ $console->addCommands(
new \Doctrine\DBAL\Migrations\Tools\Console\Command\StatusCommand(),
new \Doctrine\DBAL\Migrations\Tools\Console\Command\VersionCommand(),
// Chamilo commands.
new ChamiloLMS\Command\Database\UpgradeCommand(),
new ChamiloLMS\Command\Database\InstallCommand(),
new ChamiloLMS\Command\Database\StatusCommand(),
new ChamiloLMS\Command\Database\SetupCommand(),
// Chash commands.
/*new Chash\Command\Database\RunSQLCommand(),
new Chash\Command\Database\DumpCommand(),
new Chash\Command\Database\RestoreCommand(),
new Chash\Command\Database\SQLCountCommand(),
new Chash\Command\Database\FullBackupCommand(),
new Chash\Command\Database\DropDatabaseCommand(),
new Chash\Command\Files\CleanTempFolderCommand(),
new Chash\Command\Files\CleanConfigFiles(),
new Chash\Command\Translation\ExportLanguageCommand(),
new Chash\Command\Translation\ImportLanguageCommand()*/
new Chash\Command\Installation\UpgradeCommand(),
new Chash\Command\Installation\InstallCommand(),
)
);

@ -1,598 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Command\Database;
use Symfony\Component\Yaml\Dumper;
use Symfony\Component\Yaml\Parser;
use Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand;
class CommonCommand extends AbstractCommand
{
public $portalSettings;
public $databaseSettings;
public $adminSettings;
public $rootSys;
/**
* @param array $portalSettings
*/
public function setPortalSettings(array $portalSettings)
{
$this->portalSettings = $portalSettings;
}
/**
* @return array
*/
public function getPortalSettings()
{
return $this->portalSettings;
}
/**
* @param array $databaseSettings
*/
public function setDatabaseSettings(array $databaseSettings)
{
$this->databaseSettings = $databaseSettings;
}
/**
* @return array
*/
public function getDatabaseSettings()
{
return $this->databaseSettings;
}
/**
* @param array $adminSettings
*/
public function setAdminSettings(array $adminSettings)
{
$this->adminSettings = $adminSettings;
}
public function getAdminSettings()
{
return $this->adminSettings;
}
/**
* @param string $path
*/
public function setRootSys($path)
{
$this->rootSys = $path;
}
/**
* @return string
*/
public function getRootSys()
{
return $this->rootSys;
}
/**
* Gets the version name folders located in main/install
*
* @return array
*/
public function getAvailableVersions()
{
$installPath = $this->getRootSys().'main/install';
$dir = new \DirectoryIterator($installPath);
$dirList = array();
foreach ($dir as $fileInfo) {
if ($fileInfo->isDir() && !$fileInfo->isDot()) {
$dirList[] = $fileInfo->getFilename();
}
}
return $dirList;
}
/**
* @return array
*/
public function getAdminSettingsParams()
{
return array(
'firstname' => array(
'attributes' => array(
'label' => 'Firstname',
'data' => 'John'
),
'type' => 'text'
),
'lastname' => array(
'attributes' => array(
'label' => 'Lastname',
'data' => 'Doe'
),
'type' => 'text'
),
'username' => array(
'attributes' => array(
'label' => 'Username',
'data' => 'admin'
),
'type' => 'text'
),
'password' => array(
'attributes' => array(
'label' => 'Password',
'data' => 'admin'
),
'type' => 'password'
),
'email' => array(
'attributes' => array(
'label' => 'Email',
'data' => 'admin@example.org'
),
'type' => 'email'
),
'language' => array(
'attributes' => array(
'label' => 'Language',
'data' => 'english'
),
'type' => 'text'
),
'phone' => array(
'attributes' => array(
'label' => 'Phone',
'data' => '123456'
),
'type' => 'text'
)
);
}
/**
* @return array
*/
public function getPortalSettingsParams()
{
return array(
'sitename' => array(
'attributes' => array(
'label' => 'Site name',
'data' => 'Campus Chamilo',
),
'type' => 'text'
),
'institution' => array(
'attributes' => array(
'data' => 'Chamilo',
),
'type' => 'text'
),
'institution_url' => array(
'attributes' => array(
'label' => 'URL',
'data' => 'http://localhost/',
),
'type' => 'text'
),
'encrypt_method' => array(
'attributes' => array(
'choices' => array(
'sha1' => 'sha1',
'md5' => 'md5',
'none' => 'none'
),
'data' => 'sha1'
),
'type' => 'choice'
),
'permissions_for_new_directories' => array(
'attributes' => array(
'data' => '0777',
),
'type' => 'text'
),
'permissions_for_new_files' => array(
'attributes' => array(
'data' => '0666',
),
'type' => 'text'
),
);
}
/**
* Database parameters that are going to be parsed during the console/browser installation
* @return array
*/
public function getDatabaseSettingsParams()
{
return array(
'driver' => array(
'attributes' => array(
'choices' =>
array(
'pdo_mysql' => 'pdo_mysql',
'pdo_sqlite' => 'pdo_sqlite',
'pdo_pgsql' => 'pdo_pgsql',
'pdo_oci' => 'pdo_oci',
'ibm_db2' => 'ibm_db2',
'pdo_ibm' => 'pdo_ibm',
'pdo_sqlsrv' => 'pdo_sqlsrv'
),
'data' => 'pdo_mysql'
),
'type' => 'choice'
),
'host' => array(
'attributes' => array(
'label' => 'Host',
'data' => 'localhost',
),
'type' => 'text'
),
'dbname' => array(
'attributes' => array(
'label' => 'Database name',
'data' => 'chamilo',
),
'type' => 'text'
),
'user' => array(
'attributes' => array(
'label' => 'User',
'data' => 'root',
),
'type' => 'text'
),
'password' => array(
'attributes' => array(
'label' => 'Password',
'data' => 'root',
),
'type' => 'password'
)
);
}
/**
* Gets the installation version path
*
* @param string $version
*
* @return string
*/
public function getInstallationPath($version)
{
return __DIR__.'/../../../../main/install/'.$version.'/';
}
/**
* Gets the content of a version from the available versions
*
* @param string $version
*
* @return bool
*/
public function getAvailableVersionInfo($version)
{
$versionList = $this->availableVersions();
foreach ($versionList as $versionName => $versionInfo) {
if ($version == $versionName) {
return $versionInfo;
}
}
return false;
}
/**
* Gets the min version available to migrate with this command
* @return mixed
*/
public function getMinVersionSupportedByInstall()
{
return key($this->availableVersions());
}
/**
* Gets an array with the supported versions to migrate
* @return array
*/
public function getVersionNumberList()
{
$versionList = $this->availableVersions();
$versionNumberList = array();
foreach ($versionList as $version => $info) {
$versionNumberList[] = $version;
}
return $versionNumberList;
}
/**
* Gets an array with the settings for every supported version
*
* @return array
*/
public function availableVersions()
{
$versionList = array(
'1.8.7' => array(
'require_update' => false,
),
'1.8.8' => array(
'require_update' => true,
'pre' => 'migrate-db-1.8.7-1.8.8-pre.sql',
'post' => null,
'update_db' => 'update-db-1.8.7-1.8.8.inc.php',
//'update_files' => 'update-files-1.8.7-1.8.8.inc.php',
'hook_to_doctrine_version' => '8' //see ChamiloLMS\Migrations\Version8.php file
),
'1.8.8.2' => array(
'require_update' => false,
'parent' => '1.8.8'
),
'1.8.8.4' => array(
'require_update' => false,
'parent' => '1.8.8'
),
'1.8.8.6' => array(
'require_update' => false,
'parent' => '1.8.8'
),
'1.9.0' => array(
'require_update' => true,
'pre' => 'migrate-db-1.8.8-1.9.0-pre.sql',
'post' => null,
'update_db' => 'update-db-1.8.8-1.9.0.inc.php',
'update_files' => 'update-files-1.8.8-1.9.0.inc.php',
'hook_to_doctrine_version' => '9'
),
'1.9.2' => array(
'require_update' => false,
'parent' => '1.9.0'
),
'1.9.4' => array(
'require_update' => false,
'parent' => '1.9.0'
),
'1.9.6' => array(
'require_update' => false,
'parent' => '1.9.0'
),
'1.9.8' => array(
'require_update' => false,
'parent' => '1.9.0'
),
'1.10.0' => array(
'require_update' => true,
'pre' => 'migrate-db-1.9.0-1.10.0-pre.sql',
'post' => 'migrate-db-1.9.0-1.10.0-post.sql',
'update_db' => 'update-db-1.9.0-1.10.0.inc.php',
'update_files' => null,
'hook_to_doctrine_version' => '10'
)
);
return $versionList;
}
/**
* Gets the Doctrine configuration file path
* @return string
*/
public function getMigrationConfigurationFile()
{
return api_get_path(SYS_PATH).'src/ChamiloLMS/Migrations/migrations.yml';
}
/**
* Writes the configuration file a yml file
* @param string $version
* @return bool
*
*/
public function writeConfiguration($version)
{
$portalSettings = $this->getPortalSettings();
$databaseSettings = $this->getDatabaseSettings();
$configurationPath = $this->getHelper('configuration')->getNewConfigurationPath();
// Creates a YML File
$configuration = array();
$configuration['system_version'] = $version;
$configuration['db_host'] = $databaseSettings['host'];
$configuration['db_user'] = $databaseSettings['user'];
$configuration['db_password'] = $databaseSettings['password'];
$configuration['main_database'] = $databaseSettings['dbname'];
$configuration['driver'] = $databaseSettings['driver'];
$configuration['root_web'] = $portalSettings['institution_url'];
$configuration['root_sys'] = $this->getRootSys();
$configuration['security_key'] = md5(uniqid(rand().time()));
// Hash function method
$configuration['password_encryption'] = $portalSettings['encrypt_method'];
// You may have to restart your web server if you change this
$configuration['session_stored_in_db'] = false;
// Session lifetime
$configuration['session_lifetime'] = 3600;
// Activation for multi-url access
$_configuration['multiple_access_urls'] = false;
//Deny the elimination of users
$configuration['deny_delete_users'] = false;
//Prevent all admins from using the "login_as" feature
$configuration['login_as_forbidden_globally'] = false;
// Version settings
$configuration['system_version'] = '1.10.0';
/*
$dumper = new Dumper();
$yaml = $dumper->dump($configuration, 2);
$newConfigurationFile = $configurationPath.'configuration.yml';
file_put_contents($newConfigurationFile, $yaml);
return file_exists($newConfigurationFile);*/
// Create a configuration.php
$configurationPath.'configuration.dist.php';
$contents = file_get_contents($configurationPath.'configuration.dist.php');
$configuration['{DATE_GENERATED}'] = date('r');
$config['{DATABASE_HOST}'] = $configuration['db_host'];
$config['{DATABASE_USER}'] = $configuration['db_user'];
$config['{DATABASE_PASSWORD}'] = $configuration['db_password'];
$config['{DATABASE_MAIN}'] = $configuration['main_database'];
$config['{DATABASE_DRIVER}'] = $configuration['driver'];
$config['{ROOT_WEB}'] = $portalSettings['institution_url'];
$config['{ROOT_SYS}'] = $this->getRootSys();
//$config['{URL_APPEND_PATH}'] = $urlAppendPath;
$config['{SECURITY_KEY}'] = $configuration['security_key'];
$config['{ENCRYPT_PASSWORD}'] = $configuration['password_encryption'];
$config['SESSION_LIFETIME'] = 3600;
$config['{NEW_VERSION}'] = $this->getLatestVersion();
$config['NEW_VERSION_STABLE'] = 'true';
foreach ($config as $key => $value) {
$contents = str_replace($key, $value, $contents);
}
$newConfigurationFile = $configurationPath.'configuration.php';
return file_put_contents($newConfigurationFile, $contents);
}
/**
* Updates the configuration.yml file
* @param string $version
*
* @return bool
*/
public function updateConfiguration($version)
{
global $userPasswordCrypted, $storeSessionInDb;
$_configuration = $this->getHelper('configuration')->getConfiguration();
$configurationPath = $this->getHelper('configuration')->getConfigurationPath();
$dumper = new Dumper();
$_configuration['system_version'] = $version;
if (!isset($_configuration['password_encryption'])) {
$_configuration['password_encryption'] = $userPasswordCrypted;
}
if (!isset($_configuration['session_stored_in_db'])) {
$_configuration['session_stored_in_db'] = $storeSessionInDb;
}
$yaml = $dumper->dump($_configuration, 2); //inline
$newConfigurationFile = $configurationPath.'../../../app/config/configuration.yml';
file_put_contents($newConfigurationFile, $yaml);
return file_exists($newConfigurationFile);
}
/**
* Gets the SQL files relation with versions
* @return array
*/
public function getDatabaseMap()
{
$defaultCourseData = array(
array(
'name' => 'course1',
'sql' => array(
'db_course1.sql',
),
),
array(
'name' => 'course2',
'sql' => array(
'db_course2.sql'
)
),
);
return array(
'1.8.7' => array(
'section' => array(
'main' => array(
array(
'name' => 'chamilo',
'sql' => array(
'db_main.sql',
'db_stats.sql',
'db_user.sql'
),
),
),
'course' => $defaultCourseData
),
),
'1.8.8' => array(
'section' => array(
'main' => array(
array(
'name' => 'chamilo',
'sql' => array(
'db_main.sql',
'db_stats.sql',
'db_user.sql'
),
),
),
'course' => $defaultCourseData
),
),
'1.9.0' => array(
'section' => array(
'main' => array(
array(
'name' => 'chamilo',
'sql' => array(
'db_course.sql',
'db_main.sql',
'db_stats.sql',
'db_user.sql'
),
),
),
)
),
'1.10.0' => array(
'section' => array(
'main' => array(
array(
'name' => 'chamilo',
'sql' => array(
'db_course.sql',
'db_main.sql'
),
),
),
)
)
);
}
}

@ -1,509 +0,0 @@
<?php
/* For licensing terms, see /license.txt */
namespace ChamiloLMS\Command\Database;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
use Symfony\Component\Yaml\Dumper;
/**
* Class InstallCommand
*/
class InstallCommand extends CommonCommand
{
public $commandLine = true;
/**
* @return string
*/
public function getLatestVersion()
{
return '1.10.0';
}
protected function configure()
{
$this
->setName('chamilo:install')
->setDescription('Execute a Chamilo installation to a specified version')
->addArgument('version', InputArgument::REQUIRED, 'The version to migrate to.', null)
->addArgument('path', InputArgument::OPTIONAL, 'The path to the chamilo folder');
}
/**
* Executes a command via CLI
*
* @param Console\Input\InputInterface $input
* @param Console\Output\OutputInterface $output
*
* @return int|null|void
*/
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
{
if (PHP_SAPI != 'cli') {
$this->commandLine = false;
}
// Arguments
$path = $input->getArgument('path');
$version = $input->getArgument('version');
// Setting configuration helper
$this->getApplication()->getHelperSet()->set(new \Chash\Helpers\ConfigurationHelper(), 'configuration');
//$configurationPath = $this->getHelper('configuration')->getConfigurationPath($path);
// Getting the new config folder
$configurationPath = $this->getHelper('configuration')->getNewConfigurationPath($path);
$this->setRootSys(realpath($configurationPath.'/../').'/');
$dialog = $this->getHelperSet()->get('dialog');
$defaultVersion = $this->getLatestVersion();
if (empty($version)) {
$version = $defaultVersion;
}
if ($this->commandLine) {
$output->writeln("<comment>Welcome to the Chamilo $version installation process.</comment>");
} else {
$output->writeln("<comment>Chamilo installation process. </comment>");
}
if (!is_writable($configurationPath)) {
$output->writeln("<comment>Folder ".$configurationPath." must be writable</comment>");
return 0;
}
$sqlFolder = $this->getInstallationPath($version);
if (!is_dir($sqlFolder)) {
$output->writeln("<comment>Sorry you can't install that version of Chamilo :( Supported versions:</comment> <info>".implode(', ', $this->getAvailableVersions()));
return 0;
}
if (file_exists($configurationPath.'configuration.php') || file_exists($configurationPath.'configuration.yml')) {
if ($this->commandLine) {
$output->writeln("<comment>There's a Chamilo portal here ".$configurationPath." you must run</comment> <info>chamilo:setup </info><comment>if you want a fresh install.</comment>");
} else {
$output->writeln("<comment>There's a Chamilo portal here ".$configurationPath." </comment>");
}
return 0;
/*
if (!$dialog->askConfirmation(
$output,
'<question>There is a Chamilo installation located here:</question> '.$configurationPath.' <question>Are you sure you want to continue?</question>(y/N)',
false
)
) {
return 0;
}
if (!$dialog->askConfirmation(
$output,
'<comment>This will be a fresh installation. Old databases and config files will be deleted. </comment></info> <question>Are you sure?</question>(y/N)',
false
)
) {
return 0;
}
$this->cleanInstallation($output);*/
}
$avoidVariables = array(
//'main_database', //default is chamilo
'db_glue',
'table_prefix',
'course_folder',
'db_admin_path',
'cdn_enable',
'verbose_backup',
'session_stored_in_db',
'session_lifetime',
'deny_delete_users',
'system_version',
);
if ($this->commandLine) {
// Ask for portal settings
$params = $this->getPortalSettingsParams();
$total = count($params);
$portalSettings = array();
$output->writeln("<comment>Portal settings (".$total.") </comment>");
$counter = 1;
foreach ($params as $key => $value) {
$data = $dialog->ask(
$output,
"($counter/$total) Please enter the value of the $key (".$value['attributes']['data']."): ",
$value['attributes']['data']
);
$counter++;
$portalSettings[$key] = $data;
}
$this->setPortalSettings($portalSettings);
// Ask for admin settings
$output->writeln("<comment>Admin settings: </comment>");
$params = $this->getAdminSettingsParams();
$total = count($params);
$adminSettings = array();
foreach ($params as $key => $value) {
$data = $dialog->ask(
$output,
"($counter/$total) Please enter the value of the $key (".$value['attributes']['data']."): ",
$value['attributes']['data']
);
$counter++;
$adminSettings[$key] = $data;
}
$this->setAdminSettings($adminSettings);
// Ask for db settings
$output->writeln("<comment>Database settings: </comment>");
$params = $this->getDatabaseSettingsParams();
$total = count($params);
$databaseSettings = array();
foreach ($params as $key => $value) {
$data = $dialog->ask(
$output,
"($counter/$total) Please enter the value of the $key (".$value['attributes']['data']."): ",
$value['attributes']['data']
);
$counter++;
$databaseSettings[$key] = $data;
}
$this->setDatabaseSettings($databaseSettings);
}
$databaseSettings = $this->getDatabaseSettings();
$connectionToHost = $this->getUserAccessConnectionToHost();
$connectionToHostConnect = $connectionToHost->connect();
if ($connectionToHostConnect) {
$output->writeln("<comment>Connection enabled for user: </comment><info>".$databaseSettings['user']);
} else {
$output->writeln("<error>No access to the database for user:</error><info>".$databaseSettings['user']."</info>");
return 0;
}
if ($this->commandLine) {
$databases = $connectionToHost->listDatabases();
if (in_array($databaseSettings['dbname'], $databases)) {
$dialog = $this->getHelperSet()->get('dialog');
if (!$dialog->askConfirmation(
$output,
'<comment>The database '.$databaseSettings['dbname'].' exists and is going to be dropped! </comment></info> <question>Are you sure?</question>(y/N)',
false
)
) {
return 0;
}
}
}
// When installing always drop the current database
try {
$sm = $connectionToHost->getSchemaManager();
$sm->dropAndCreateDatabase($databaseSettings['dbname']);
$connectionToDatabase = $this->getUserAccessConnectionToDatabase();
$connect = $connectionToDatabase->connect();
} catch (\Exception $e) {
$output->writeln(sprintf('<error>Could not create database for connection named <comment>%s</comment></error>', $databaseSettings['dbname']));
$output->writeln(sprintf('<error>%s</error>', $e->getMessage()));
return 0;
}
if ($connect) {
$output->writeln("<comment>Connection to database '".$databaseSettings['dbname']."' established.</comment>");
$configurationWasSaved = $this->writeConfiguration($version);
if ($configurationWasSaved) {
// $app['chamilo.log'] = $app['log.path'].'/chamilo_install.log';
// Installing database
$result = $this->install($version, $output);
if ($result) {
require_once $this->getRootSys().'main/inc/lib/database.constants.inc.php';
require_once $this->getRootSys().'main/inc/lib/api.lib.php';
// In order to use the Database class
$database = new \Database($this->getHelper('db')->getConnection(), null);
$this->createAdminUser($output);
//@todo ask this during installation
$adminInfo = $this->getAdminSettings();
$portalSettings = $this->getPortalSettings();
api_set_setting('emailAdministrator', $adminInfo['email']);
api_set_setting('administratorSurname', $adminInfo['lastname']);
api_set_setting('administratorName', $adminInfo['firstname']);
api_set_setting('platformLanguage', $adminInfo['language']);
api_set_setting('allow_registration', '1');
api_set_setting('allow_registration_as_teacher', '1');
api_set_setting('permissions_for_new_directories', $portalSettings['permissions_for_new_directories']);
api_set_setting('permissions_for_new_files', $portalSettings['permissions_for_new_files']);
api_set_setting('Institution', $portalSettings['institution']);
api_set_setting('InstitutionUrl', $portalSettings['institution_url']);
api_set_setting('siteName', $portalSettings['sitename']);
// Injecting the chamilo application (because the configuration.php is now set)
$app = require_once $this->getRootSys().'main/inc/global.inc.php';
$filesystem = $app['chamilo.filesystem'];
// Creating temp folders
$filesystem->createFolders($app['temp.paths']->folders);
$output->writeln("<comment>Temp folders were created.</comment>");
//$app->run();
//$versionInfo = $this->getAvailableVersionInfo($version);
// Optional run Doctrine migrations from src/database/migrations
/* $command = $this->getApplication()->find('migrations:migrate');
$definition = $command->getDefinition();
$arguments = array(
'command' => 'migrations:migrate',
'version' => $versionInfo['hook_to_doctrine_version'],
'--configuration' => $this->getMigrationConfigurationFile()
);
$output->writeln("<comment>Executing migrations:migrate ".$versionInfo['hook_to_doctrine_version']." --configuration=".$this->getMigrationConfigurationFile()."<comment>");
$input = new ArrayInput($arguments, $definition);
$return = $command->run($input, $output);
*/
//$output->writeln("<comment>Migration ended succesfully</comment>");
//$output->writeln("<comment>Chamilo was successfully installed. Go to your browser and enter:</comment> <info>".$newConfigurationArray['root_web']);
return 1;
} else {
$output->writeln("<comment>There was an error during installation.</comment>");
return 0;
}
} else {
$output->writeln("<comment>Configuration file was not saved</comment>");
return 0;
}
} else {
$output->writeln("<comment>Can't create database '".$databaseSettings['dbname']."' </comment>");
return 0;
}
}
/**
* Creates an admin user
*
* @param $newConfigurationArray
* @param $output
*
* @return bool
*/
public function createAdminUser($output)
{
//By default admin is = 1 so we update it
$userInfo = $this->getAdminSettings();
$userInfo['user_id'] = 1;
$userInfo['auth_source'] = 'platform';
$userInfo['password'] = $this->encryptPassword($this->portalSettings['encrypt_method'], $userInfo['password']);
$result = \UserManager::update($userInfo);
if ($result) {
\UserManager::add_user_as_admin($userInfo['user_id']);
$output->writeln("<comment>User admin created with id: 1</comment>");
return true;
}
return false;
}
private function setDoctrineSettings()
{
$config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache);
$reader = new AnnotationReader();
$driverImpl = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array());
$config->setMetadataDriverImpl($driverImpl);
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Proxies');
$em = \Doctrine\ORM\EntityManager::create($this->getDatabaseSettings(), $config);
// Fixes some errors
$platform = $em->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');
$platform->registerDoctrineTypeMapping('set', 'string');
$helpers = array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em),
'configuration' => new \Chash\Helpers\ConfigurationHelper()
);
foreach ($helpers as $name => $helper) {
$this->getApplication()->getHelperSet()->set($helper, $name);
}
}
/**
* Installs Chamilo
*
* @param string $version
* @param array $_configuration
* @param $output
* @return bool
*/
public function install($version, $output)
{
$this->setDoctrineSettings();
$sqlFolder = $this->getInstallationPath($version);
$databaseMap = $this->getDatabaseMap();
if (isset($databaseMap[$version])) {
$dbInfo = $databaseMap[$version];
$sections = $dbInfo['section'];
foreach ($sections as $sectionData) {
foreach ($sectionData as $dbInfo) {
$databaseName = $dbInfo['name'];
$dbList = $dbInfo['sql'];
$output->writeln("<comment>Creating database</comment> <info>$databaseName ... </info>");
// Fixing db list
foreach ($dbList as &$db) {
$db = $sqlFolder.$db;
}
$command = $this->getApplication()->find('dbal:import');
//Importing sql files
$arguments = array(
'command' => 'dbal:import',
'file' => $dbList
);
$input = new ArrayInput($arguments);
$command->run($input, $output);
//Getting extra information about the installation
$output->writeln("<comment>Database </comment><info>$databaseName </info><comment>process ended!</comment>");
}
}
if (isset($sections) && isset($sections['course'])) {
//@todo fix this
foreach ($sections['course'] as $courseInfo) {
$databaseName = $courseInfo['name'];
$output->writeln("Inserting course database in chamilo: <info>$databaseName</info>");
$this->createCourse($databaseName);
}
}
if ($this->commandLine) {
$output->writeln("<comment>Check your installation status with </comment><info>chamilo:status</info>");
}
return true;
}
return false;
}
/**
*
* In step 3. Tests establishing connection to the database server.
* If it's a single database environment the function checks if the database exist.
* If the database doesn't exist we check the creation permissions.
*
* @return int 1 when there is no problem;
* 0 when a new database is impossible to be created, then the single/multiple database configuration is impossible too
* -1 when there is no connection established.
*/
public function testDatabaseConnection()
{
$conn = $this->testUserAccessConnection();
$connect = $conn->connect();
return $connect;
}
public function getUserAccessConnectionToHost()
{
$config = new \Doctrine\DBAL\Configuration();
$databaseConnection = $this->getDatabaseSettings();
$databaseConnection['dbname'] = null;
$conn = \Doctrine\DBAL\DriverManager::getConnection($databaseConnection, $config);
return $conn;
}
public function getUserAccessConnectionToDatabase()
{
$config = new \Doctrine\DBAL\Configuration();
$databaseConnection = $this->getDatabaseSettings();
$conn = \Doctrine\DBAL\DriverManager::getConnection($databaseConnection, $config);
return $conn;
}
/**
* Creates a course (only an insert in the DB)
* @param string $databaseName
*/
public function createCourse($databaseName)
{
$params = array(
'code' => $databaseName,
'db_name' => $databaseName,
'course_language' => 'english',
'title' => $databaseName,
'visual_code' => $databaseName
);
@\Database::insert(TABLE_MAIN_COURSE, $params);
}
/**
* This function gets the hash in md5 or sha1 (it depends in the platform config) of a given password
* @param string password
* @return string password with the applied hash
*/
function encryptPassword($encryptionMode, $password, $salt = '') {
switch ($encryptionMode) {
case 'sha1':
return empty($salt) ? sha1($password) : sha1($password.$salt);
case 'none':
return $password;
case 'md5':
default:
return empty($salt) ? md5($password) : md5($password.$salt);
}
}
}

@ -1,26 +0,0 @@
<?php
namespace ChamiloLMS\Command\Database;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
use Symfony\Component\Yaml\Dumper;
/**
* Class InstallExtendCommand
*/
class InstallExtendCommand extends InstallCommand
{
protected function configure()
{
$this
->setName('chamilo:install_extend')
->setDescription('Execute a Chamilo installation to a specified version')
->addArgument('version', InputArgument::REQUIRED, 'The version to migrate to.', null);
}
}

@ -1,67 +0,0 @@
<?php
namespace ChamiloLMS\Command\Database;
use Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
/**
* Class MigrationCommand
*/
class SetupCommand extends AbstractCommand
{
protected function configure()
{
$this
->setName('chamilo:setup')
->setDescription('Prepares a portal for a new installation');
//->addOption('configuration', null, InputOption::VALUE_OPTIONAL, 'The path to a migrations configuration file.');
}
/**
* Executes a command via CLI
*
* @param Console\Input\InputInterface $input
* @param Console\Output\OutputInterface $output
*
* @return int|null|void
*/
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
{
$output->writeln("<comment>This command will clean your installation: drop db, removes config files, cache files</comment>");
//Drop database chash command
$command = $this->getApplication()->find('db:drop_databases');
$arguments = array(
'command' => 'db:drop_databases'
);
$input = new ArrayInput($arguments);
$command->run($input, $output);
//Clean temp chash command
$command = $this->getApplication()->find('files:clean_archives');
$arguments = array(
'command' => 'files:clean_archives'
);
$input = new ArrayInput($arguments);
$command->run($input, $output);
//Clean files
$command = $this->getApplication()->find('files:clean_config_files');
$arguments = array(
'command' => 'files:clean_archives'
);
$input = new ArrayInput($arguments);
$command->run($input, $output);
$output->writeln("<comment>Cleaned</comment>");
}
}

@ -1,57 +0,0 @@
<?php
namespace ChamiloLMS\Command\Database;
use Doctrine\DBAL\Migrations\Tools\Console\Command\AbstractCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
/**
* Class StatusCommand
*/
class StatusCommand extends AbstractCommand
{
protected function configure()
{
$this
->setName('chamilo:status')
->setDescription('Show the information of the current Chamilo installation')
->addOption('configuration', null, InputOption::VALUE_OPTIONAL, 'The path to a migrations configuration file.');
}
/**
* Executes a command via CLI
*
* @param Console\Input\InputInterface $input
* @param Console\Output\OutputInterface $output
*
* @return int|null|void
*/
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
{
global $_configuration;
if (empty($_configuration)) {
$output->writeln("<comment>Chamilo is not installed here!</comment>");
exit;
}
$configurationPath = api_get_path(SYS_PATH).'main/inc/conf/';
$query = "SELECT selected_value FROM settings_current WHERE variable = 'chamilo_database_version'";
$conn = $this->getHelper('main_database')->getConnection();
$data = $conn->executeQuery($query);
$data = $data->fetch();
$chamiloVersion = $data['selected_value'];
$output->writeln('<comment>Chamilo status</comment>');
$output->writeln("<comment>Chamilo configuration path:</comment> <info>".$configurationPath."</info>");
$output->writeln('<comment>Chamilo $_configuration[system_version]:</comment> <info>'.$_configuration['system_version'].'</info>');
$output->writeln("<comment>Chamilo setting: 'chamilo_database_version':</comment> <info>".$chamiloVersion."</info>");
}
}

@ -1,613 +0,0 @@
<?php
namespace ChamiloLMS\Command\Database;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console;
use Symfony\Component\Yaml\Dumper;
use Symfony\Component\Yaml\Parser;
//Constant needed in order to call migrate-db-* and update-files-*
define('SYSTEM_INSTALLATION', 1);
/**
* Class UpgradeCommand
*/
class UpgradeCommand extends CommonCommand
{
public $queryList;
public $databaseList;
protected function configure()
{
$this
->setName('chamilo:upgrade')
->setDescription('Execute a chamilo migration to a specified version or the latest available version.')
->addArgument('version', InputArgument::REQUIRED, 'The version to migrate to.', null)
->addOption('dry-run', null, InputOption::VALUE_NONE, 'Execute the migration as a dry run.')
->addOption('configuration', null, InputOption::VALUE_OPTIONAL, 'The path to a migrations configuration file.')
->addOption('path', null, InputOption::VALUE_OPTIONAL, 'The path to the chamilo folder')
->addOption('force', null, InputOption::VALUE_NONE, 'Force the update. Only for tests');
}
/**
* Executes a command via CLI
*
* @param Console\Input\InputInterface $input
* @param Console\Output\OutputInterface $output
*
* @return int|null|void
*/
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output)
{
$path = $input->getOption('path');
$version = $input->getArgument('version');
$dryRun = $input->getOption('dry-run');
$force = $input->getOption('force');
$_configuration = $this->getHelper('configuration')->getConfiguration();
if (empty($_configuration)) {
$output->writeln("<comment>Chamilo is not installed here!</comment>");
exit;
}
$configurationPath = $this->getHelper('configuration')->getConfigurationPath($path);
//Checking configuration file
if (!is_writable($configurationPath)) {
$output->writeln("<comment>Folder ".$configurationPath." must have writable permissions</comment>");
exit;
}
//Setting configuration variable in order to get the doctrine version:
$input->setOption('configuration', $this->getMigrationConfigurationFile());
$configuration = $this->getMigrationConfiguration($input, $output);
//Doctrine migrations version
$doctrineVersion = $configuration->getCurrentVersion();
//Getting supported version number list
$versionNameList = $this->getVersionNumberList();
$minVersion = $this->getMinVersionSupportedByInstall();
$versionList = $this->availableVersions();
//Checking version
if (!in_array($version, $versionNameList)) {
$output->writeln("<comment>Version '$version' is not available</comment>");
$output->writeln("<comment>Available versions: </comment><info>".implode(', ', $versionNameList)."</info>");
exit;
}
$currentVersion = null;
//Checking root_sys and correct Chamilo version to install
if (empty($_configuration)) {
$output->writeln("<comment>Can't migrate Chamilo. This is not a Chamilo folder installation.</comment>");
exit;
}
//Checking system_version
if (!isset($_configuration['system_version']) || empty($_configuration['system_version'])) {
$output->writeln("<comment>You have something wrong in your Chamilo conf file. Check it with chamilo:status.</comment>");
exit;
}
if (version_compare($_configuration['system_version'], $minVersion, '<')) {
$output->writeln("<comment>Your Chamilo version is not supported! The minimun version is: </comment><info>$minVersion</info> <comment>You want to update from <info>".$_configuration['system_version']."</info> <comment>to</comment> <info>$minVersion</info>");
exit;
}
if (version_compare($version, $_configuration['system_version'], '>')) {
$currentVersion = $_configuration['system_version'];
} else {
$output->writeln("<comment>Please provide a version greater than </comment><info>".$_configuration['system_version']."</info> <comment>your selected version: </comment><info>$version</info>");
$output->writeln("<comment>You can also check your installation health with </comment><info>chamilo:status");
exit;
}
$versionInfo = $this->getAvailableVersionInfo($version);
if (isset($versionInfo['hook_to_doctrine_version']) && isset($doctrineVersion)) {
if ($doctrineVersion == $versionInfo['hook_to_doctrine_version']) {
$output->writeln("<comment>You already have the latest version. Nothing to update! Doctrine version $doctrineVersion</comment>");
exit;
}
}
if (isset($versionInfo['parent']) && !empty($versionInfo['parent'])) {
$versionInfoParent = $this->getAvailableVersionInfo($versionInfo['parent']);
if ($doctrineVersion == $versionInfoParent['hook_to_doctrine_version']) {
$output->writeln("<comment>You already have the latest version. Nothing to update! Doctrine version $doctrineVersion</comment>");
exit;
}
}
$output->writeln("<comment>Welcome to the Chamilo upgrade!</comment>");
//@todo Too much questions?
$dialog = $this->getHelperSet()->get('dialog');
if (!$dialog->askConfirmation(
$output,
'<question>Are you sure you want to update Chamilo located here?</question> '.$_configuration['root_sys'].' (y/N)',
false
)
) {
return;
}
$dialog = $this->getHelperSet()->get('dialog');
if (!$dialog->askConfirmation(
$output,
'<question>Are you sure you want to update from version</question> <info>'.$_configuration['system_version'].'</info> <comment>to version </comment><info>'.$version.'</info> (y/N)',
false
)
) {
return;
}
$output->writeln('<comment>Migrating from Chamilo version: </comment><info>'.$_configuration['system_version'].'</info><comment> to version <info>'.$version);
//Starting
$output->writeln('<comment>Starting upgrade for Chamilo with configuration file: </comment><info>'.$configurationPath.'configuration.php</info>');
$oldVersion = $currentVersion;
foreach ($versionList as $versionItem => $versionInfo) {
if (version_compare($versionItem, $currentVersion, '>') && version_compare($versionItem, $version, '<=')) {
$output->writeln("----------------------------------------------------------------");
$output->writeln("<comment>Starting migration from version: </comment><info>$oldVersion</info><comment> to </comment><info>$versionItem ");
$output->writeln("");
if (isset($versionInfo['require_update']) && $versionInfo['require_update'] == true) {
//Greater than my current version
$this->startMigration($oldVersion, $versionItem, $dryRun, $output);
$oldVersion = $versionItem;
$output->writeln("----------------------------------------------------------------");
} else {
$output->writeln("<comment>Version <info>'$versionItem'</info> does not need a DB migration</comment>");
}
}
}
$this->updateConfiguration($version);
$output->writeln("<comment>Wow! You just finish to migrate. Too check the current status of your platform. Run </comment><info>chamilo:status</info>");
}
/**
* Starts a migration
*
* @param $fromVersion
* @param $toVersion
* @param $dryRun
* @param $output
*
* @return bool
*/
public function startMigration($fromVersion, $toVersion, $dryRun, $output)
{
//used by monolog
global $app;
//Needed when using require file
$_configuration = $this->getHelper('configuration')->getConfiguration();
$installPath = api_get_path(SYS_CODE_PATH).'install/'.$toVersion.'/';
$versionInfo = $this->getAvailableVersionInfo($toVersion);
$mainConnection = $this->getHelper('main_database')->getConnection();
//Cleaning query list
$this->queryList = array();
//Filling sqlList array with "pre" db changes
if (isset($versionInfo['pre']) && !empty($versionInfo['pre'])) {
$sqlToInstall = $installPath.$versionInfo['pre'];
$this->fillQueryList($sqlToInstall, $output, 'pre');
//Processing sql query list depending of the section
$result = $this->processQueryList($output, $toVersion, $dryRun, 'pre');
}
//Filling sqlList array with "post" db changes
if (isset($versionInfo['post']) && !empty($versionInfo['post'])) {
$sqlToInstall = $installPath.$versionInfo['post'];
$this->fillQueryList($sqlToInstall, $output, 'post');
//Processing sql query list depending of the section
$result = $this->processQueryList($output, $toVersion, $dryRun, 'post');
}
//Processing "db" changes
if (isset($versionInfo['update_db']) && !empty($versionInfo['update_db'])) {
$sqlToInstall = $installPath.$versionInfo['update_db'];
if (is_file($sqlToInstall) && file_exists($sqlToInstall)) {
$output->writeln("<comment>Executing update db: <info>'$sqlToInstall'</info>");
require $sqlToInstall;
$update($_configuration, $mainConnection, $dryRun, $output, $app);
}
}
//Processing "update file" changes
if (isset($versionInfo['update_files']) && !empty($versionInfo['update_files'])) {
$sqlToInstall = $installPath.$versionInfo['update_files'];
if (is_file($sqlToInstall) && file_exists($sqlToInstall)) {
$output->writeln("<comment>Executing update files: <info>'$sqlToInstall'</info>");
require $sqlToInstall;
}
}
$output->writeln('');
$output->writeln("<comment>You have to select yes for the 'Chamilo Migrations'<comment>");
if ($result) {
$command = $this->getApplication()->find('migrations:migrate');
$arguments = array(
'command' => 'migrations:migrate',
'version' => $versionInfo['hook_to_doctrine_version'],
'--configuration' => $this->getMigrationConfigurationFile()
);
$output->writeln("<comment>Executing migrations:migrate ".$versionInfo['hook_to_doctrine_version']." --configuration=".$this->getMigrationConfigurationFile()."<comment>");
$input = new ArrayInput($arguments);
$command->run($input, $output);
$output->writeln("<comment>Migration ended succesfully</comment>");
}
return false;
}
public function getMigrationTypes() {
return array(
'pre',
'post'
);
}
/**
*
* Process the queryList array and executes queries to the correct section (main, user, course, etc)
*
* @param $output
* @param $version
* @param $dryRun
* @return bool
* @throws \Exception
*/
public function processQueryList($output, $version, $dryRun, $type)
{
$databases = $this->getDatabaseList($version, $type);
foreach ($databases as $section => &$dbList) {
foreach ($dbList as &$dbInfo) {
$output->writeln("");
$output->writeln("<comment>Loading section:</comment><info> $section</info> <comment>with database </comment><info>".$dbInfo['database']."</info>");
$output->writeln("--------------------------");
if ($dbInfo['status'] == 'complete') {
$output->writeln("<comment>Database already updated</comment>");
continue;
}
if (isset($this->queryList[$type]) && isset($this->queryList[$type][$section]) && !empty($this->queryList[$type][$section])) {
$queryList = $this->queryList[$type][$section];
try {
$lines = 0;
$conn = $this->getHelper($dbInfo['database'])->getConnection();
$conn->beginTransaction();
foreach ($queryList as $query) {
if ($dryRun) {
$output->writeln($query);
} else {
$output->writeln(' <comment>-></comment> ' . $query);
$conn->executeQuery($query);
}
$lines++;
}
if (!$dryRun) {
$conn->commit();
$output->writeln(sprintf('%d statements executed!', $lines) . PHP_EOL);
$dbInfo['status'] = 'complete';
$this->saveDatabaseList($databases, $version, $type);
}
} catch (\Exception $e) {
$conn->rollback();
$output->write(sprintf('<error>Migration failed. Error %s</error>', $e->getMessage()));
throw $e;
}
} else {
$output->writeln(sprintf("Nothing to execute for section $section!"));
return false;
}
}
}
$this->queryList = array();
return true;
}
/**
* @param string $sqlFilePath
* @param $output
* @param string type
*/
public function fillQueryList($sqlFilePath, $output, $type)
{
if (is_file($sqlFilePath) && file_exists($sqlFilePath)) {
$output->writeln(sprintf("Processing file type:$type '<info>%s</info>'... ", $sqlFilePath));
$sections = $this->getSections();
foreach ($sections as $section) {
$sqlList = $this->getSQLContents($sqlFilePath, $section);
$this->setQueryList($sqlList, $section, $type);
}
} else {
$output->writeln(sprintf("File does not exists: '<info>%s</info>'... ", $sqlFilePath));
}
}
/**
* @param $queryList
* @param $section
*/
public function setQueryList($queryList, $section, $type)
{
if (!isset($this->queryList[$type][$section])) {
$this->queryList[$type][$section] = $queryList;
} else {
$this->queryList[$type][$section] = array_merge($this->queryList[$type][$section], $queryList);
}
}
/**
*
* @return array
*/
public function getSections()
{
return array(
'main',
'user',
'stats',
'scorm',
'course'
);
}
/**
* Generates database array info
*
* @return mixed
*/
public function generateDatabaseList()
{
$courseList = \CourseManager::get_real_course_list();
$courseDbList = array();
foreach ($courseList as $course) {
if (!empty($course['db_name'])) {
$courseDbList[] = array(
'database' => '_chamilo_course_'.$course['db_name'],
'status' => 'waiting'
);
}
}
if (empty($courseDbList)) {
$courseDbList = array(
array(
'database'=> 'main_database',
'status' => 'waiting'
)
);
}
$databaseSection = array(
'main' => array(
array(
'database' => 'main_database',
'status' => 'waiting'
)
),
'user' => array(
array(
'database' => 'user_personal_database',
'status' => 'waiting'
)
),
'stats' => array(
array(
'database' => 'statistics_database',
'status' => 'waiting'
)
),
// 'scorm' => array('main_database'),
'course'=> $courseDbList
);
$this->setDatabaseList($databaseSection);
return $this->databaseList;
}
public function setDatabaseList($list)
{
$this->databaseList = $list;
}
/**
* @param string $version
*
* @return mixed|void
*/
public function getDatabaseList($version, $type)
{
$configurationPath = $this->getHelper('configuration')->getConfigurationPath();
$newConfigurationFile = $configurationPath.'db_migration_status_'.$version.'_'.$type.'.yml';
if (file_exists($newConfigurationFile)) {
$yaml = new Parser();
return $yaml->parse(file_get_contents($newConfigurationFile));
} else {
return $this->generateDatabaseList();
}
}
/**
* @param string $databaseSection
* @param string $version
*
* @return bool
*/
public function saveDatabaseList($databaseSection, $version, $type)
{
$configurationPath = $this->getHelper('configuration')->getConfigurationPath();
$dumper = new Dumper();
$yaml = $dumper->dump($databaseSection, 2); //inline
$newConfigurationFile = $configurationPath.'db_migration_status_'.$version.'_'.$type.'.yml';
file_put_contents($newConfigurationFile, $yaml);
return file_exists($newConfigurationFile);
}
/**
*
* @param string $section
*
* @return mixed
*/
public function getDatabasesPerSection($section, $version, $type)
{
$databases = $this->getDatabaseList($version, $type);
if (isset($databases[$section])) {
return $databases[$section];
}
}
/**
* Function originally wrote in install.lib.php
*
* @param string $file
* @param string $section
* @param bool $printErrors
*
* @return array|bool
*/
public function getSQLContents($file, $section, $printErrors = true)
{
//check given parameters
if (empty($file)) {
$error = "Missing name of file to parse in get_sql_file_contents()";
if ($printErrors) {
echo $error;
}
return false;
}
if (!in_array($section, array('main', 'user', 'stats', 'scorm', 'course'))) {
$error = "Section '$section' is not authorized in getSQLContents()";
if ($printErrors) {
echo $error;
}
return false;
}
$filepath = $file;
if (!is_file($filepath) or !is_readable($filepath)) {
$error = "File $filepath not found or not readable in getSQLContents()";
if ($printErrors) {
echo $error;
}
return false;
}
//read the file in an array
// Empty lines should not be executed as SQL statements, because errors occur, see Task #2167.
$file_contents = file($filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!is_array($file_contents) or count($file_contents) < 1) {
$error = "File $filepath looks empty in getSQLContents()";
if ($printErrors) {
echo $error;
}
return false;
}
//prepare the resulting array
$section_contents = array();
$record = false;
foreach ($file_contents as $index => $line) {
if (substr($line, 0, 2) == '--') {
//This is a comment. Check if section name, otherwise ignore
$result = array();
if (preg_match('/^-- xx([A-Z]*)xx/', $line, $result)) { //we got a section name here
if ($result[1] == strtoupper($section)) {
//we have the section we are looking for, start recording
$record = true;
} else {
//we have another section's header. If we were recording, stop now and exit loop
if ($record) {
break;
}
$record = false;
}
}
} else {
if ($record) {
if (!empty($line)) {
$section_contents[] = $line;
}
}
}
}
//now we have our section's SQL statements group ready, return
return $section_contents;
}
/**
* Executed only before createCourseTables()
*/
public function dropCourseTables()
{
$list = \CourseManager::get_course_tables();
foreach ($list as $table) {
$sql = "DROP TABLE IF EXISTS ".DB_COURSE_PREFIX.$table;
\Database::query($sql);
}
}
/**
* Creates the course tables with the prefix c_
* @param $output
*/
public function createCourseTables($output)
{
$command = $this->getApplication()->find('dbal:import');
$sqlFolder = $this->getInstallationPath('1.9.0');
//Importing sql files
$arguments = array(
'command' => 'dbal:import',
'file' => $sqlFolder.'db_course.sql'
);
$input = new ArrayInput($arguments);
$command->run($input, $output);
}
}

@ -0,0 +1,48 @@
<?php
namespace ChamiloLMS\Component\Installer;
class Installer
{
public function __construct()
{
}
public function setSettingsAfterInstallation($adminInfo, $portalSettings)
{
// Updating admin user
$adminInfo['user_id'] = 1;
$adminInfo['auth_source'] = 'platform';
$adminInfo['password'] = api_get_encrypted_password($adminInfo['password']);
$result = \UserManager::update($adminInfo);
if ($result) {
\UserManager::add_user_as_admin($adminInfo['user_id']);
}
// Updating anonymous user
$anonymousUser['user_id'] = 2;
$anonymousUser['language'] = $adminInfo['language'];
\UserManager::update($anonymousUser);
// Updating portal settings
api_set_setting('emailAdministrator', $adminInfo['email']);
api_set_setting('administratorSurname', $adminInfo['lastname']);
api_set_setting('administratorName', $adminInfo['firstname']);
api_set_setting('platformLanguage', $adminInfo['language']);
api_set_setting('allow_registration', '1');
api_set_setting('allow_registration_as_teacher', '1');
api_set_setting('permissions_for_new_directories', $portalSettings['permissions_for_new_directories']);
api_set_setting('permissions_for_new_files', $portalSettings['permissions_for_new_files']);
api_set_setting('Institution', $portalSettings['institution']);
api_set_setting('InstitutionUrl', $portalSettings['institution_url']);
api_set_setting('siteName', $portalSettings['sitename']);
}
}

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit6849b8aa9cb29cb82589890fae069cb3::getLoader();
return ComposerAutoloaderInitfd161fa9ff8c1b9e2f079c9d0cf07852::getLoader();

@ -2,7 +2,7 @@
// autoload_real.php generated by Composer
class ComposerAutoloaderInit6849b8aa9cb29cb82589890fae069cb3
class ComposerAutoloaderInitfd161fa9ff8c1b9e2f079c9d0cf07852
{
private static $loader;
@ -19,9 +19,9 @@ class ComposerAutoloaderInit6849b8aa9cb29cb82589890fae069cb3
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit6849b8aa9cb29cb82589890fae069cb3', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInitfd161fa9ff8c1b9e2f079c9d0cf07852', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit6849b8aa9cb29cb82589890fae069cb3', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInitfd161fa9ff8c1b9e2f079c9d0cf07852', 'loadClassLoader'));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

@ -515,37 +515,6 @@
"description": "Symfony Console Component",
"homepage": "http://symfony.com"
},
{
"name": "chamilo/chash",
"version": "dev-master",
"version_normalized": "9999999-dev",
"source": {
"type": "git",
"url": "https://github.com/chamilo/chash.git",
"reference": "0720bc4ab428494465ac6bab6532cb167704183f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chamilo/chash/zipball/0720bc4ab428494465ac6bab6532cb167704183f",
"reference": "0720bc4ab428494465ac6bab6532cb167704183f",
"shasum": ""
},
"require": {
"php": ">=5.3.2",
"symfony/console": ">=2.3,<3.0",
"symfony/yaml": ">=2.3,<3.0"
},
"time": "2013-06-14 09:54:38",
"type": "library",
"installation-source": "source",
"autoload": {
"psr-0": {
"Chash": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"homepage": "http://www.chamilo.org"
},
{
"name": "symfony/property-access",
"version": "2.3.x-dev",
@ -3722,5 +3691,39 @@
"annotations",
"controllers"
]
},
{
"name": "chamilo/chash",
"version": "dev-master",
"version_normalized": "9999999-dev",
"source": {
"type": "git",
"url": "https://github.com/chamilo/chash.git",
"reference": "8bce386a29778b6b02e3f5eda5d561f529db61ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chamilo/chash/zipball/8bce386a29778b6b02e3f5eda5d561f529db61ed",
"reference": "8bce386a29778b6b02e3f5eda5d561f529db61ed",
"shasum": ""
},
"require": {
"doctrine/dbal": "~2.3",
"doctrine/migrations": "dev-master",
"doctrine/orm": "~2.3",
"php": ">=5.3.2",
"symfony/console": "~2.3",
"symfony/yaml": "~2.3"
},
"time": "2013-07-08 13:07:27",
"type": "library",
"installation-source": "source",
"autoload": {
"psr-0": {
"Chash": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"homepage": "http://www.chamilo.org"
}
]

Loading…
Cancel
Save