Add vchamilo fixes see BT#11051

pull/2487/head
jmontoyaa 10 years ago
parent db1216b43c
commit 83548e3844
  1. 10
      plugin/vchamilo/README.md
  2. 2
      plugin/vchamilo/lang/english.php
  3. 80
      plugin/vchamilo/lib.php
  4. 41
      plugin/vchamilo/views/manage.controller.php

@ -1,7 +1,7 @@
Virtual Chamilo
===================
Author : Valery Fremaux (valery.fremaux@gmail.com), Julio Montoya
Authors : Valery Fremaux (valery.fremaux@gmail.com), Julio Montoya
Virtual chamilo is a feature that allows running several chamilo instances sharing the same
code base.
@ -20,20 +20,20 @@ You need :
1. Install the vchamilo package into the <chamiloroot>/plugin directory
2. Install the plugin in chamilo administration
3. Insert the virtualisation hook into the chamilo master configuration :
3. Insert the virtualisation hook into the chamilo master configuration file:
```
file : <chamiloroot>/app/config/configuration.php
<chamiloroot>/app/config/configuration.php
```
Insert the hook:
Insert the hook at the end of the file.
```
include_once $_configuration['root_sys'].'plugin/vchamilo/lib.php';
vchamilo_hook_configuration($_configuration);
```
What you need for a virtual node is :
What you need for a virtual node is:
-------------
- a blank database copy of chamilo

@ -62,7 +62,7 @@ $strings['sitename'] = 'Site Name';
$strings['snapshotinstance'] = 'Snapshot';
$strings['snapshotmaster'] = 'Snapshot master Chamilo';
$strings['statisticsdatabase'] = 'Statistics database';
$strings['successfinishedcapture'] = 'Capture of chamilo is finished';
$strings['successfinishedcapture'] = 'Snapshot of chamilo is finished';
$strings['sync_settings'] = 'Synchronize settings';
$strings['tableprefix'] = 'Table prefix';
$strings['template'] = 'Template';

@ -20,7 +20,6 @@ function vchamilo_hook_configuration(&$_configuration)
$virtualChamiloWebRoot = $_configuration['vchamilo_web_root'].'/';
$virtualChamilo = [];
if ($_configuration['root_web'] == $virtualChamiloWebRoot) {
return;
@ -35,39 +34,41 @@ function vchamilo_hook_configuration(&$_configuration)
$query = "SELECT * FROM $table WHERE root_web = '$virtualChamiloWebRoot'";
$result = $connection->executeQuery($query);
$excludes = array('id', 'name');
$query = "SELECT * FROM settings_current WHERE subkey = 'vchamilo'";
$virtualSettings = $connection->executeQuery($query);
$virtualSettings = $virtualSettings->fetchAll();
$homePath = '';
$coursePath = '';
$archivePath = '';
foreach ($virtualSettings as $setting) {
switch ($setting['variable']) {
case 'vchamilo_home_real_root':
$homePath = $setting['selected_value'];
break;
case 'vchamilo_course_real_root':
$coursePath = $setting['selected_value'];
break;
case 'vchamilo_archive_real_root':
$archivePath = $setting['selected_value'];
break;
if ($result->rowCount()) {
$data = $result->fetch();
$excludes = array('id', 'name');
$query = "SELECT * FROM settings_current WHERE subkey = 'vchamilo'";
$virtualSettings = $connection->executeQuery($query);
$virtualSettings = $virtualSettings->fetchAll();
$homePath = '';
$coursePath = '';
$archivePath = '';
foreach ($virtualSettings as $setting) {
switch ($setting['variable']) {
case 'vchamilo_home_real_root':
$homePath = $setting['selected_value'];
break;
case 'vchamilo_course_real_root':
$coursePath = $setting['selected_value'];
break;
case 'vchamilo_archive_real_root':
$archivePath = $setting['selected_value'];
break;
}
}
}
if (empty($homePath) || empty($coursePath) || empty($archivePath)) {
echo 'Configure correctly the vchamilo plugin';
exit;
}
if (empty($homePath) || empty($coursePath) || empty($archivePath)) {
echo 'Configure correctly the vchamilo plugin';
exit;
}
if ($result->rowCount()) {
$data = $result->fetch();
// Only load if is visible
if ($data['visible']) {
if ($data && $data['visible'] === '1') {
foreach ($data as $key => $value) {
if (!in_array($key, $excludes)) {
$_configuration[$key] = $value;
@ -80,6 +81,8 @@ function vchamilo_hook_configuration(&$_configuration)
$data['SYS_COURSE_PATH'] = $coursePath.'/'.$data['slug'];
$virtualChamilo = $data;
} else {
exit("This portal is disabled. Please contact your administrator");
}
} else {
// Platform was not configured yet
@ -1133,6 +1136,23 @@ function vchamilo_check_settings()
if (empty($coursePath) || empty($homePath) || empty($archivePath) || empty($cmdSql)|| empty($cmdMySql)) {
api_not_allowed(true, 'You have to complete all plugin settings.');
}
$separator = DIRECTORY_SEPARATOR;
$templatePath = api_get_path(SYS_PATH).'plugin'.$separator.'vchamilo'.$separator.'templates';
$paths = [
$coursePath,
$homePath,
$archivePath,
$templatePath
];
foreach ($paths as $path) {
if (!is_writable($path)) {
Display::addFlash(
Display::return_message('Directory must have writable permissions: '.$path, 'warning')
);
}
}
}
/**

@ -80,7 +80,7 @@ if ($action == 'fulldeleteinstances') {
Display::addFlash(Display::return_message("Deleting $archivedir"));
removeDir($archivedir);
}
$sql = "DELETE FROM {$table} WHERE id = ".$instance['id'];
Database::query($sql);
@ -111,23 +111,28 @@ if ($action == 'snapshotinstance') {
// Make template directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
$backupDir = $_configuration['root_sys'].'plugin'.$separator.'vchamilo'.$separator.'templates'.$separator.$vhost->slug.$separator;
$backupDir = api_get_path(SYS_PATH).'plugin'.$separator.'vchamilo'.$separator.'templates'.$separator.$vhost->slug.$separator;
$absolute_datadir = $backupDir.'data';
$absolute_sqldir = $backupDir.'dump.sql';
if (!is_dir($backupDir)) {
Display::addFlash(
Display::return_message('Directory created: '.$backupDir)
);
mkdir($backupDir, 0777, true);
$result = mkdir($backupDir, 0777, true);
if ($result) {
Display::addFlash(
Display::return_message('Directory created: '.$backupDir)
);
} else {
Display::addFlash(
Display::return_message("Cannot create directory: $backupDir check the folder permissions", 'error')
);
}
}
if ($vchamilostep == 0) {
// Create directories, if necessary.
if (!is_dir($absolute_datadir)) {
mkdir($absolute_datadir, 0777, true);
//mkdir($absolute_datadir.'/archive', 0777, true);
mkdir($absolute_datadir.'/home', 0777, true);
}
@ -147,7 +152,7 @@ if ($action == 'snapshotinstance') {
$tpl->assign('content', $content);
$tpl->display_one_col_template();
die;
exit;
} else {
// continue next step
$vchamilostep = 1;
@ -218,26 +223,28 @@ if ($action == 'snapshotinstance') {
Display::addFlash(Display::return_message("Copying from '$coursePath' to '$absolute_datadir/courses' "));
copyDirTo($coursePath, $absolute_datadir.'/courses/', false);
/*Display::addFlash(Display::return_message("Copying from $archivePath to {$absolute_datadir}/archive "));
copyDirTo($varchivepath, $absolute_datadir.'/archive', false);*/
// Store original hostname and some config info for further database or filestore replacements.
$FILE = fopen($backupDir.$separator.'manifest.php', 'w');
fwrite($FILE, '<'.'?php ');
fwrite($FILE, "\$templatewwwroot = '".$wwwroot."';\n");
//fwrite($FILE, "\$templatevdbprefix = '".$vhost->table_prefix."';\n ");
//fwrite($FILE, "\$coursefolder = '".$vhost->course_folder."';\n ");
fwrite($FILE, '?'.'>');
fclose($FILE);
// Every step was SUCCESS.
if (empty($fullautomation)) {
Display::addFlash(Display::return_message($plugininstance->get_lang('successfinishedcapture'), 'success'));
Display::addFlash(
Display::return_message($plugininstance->get_lang('successfinishedcapture'),
'success'
)
);
if (empty($vid)) {
$template = vchamilo_get_config('vchamilo', 'default_template');
if (empty($template)) {
Display::addFlash(Display::return_message('Set default template as <b>'.$vhost->slug.'</b>', 'success', false));
Display::addFlash(
Display::return_message('Set default template as <b>'.$vhost->slug.'</b>', 'success', false)
);
$params = [
'subkey' => 'vchamilo',
'title' => 'default_template',
@ -249,7 +256,9 @@ if ($action == 'snapshotinstance') {
];
api_set_setting_simple($params);
} else {
Display::addFlash(Display::return_message('Default template is: <b>'.$vhost->slug.'</b>', 'success', false));
Display::addFlash(
Display::return_message('Default template is: <b>'.$vhost->slug.'</b>', 'success', false)
);
}
}
@ -264,7 +273,7 @@ if ($action == 'snapshotinstance') {
$tpl->assign('content', $content);
$tpl->display_one_col_template();
die;
exit;
}
}
}

Loading…
Cancel
Save