WIP vchamilo updates

pull/2487/head
jmontoyaa 10 years ago
parent d17a0c3aca
commit b3ba063058
  1. 2
      plugin/vchamilo/README.md
  2. 5
      plugin/vchamilo/ajax/service.php
  3. 8
      plugin/vchamilo/cli/bulkcreatenodes.php
  4. 4
      plugin/vchamilo/cli/bulkdestroynodes.php
  5. 7
      plugin/vchamilo/index.php
  6. 3
      plugin/vchamilo/lang/english.php
  7. 1190
      plugin/vchamilo/lib.php
  8. 39
      plugin/vchamilo/lib/VChamiloPlugin.php
  9. 1025
      plugin/vchamilo/lib/Virtual.php
  10. 60
      plugin/vchamilo/lib/vchamilo_plugin.class.php
  11. BIN
      plugin/vchamilo/pix/broken.gif
  12. BIN
      plugin/vchamilo/pix/disabled.gif
  13. BIN
      plugin/vchamilo/pix/enabled.gif
  14. BIN
      plugin/vchamilo/pix/snapshot.gif
  15. 68
      plugin/vchamilo/plugin.php
  16. 1
      plugin/vchamilo/vcron.php
  17. 189
      plugin/vchamilo/views/editinstance.controller.php
  18. 40
      plugin/vchamilo/views/editinstance.php
  19. 6
      plugin/vchamilo/views/editinstance_form.php
  20. 97
      plugin/vchamilo/views/import.php
  21. 595
      plugin/vchamilo/views/manage.controller.php
  22. 94
      plugin/vchamilo/views/manage.php
  23. 10
      plugin/vchamilo/views/manage.testcnx.php
  24. 18
      plugin/vchamilo/views/manage.testdatapath.php
  25. 1
      plugin/vchamilo/views/syncparams.controller.php
  26. 27
      plugin/vchamilo/views/syncparams.php

@ -29,7 +29,7 @@ You need :
Insert the hook at the end of the file.
```
include_once $_configuration['root_sys'].'plugin/vchamilo/lib.php';
include_once $_configuration['root_sys'].'plugin/vchamilo/lib/Virtual.php';
vchamilo_hook_configuration($_configuration);
```

@ -1,17 +1,16 @@
<?php
require_once '../../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
$action = isset($_GET['what']) ? $_GET['what'] : '';
define('CHAMILO_INTERNAL', true);
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
$thisurl = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php';
api_protect_admin_script();
if ($action == 'syncthis') {
if ($action === 'syncthis') {
$res = include_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/syncparams.controller.php';
if (!$res) {
echo '<span class="label label-success">Success</span>';

@ -93,14 +93,14 @@ global $DB;
if ($options['verbose']) echo "building database manager\n";
$DB = new DatabaseManager();
if ($options['verbose']) echo "building plugin vchamilo\n";
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
if (empty($options['nodes'])) {
cli_error('Missing node definition. Halt.');
}
if ($options['verbose']) echo "parsing nodelist\n";
$nodes = vchamilo_parse_csv_nodelist($options['nodes'], $plugininstance);
$nodes = vchamilo_parse_csv_nodelist($options['nodes'], $plugin);
if ($options['lint']) {
ctrace("Lint mode:\n");
@ -134,7 +134,7 @@ foreach($nodes as $data) {
ctrace('Node exists. skipping');
continue;
}
$data->what = 'addinstance';
$data->registeronly = false;
@ -205,7 +205,7 @@ foreach($nodes as $data) {
} else {
ctrace('No Side CNX for setup');
}
if ($interactive) {
$input = readline("Continue (y/n|r) ?\n");
if ($input == 'r' || $input == 'R'){

@ -104,14 +104,14 @@ global $DB;
if ($options['verbose']) echo "building database manager\n";
$DB = new DatabaseManager();
if ($options['verbose']) echo "building plugin vchamilo\n";
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
if (empty($options['nodes'])) {
cli_error(get_string('climissingnodes', 'block_vmoodle'));
}
if ($options['verbose']) echo "parsing nodelist\n";
$nodes = vchamilo_parse_csv_nodelist($options['nodes'], $plugininstance);
$nodes = vchamilo_parse_csv_nodelist($options['nodes'], $plugin);
if ($options['lint']) {
ctrace("Lint mode:\n");

@ -3,19 +3,16 @@
* @package chamilo.plugin.vchamilo
*/
require_once api_get_path(LIBRARY_PATH) . 'plugin.class.php';
require_once dirname(__FILE__).'/lib/vchamilo_plugin.class.php';
api_protect_admin_script();
global $virtualChamilo;
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
// See also the share_user_info plugin
$_template['show_message'] = true;
$_template['title'] = $plugininstance->get_lang('hostlist');
$_template['title'] = $plugin->get_lang('hostlist');
$tablename = Database::get_main_table('vchamilo');
$sql = "SELECT sitename, root_web FROM $tablename WHERE visible = 1";

@ -106,5 +106,6 @@ $strings['InstitutionExample'] = 'Example: Chamilo Association';
$strings['RootWebExample'] = 'Example: http://www.chamilo.org/';
$strings['DatabaseDescription'] = 'A new database will be created with that name.';
$strings['RootWebExists'] = 'An instance with the same root web exists.';
$strings['ImportInstance'] = 'Import instance';
$strings['ConfigurationPath'] = 'Chamilo configuration path';

File diff suppressed because it is too large Load Diff

@ -0,0 +1,39 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Description of VChamilo
*
* @copyright (c) 2014 VF Consulting
* @license GNU General Public License - http://www.gnu.org/copyleft/gpl.html
* @author Valery Fremaux <valery.fremaux@gmail.com>
* @author Julio Montoya
*/
class VChamiloPlugin extends Plugin
{
/**
* VChamiloPlugin constructor.
*/
public function __construct()
{
parent::__construct('1.2', 'Valery Fremaux, Julio Montoya');
}
/**
*
* @return VChamiloPlugin
*/
public static function create()
{
static $result = null;
return $result ? $result : $result = new self();
}
/**
* @return string
*/
public function get_name()
{
return 'vchamilo';
}
}

File diff suppressed because it is too large Load Diff

@ -1,60 +0,0 @@
<?php
/**
* Description of VChamilo
*
* @copyright (c) 2014 VF Consulting
* @license GNU General Public License - http://www.gnu.org/copyleft/gpl.html
* @author Valery Fremaux <valery.fremaux@gmail.com>
* @author Julio Montoya
*/
class VChamiloPlugin extends Plugin
{
/**
* VChamiloPlugin constructor.
*/
public function __construct()
{
parent::__construct('1.2', 'Valery Fremaux, Julio Montoya');
}
/**
*
* @return VChamiloPlugin
*/
public static function create()
{
static $result = null;
return $result ? $result : $result = new self();
}
/**
* @return string
*/
public function get_name()
{
return 'vchamilo';
}
/**
* @param $pixname
* @param int $size
* @return string
*/
public function pix_url($pixname, $size = 16)
{
global $_configuration;
if (file_exists($_configuration['root_sys'].'/plugin/vchamilo/pix/'.$pixname.'.png')){
return $_configuration['root_web'].'/plugin/vchamilo/pix/'.$pixname.'.png';
}
if (file_exists($_configuration['root_sys'].'/plugin/vchamilo/pix/'.$pixname.'.jpg')){
return $_configuration['root_web'].'/plugin/vchamilo/pix/'.$pixname.'.jpg';
}
if (file_exists($_configuration['root_sys'].'/plugin/vchamilo/pix/'.$pixname.'.gif')){
return $_configuration['root_web'].'/plugin/vchamilo/pix/'.$pixname.'.gif';
}
return $_configuration['root_web'].'/main/img/icons/'.$size.'/'.$pixname.'.png';
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 B

@ -6,10 +6,6 @@
* @author Julio Montoya <gugli100@gmail.com>
*/
require_once api_get_path(LIBRARY_PATH).'plugin.class.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
global $_configuration;
/**
@ -27,7 +23,6 @@ $plugin_info['version'] = '1.0';
//the plugin author
$plugin_info['author'] = 'Valery Fremaux, Julio Montoya';
/* Plugin optional settings */
/*
@ -37,20 +32,20 @@ $plugin_info['author'] = 'Valery Fremaux, Julio Montoya';
$form = new FormValidator('vchamilo_form');
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
$form_settings = array(
'enable_virtualisation' => vchamilo_get_config('vchamilo', 'enable_virtualisation', true),
'httpproxyhost' => vchamilo_get_config('vchamilo', 'httpproxyhost', true),
'httpproxyport' => vchamilo_get_config('vchamilo', 'httpproxyport', true),
'httpproxybypass' => vchamilo_get_config('vchamilo', 'httpproxybypass', true),
'httpproxyuser' => vchamilo_get_config('vchamilo', 'httpproxyuser', true),
'httpproxypassword' => vchamilo_get_config('vchamilo', 'httpproxypassword', true),
'cmd_mysql' => vchamilo_get_config('vchamilo', 'cmd_mysql', true),
'cmd_mysqldump' => vchamilo_get_config('vchamilo', 'cmd_mysqldump', true),
'course_real_root' => vchamilo_get_config('vchamilo', 'course_real_root', true),
'archive_real_root' => vchamilo_get_config('vchamilo', 'archive_real_root', true),
'home_real_root' => vchamilo_get_config('vchamilo', 'home_real_root', true),
'enable_virtualisation' => Virtual::getConfig('vchamilo', 'enable_virtualisation', true),
'httpproxyhost' => Virtual::getConfig('vchamilo', 'httpproxyhost', true),
'httpproxyport' => Virtual::getConfig('vchamilo', 'httpproxyport', true),
'httpproxybypass' => Virtual::getConfig('vchamilo', 'httpproxybypass', true),
'httpproxyuser' => Virtual::getConfig('vchamilo', 'httpproxyuser', true),
'httpproxypassword' => Virtual::getConfig('vchamilo', 'httpproxypassword', true),
'cmd_mysql' => Virtual::getConfig('vchamilo', 'cmd_mysql', true),
'cmd_mysqldump' => Virtual::getConfig('vchamilo', 'cmd_mysqldump', true),
'course_real_root' => Virtual::getConfig('vchamilo', 'course_real_root', true),
'archive_real_root' => Virtual::getConfig('vchamilo', 'archive_real_root', true),
'home_real_root' => Virtual::getConfig('vchamilo', 'home_real_root', true),
);
$form->setDefaults($form_settings);
@ -58,37 +53,40 @@ $form->setDefaults($form_settings);
$wwwroot = $_configuration['root_web'];
//A simple select
$options = array(0 => $plugininstance->get_lang('no'), 1 => $plugininstance->get_lang('yes'));
$form->addLabel('', '<a class="btn btn-primary" href="'.api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php">'.
$plugininstance->get_lang('manage_instances').'</a>');
$form->addElement('header', $plugininstance->get_lang('enabling'));
$form->addElement('select', 'enable_virtualisation', $plugininstance->get_lang('enable_virtualisation'), $options);
$options = array(0 => $plugin->get_lang('no'), 1 => $plugin->get_lang('yes'));
$form->addLabel(
'',
'<a class="btn btn-primary" href="'.api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php">'.
$plugin->get_lang('manage_instances').'</a>'
);
$form->addElement('header', $plugin->get_lang('enabling'));
$form->addElement('select', 'enable_virtualisation', $plugin->get_lang('enable_virtualisation'), $options);
$form->addElement(
'text',
'course_real_root',
[$plugininstance->get_lang('courserealroot'), 'Example: '.api_get_path(SYS_PATH).'var/courses/']
[$plugin->get_lang('courserealroot'), 'Example: '.api_get_path(SYS_PATH).'var/courses/']
);
$form->addElement(
'text',
'archive_real_root',
[$plugininstance->get_lang('archiverealroot'), 'Example: '.api_get_path(SYS_PATH).'var/archive/']
[$plugin->get_lang('archiverealroot'), 'Example: '.api_get_path(SYS_PATH).'var/archive/']
);
$form->addElement(
'text',
'home_real_root',
[$plugininstance->get_lang('homerealroot'), 'Example: '.api_get_path(SYS_PATH).'var/home/']
[$plugin->get_lang('homerealroot'), 'Example: '.api_get_path(SYS_PATH).'var/home/']
);
$form->addElement('header', $plugininstance->get_lang('mysqlcmds'));
$form->addElement('text', 'cmd_mysql', [$plugininstance->get_lang('mysqlcmd'), 'Example: /usr/bin/mysql']);
$form->addElement('text', 'cmd_mysqldump', [$plugininstance->get_lang('mysqldumpcmd'), 'Example: /usr/bin/mysqldump']);
$form->addElement('header', $plugininstance->get_lang('proxysettings'));
$form->addElement('text', 'httpproxyhost', $plugininstance->get_lang('httpproxyhost'));
$form->addElement('text', 'httpproxyport', $plugininstance->get_lang('httpproxyport'));
$form->addElement('text', 'httpproxybypass', $plugininstance->get_lang('httpproxybypass'));
$form->addElement('text', 'httpproxyuser', $plugininstance->get_lang('httpproxyuser'));
$form->addElement('text', 'httpproxypassword', $plugininstance->get_lang('httpproxypassword'));
$form->addButtonSave($plugininstance->get_lang('Save'));
$form->addElement('header', $plugin->get_lang('mysqlcmds'));
$form->addElement('text', 'cmd_mysql', [$plugin->get_lang('mysqlcmd'), 'Example: /usr/bin/mysql']);
$form->addElement('text', 'cmd_mysqldump', [$plugin->get_lang('mysqldumpcmd'), 'Example: /usr/bin/mysqldump']);
$form->addElement('header', $plugin->get_lang('proxysettings'));
$form->addElement('text', 'httpproxyhost', $plugin->get_lang('httpproxyhost'));
$form->addElement('text', 'httpproxyport', $plugin->get_lang('httpproxyport'));
$form->addElement('text', 'httpproxybypass', $plugin->get_lang('httpproxybypass'));
$form->addElement('text', 'httpproxyuser', $plugin->get_lang('httpproxyuser'));
$form->addElement('text', 'httpproxypassword', $plugin->get_lang('httpproxypassword'));
$form->addButtonSave($plugin->get_lang('Save'));
$plugin_info['settings_form'] = $form;

@ -20,7 +20,6 @@
*/
define('CLI_SCRIPT', true); // for chamilo imported code
require_once dirname(dirname(dirname(__FILE__))).'/main/inc/global.inc.php';
require_once dirname(dirname(dirname(__FILE__))).'/local/classes/database.class.php';
global $DB;
$DB = new DatabaseManager();

@ -1,189 +0,0 @@
<?php
require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
api_protect_admin_script();
if (!defined('CHAMILO_INTERNAL')) die('You cannot use this script this way');
if ($data->what == 'addinstance' || $data->what == 'registerinstance') {
unset($data->what);
unset($data->submitbutton);
unset($data->id);
unset($data->vid);
unset($data->testconnection);
unset($data->testdatapath);
$registeronly = $data->registeronly;
unset($data->registeronly);
$data->lastcron = 0;
$data->lastcrongap = 0;
$data->croncount = 0;
if (!empty($data->template)) {
$template = $data->template;
} else {
$template = '';
}
$mainDatabase = api_get_configuration_value('main_database');
if ($mainDatabase == $data->main_database) {
Display::addFlash(
Display::return_message('You cannot use the same database as the chamilo master', 'error')
);
return ;
}
ctrace("Registering: ".$data->root_web);
$tablename = Database::get_main_table('vchamilo');
$sql = "SELECT * FROM $tablename
WHERE root_web = '".Database::escape_string($data->root_web)."'";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$sql = "SELECT * FROM $tablename
WHERE root_web = '".Database::escape_string($data->root_web)."'";
Database::update($tablename, $data, ['root_web = ?' => $data->root_web]);
$virtualInfo = Database::fetch_array($result);
$slug = $virtualInfo['slug'];
} else {
$slug = $data->slug = vchamilo_get_slug_from_url($data->root_web);
Database::insert($tablename, (array) $data);
}
if ($registeronly) {
// Stop it now.
ctrace("Registering only. out.");
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
}
// or we continue with physical creation
// Create course directory for operations.
// this is very important here (DO NOT USE api_get_path() !!) because storage may be remotely located
$absalternatecourse = vchamilo_get_config('vchamilo', 'course_real_root');
$coursedir = $absalternatecourse.'/'.$slug;
if (!is_dir($coursedir)) {
ctrace("Creating physical course dir in $coursedir");
mkdir($coursedir, 0777, true);
// initiate default index
$indexFile = $coursedir.'/index.html';
if ($indexFile) {
file_put_contents($indexFile, vchamilo_get_default_course_index_fragment());
}
$htaccessFile = $coursedir.'/.htaccess';
if ($htaccessFile) {
file_put_contents($htaccessFile, vchamilo_get_htaccess_fragment($slug));
}
}
$absalternatehome = vchamilo_get_config('vchamilo', 'home_real_root');
// absalternatehome is a vchamilo config setting that tells where the
// real physical storage for home pages are.
$homedir = $absalternatehome.'/'.$slug;
ctrace("Making home dir as $homedir");
if (!is_dir($homedir)) {
if (!mkdir($homedir, 0777, true)) {
ctrace("Error creating home dir $homedir \n");
}
}
// if real homedir IS NOT under chamilo install, link to it
// Seems not be necessary as we can globally link the whole Home container
/*
$standardlocation = $_configuration['root_sys'].'home/'.$home_folder; // where it should be
if ($homedir != $standardlocation){
ctrace("Linking virtual home dir ");
if (!symlink($homedir, $standardlocation)){
ctrace("could not link $standardlocation => $homedir ");
}
}
*/
// create archive
$absalternatearchive = vchamilo_get_config('vchamilo', 'archive_real_root');
$archivedir = $absalternatearchive.'/'.$slug;
ctrace("Making archive dir as $archivedir ");
if (!is_dir($archivedir)) {
if (!mkdir($archivedir, 0777, true)) {
ctrace("Error creating archive dir $archivedir\n");
}
}
// if real archivedir IS NOT under chamilo install, link to it
// Seems not be necessary as we can globally link the whole Home container
/*
$standardlocation = $_configuration['root_sys'].'archive/'.$archive_folder; // where it should be
if ($archivedir != $standardlocation){
ctrace("Linking virtual archive dir ");
if (!symlink($archivedir, $standardlocation)){
ctrace("could not link $standardlocation => $archivedir ");
}
}
*/
if (!$template) {
// Create empty database for install
ctrace("Creating database");
vchamilo_create_databases($data);
} else {
// Deploy template database
ctrace("Creating databases from template '$template'");
vchamilo_create_databases($data);
ctrace("Loading data template '$template'");
vchamilo_load_db_template($data, $template);
ctrace("Coying files from template '$template'");
vchamilo_load_files_from_template($data, $template);
}
// pluging in site name institution
$settingstable = $data->main_database.'.settings_current';
$accessurltable = $data->main_database.'.access_url';
$sitename = Database::escape_string($data->sitename);
$institution = Database::escape_string($data->institution);
$sqls[] = "UPDATE {$settingstable} SET selected_value = '{$sitename}'
WHERE variable = 'siteName' AND category = 'Platform' ";
$sqls[] = "UPDATE {$settingstable} SET selected_value = '{$institution}'
WHERE variable = 'institution' AND category = 'Platform' ";
$sqls[] = "UPDATE {$accessurltable} SET url = '{$data->root_web}' WHERE id = '1' ";
foreach ($sqls as $sql) {
Database::query($sql);
}
ctrace("Finished");
echo '<a class="btn btn-primary" href="'.api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php'.'">Continue</a>';
// vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
die;
}
if ($data->what == 'updateinstance') {
unset($data->what);
unset($data->submitbutton);
unset($data->registeronly);
unset($data->template);
$data->lastcron = 0;
$data->lastcrongap = 0;
$data->croncount = 0;
$id = $data->vid;
unset($data->vid);
unset($data->testconnection);
unset($data->testdatapath);
unset($data->vid);
Database::update('vchamilo', (array) $data, array('id = ?' => $id), true);
Display::addFlash(Display::return_message(get_lang('Updated')));
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
}

@ -3,11 +3,9 @@
$cidReset = true;
define('CHAMILO_INTERNAL', true);
global $plugininstance;
global $plugin;
require_once '../../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/editinstance_form.php';
api_protect_admin_script();
@ -18,11 +16,11 @@ $htmlHeadXtra[] = '<script src="'.api_get_path(WEB_PLUGIN_PATH).'vchamilo/js/hos
$id = isset($_REQUEST['vid']) ? $_REQUEST['vid'] : '';
$action = isset($_REQUEST['what']) ? $_REQUEST['what'] : '';
$registeronly = isset($_REQUEST['registeronly']) ? $_REQUEST['registeronly'] : 0;
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
$thisurl = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php';
$coursePath = vchamilo_get_config('vchamilo', 'course_real_root');
$homePath = vchamilo_get_config('vchamilo', 'home_real_root');
$coursePath = Virtual::getConfig('vchamilo', 'course_real_root');
$homePath = Virtual::getConfig('vchamilo', 'home_real_root');
if ($id) {
$mode = 'update';
@ -37,10 +35,36 @@ if ($id) {
$vhost = Database::fetch_array($result, 'ASSOC');
}
$form = new InstanceForm($plugininstance, $mode, $vhost);
$form = new InstanceForm($plugin, $mode, $vhost);
if ($data = $form->get_data()) {
include api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/editinstance.controller.php';
switch ($data->what) {
case 'addinstance':
case 'registerinstance':
Virtual::addInstance($data);
echo '<a class="btn btn-primary" href="'.api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php'.'">Continue</a>';
// vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
die;
break;
case 'updateinstance':
unset($data->what);
unset($data->submitbutton);
unset($data->registeronly);
unset($data->template);
$data->lastcron = 0;
$data->lastcrongap = 0;
$data->croncount = 0;
$id = $data->vid;
unset($data->vid);
unset($data->testconnection);
unset($data->testdatapath);
unset($data->vid);
Database::update('vchamilo', (array) $data, array('id = ?' => $id), true);
Display::addFlash(Display::return_message(get_lang('Updated')));
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
break;
}
}
if ($id) {

@ -411,7 +411,7 @@ class InstanceForm extends ChamiloForm
if ($this->is_in_add_mode()) {
$form->addElement('header', $this->_plugin->get_lang('templating'));
$templateoptions = vchamilo_get_available_templates();
$templateoptions = Virtual::getAvailableTemplates();
// Template choice
$form->addSelect(
@ -457,7 +457,7 @@ class InstanceForm extends ChamiloForm
*/
public function validation($data, $files = null)
{
global $plugininstance;
global $plugin;
$errors = array();
@ -470,7 +470,7 @@ class InstanceForm extends ChamiloForm
);
if ($vchamilo && isset($data['vid']) && $data['vid'] != $vchamilo['id']) {
$errors['root_web'] = $plugininstance->get_lang('RootWebExists');
$errors['root_web'] = $plugin->get_lang('RootWebExists');
}
if (!empty($errors)) {

@ -0,0 +1,97 @@
<?php
/* For licensing terms, see /license.txt */
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
// Security
api_protect_admin_script();
Virtual::checkSettings();
$plugin = VChamiloPlugin::create();
$form = new FormValidator('import', 'post', api_get_self());
// Database host.
$form->addText('db_host', $plugin->get_lang('dbhost'), array('id' => 'id_vdbhost'));
$form->applyFilter('db_host', 'trim');
// Database login.
$form->addText('db_user', $plugin->get_lang('dbuser'), array('id' => 'id_vdbuser'));
$form->applyFilter('db_user', 'trim');
// Database password.
$form->addElement(
'password',
'db_password',
$plugin->get_lang('dbpassword'),
array('id' => 'id_vdbpassword')
);
// Database name.
$form->addText('main_database', [$plugin->get_lang('maindatabase'), $plugin->get_lang('DatabaseDescription')]);
$form->addText(
'path',
[
$plugin->get_lang('ConfigurationPath'),
get_lang('Example').': /var/www/site/app/config/configuration.php'
],
true,
array('id' => 'id_vdbhost')
);
$form->addButtonSave($plugin->get_lang('savechanges'), 'submitbutton');
$content = $form->returnForm();
if ($form->validate()) {
$values = $form->getSubmitValues();
$file = $values['path'];
if (file_exists($file)) {
// @todo
$data = file_get_contents($file).' return $_configuration;';
$data = str_replace('$_configuration', '$configurationFile', $data);
$temp = api_get_path(SYS_ARCHIVE_PATH).''.uniqid('file_').'.php';
file_put_contents($temp, $data);
if (file_exists($temp)) {
$currentHost = api_get_configuration_value('db_host');
$currentDatabase = api_get_configuration_value('main_database');
$currentUser = api_get_configuration_value('db_user');
$currentPassword = api_get_configuration_value('db_password');
if ($values['main_database'] !== $currentDatabase &&
$values['db_user'] !== $currentUser &&
$values['db_password'] !== $currentPassword
) {
} else {
Display::addFlash(
Display::return_message(
$plugin->get_lang('DatabaseAccessShouldBeDifferentThanMasterChamilo')
)
);
}
$configuration = include $temp;
$vchamilo = new stdClass();
$vchamilo->main_database = $configuration['main_database'];
$vchamilo->db_user = $configuration['db_user'];
$vchamilo->db_password = $configuration['db_password'];
$vchamilo->db_host = $configuration['db_host'];
$vchamilo->import_to_main_database = $values['main_database'];
$vchamilo->import_to_db_user = $values['db_user'];
$vchamilo->import_to_db_password = $values['db_password'];
$vchamilo->import_to_db_host = $values['db_host'];
$vchamilo->import = true;
$plugin->addInstance($vchamilo);
}
}
}
$tpl = new Template(get_lang('VChamilo'), true, true, false, true, false);
$tpl->assign('content', $content);
$tpl->display_one_col_template();

@ -1,7 +1,5 @@
<?php
require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
$table = Database::get_main_table('vchamilo');
if (!defined('CHAMILO_INTERNAL')) {
@ -10,344 +8,345 @@ if (!defined('CHAMILO_INTERNAL')) {
$vidlist = isset($_REQUEST['vids']) ? implode("','", array_map('intval', $_REQUEST['vids'])) : '';
if ($action == 'newinstance' || $action == 'instance') {
$registeronly = $_REQUEST['registeronly'];
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/editinstance.php?registeronly='.$registeronly);
}
if ($action == 'editinstance' || $action == 'updateinstance') {
$vid = $_REQUEST['vid'];
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/editinstance.php?vid='.$vid);
}
if ($action == 'deleteinstances' || $action == 'disableinstances') {
if (!empty($vidlist)) {
Display::addFlash(Display::return_message("Disabling instance"));
// Make it not visible.
$sql = "UPDATE $table SET visible = 0 WHERE id IN ('$vidlist')";
Database::query($sql);
}
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
}
if ($action == 'enableinstances') {
if (!empty($vidlist)) {
Display::addFlash(Display::return_message("Enabling instance"));
$sql = "UPDATE $table SET visible = 1 WHERE id IN ('$vidlist') ";
Database::query($sql);
}
vchamilo_redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
}
if ($action == 'fulldeleteinstances') {
switch ($action) {
case 'import':
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/import.php');
break;
case 'newinstance':
case 'instance':
$registeronly = $_REQUEST['registeronly'];
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/editinstance.php?registeronly='.$registeronly);
break;
case 'editinstance':
case 'updateinstance':
$vid = $_REQUEST['vid'];
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/editinstance.php?vid='.$vid);
break;
case 'deleteinstances':
case 'disableinstances':
if (!empty($vidlist)) {
Display::addFlash(Display::return_message("Disabling instance"));
// Make it not visible.
$todelete = [];
// Removes everything.
if (empty($automation)) {
$sql = "UPDATE $table SET visible = 0 WHERE id IN ('$vidlist')";
Database::query($sql);
}
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
break;
case 'enableinstances':
if (!empty($vidlist)) {
$todelete = Database::select('*', 'vchamilo', array('where' => array("id IN ('$vidlist')" => array())));
Display::addFlash(Display::return_message("Enabling instance"));
$sql = "UPDATE $table SET visible = 1 WHERE id IN ('$vidlist') ";
Database::query($sql);
}
} else {
$todelete = Database::select(
'*',
'vchamilo',
array('where' => array("root_web = '{$n->root_web}' " => array()))
);
}
if ($todelete) {
foreach ($todelete as $fooid => $instance) {
$slug = $instance['slug'];
// Remove all files and eventual symlinks
$absalternatecourse = vchamilo_get_config('vchamilo', 'course_real_root');
$coursedir = $absalternatecourse.$slug;
Display::addFlash(Display::return_message("Deleting $coursedir"));
removeDir($coursedir);
if ($absalternatehome = vchamilo_get_config('vchamilo', 'home_real_root')) {
$homedir = $absalternatehome.'/'.$slug;
Display::addFlash(Display::return_message("Deleting $homedir"));
removeDir($homedir);
}
// delete archive
if ($absalternatearchive = vchamilo_get_config('vchamilo', 'archive_real_root')) {
$archivedir = $absalternatearchive.'/'.$slug;
Display::addFlash(Display::return_message("Deleting $archivedir"));
removeDir($archivedir);
Virtual::redirect(api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php');
break;
case 'fulldeleteinstances':
$todelete = [];
// Removes everything.
if (empty($automation)) {
if (!empty($vidlist)) {
$todelete = Database::select('*', 'vchamilo', array('where' => array("id IN ('$vidlist')" => array())));
}
} else {
$todelete = Database::select(
'*',
'vchamilo',
array('where' => array("root_web = '{$n->root_web}' " => array()))
);
}
if ($todelete) {
foreach ($todelete as $fooid => $instance) {
$slug = $instance['slug'];
$sql = "DELETE FROM {$table} WHERE id = ".$instance['id'];
Database::query($sql);
// Remove all files and eventual symlinks
$absalternatecourse = Virtual::getConfig('vchamilo', 'course_real_root');
$coursedir = $absalternatecourse.$slug;
Display::addFlash(Display::return_message("Removing instance: ".$instance['root_web']));
Display::addFlash(Display::return_message("Deleting $coursedir"));
vchamilo_drop_databases($instance);
}
}
}
removeDir($coursedir);
if ($action == 'snapshotinstance') {
$interbreadcrumb[] = array('url' => 'manage.php', 'name' => get_lang('VChamilo'));
if ($absalternatehome = Virtual::getConfig('vchamilo', 'home_real_root')) {
$homedir = $absalternatehome.'/'.$slug;
$vid = isset($_REQUEST['vid']) ? $_REQUEST['vid'] : '';
if ($vid) {
$vhosts = Database::select('*', 'vchamilo', array('where' => array('id = ?' => $vid)));
$vhost = (object)array_pop($vhosts);
} else {
$vhost = (object)$_configuration;
$vhost->slug = vchamilo_get_slug_from_url($vhost->root_web);
$vhost->id = 0;
}
Display::addFlash(Display::return_message("Deleting $homedir"));
removeDir($homedir);
}
// Parsing url for building the template name.
$wwwroot = $vhost->root_web;
$vchamilostep = isset($_REQUEST['step']) ? $_REQUEST['step'] : '';
// delete archive
if ($absalternatearchive = Virtual::getConfig('vchamilo', 'archive_real_root')) {
$archivedir = $absalternatearchive.'/'.$slug;
// Make template directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
Display::addFlash(Display::return_message("Deleting $archivedir"));
removeDir($archivedir);
}
$backupDir = api_get_path(SYS_PATH).'plugin'.$separator.'vchamilo'.$separator.'templates'.$separator.$vhost->slug.$separator;
$sql = "DELETE FROM {$table} WHERE id = ".$instance['id'];
Database::query($sql);
$absolute_datadir = $backupDir.'data';
$absolute_sqldir = $backupDir.'dump.sql';
Display::addFlash(Display::return_message("Removing instance: ".$instance['root_web']));
if (!is_dir($backupDir)) {
$result = mkdir($backupDir, 0777, true);
if ($result) {
Display::addFlash(
Display::return_message('Directory created: '.$backupDir)
);
Virtual::dropDatabase((object) $instance);
}
}
break;
case 'snapshotinstance':
$interbreadcrumb[] = array('url' => 'manage.php', 'name' => get_lang('VChamilo'));
$vid = isset($_REQUEST['vid']) ? $_REQUEST['vid'] : '';
if ($vid) {
$vhosts = Database::select('*', 'vchamilo', array('where' => array('id = ?' => $vid)));
$vhost = (object)array_pop($vhosts);
} else {
Display::addFlash(
Display::return_message("Cannot create directory: $backupDir check the folder permissions", 'error')
);
$vhost = (object)$_configuration;
$vhost->slug = Virtual::getSlugFromUrl($vhost->root_web);
$vhost->id = 0;
}
}
if ($vchamilostep == 0) {
// Create directories, if necessary.
if (!is_dir($absolute_datadir)) {
mkdir($absolute_datadir, 0777, true);
mkdir($absolute_datadir.'/home', 0777, true);
}
// Parsing url for building the template name.
$wwwroot = $vhost->root_web;
$vchamilostep = isset($_REQUEST['step']) ? $_REQUEST['step'] : '';
if (empty($fullautomation)) {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content = '<form name"single" action="'.$actionurl.'">';
$content .= '<input type="hidden" name="what" value="snapshotinstance" />';
$content .= '<input type="hidden" name="vid" value="'.$vhost->id.'" />';
$content .= '<input type="hidden" name="step" value="1" />';
$content .= '<input type="submit" class="btn btn-primary" name="go_btn" value="'.$plugininstance->get_lang('continue').'" />';
$content .= '</form>';
$content .= '</div>';
$tpl = new Template(get_lang('Snapshot'), true, true, false, true, false);
$tpl->assign('actions', '');
$tpl->assign('message', '<h4>'.$plugininstance->get_lang('vchamilosnapshot1').'</h4>');
$tpl->assign('content', $content);
$tpl->display_one_col_template();
exit;
} else {
// continue next step
$vchamilostep = 1;
}
}
if ($vchamilostep >= 1) {
if ($wwwroot == $_configuration['root_web']) {
// Make fake Vchamilo record.
$vchamilo = vchamilo_make_this();
$coursePath = api_get_path(SYS_COURSE_PATH);
$homePath = api_get_path(SYS_HOME_PATH);
$archivePath = api_get_path(SYS_ARCHIVE_PATH);
} else {
// Get Vchamilo known record.
$vchamilo = Database::select('*', 'vchamilo', array('where' => array('root_web = ?' => array($wwwroot))), 'first');
$vchamilo = (object) $vchamilo;
$coursePath = vchamilo_get_config('vchamilo', 'course_real_root');
$homePath = vchamilo_get_config('vchamilo', 'home_real_root');
$archivePath = vchamilo_get_config('vchamilo', 'archive_real_root');
$coursePath = $coursePath.'/'.$vchamilo->slug;
$homePath = $homePath.'/'.$vchamilo->slug;
$archivePath = $archivePath.'/'.$vchamilo->slug;
}
// Make template directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
$content = '';
if ($vchamilostep == 1) {
// Auto dump the databases in a master template folder.
// this will create three files : dump.sql
$result = vchamilo_dump_databases($vchamilo, $absolute_sqldir);
$backupDir = api_get_path(SYS_PATH).'plugin'.$separator.'vchamilo'.$separator.'templates'.$separator.$vhost->slug.$separator;
if (empty($fullautomation)) {
if (!$result) {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content .= '<p><form name"single" action="'.$actionurl.'">';
$content .= '<input type="submit" name="go_btn" value="'.$plugininstance->get_lang('cancel').'" />';
$content .= '</form></p>';
} else {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$absolute_datadir = $backupDir.'data';
$absolute_sqldir = $backupDir.'dump.sql';
$message = $plugininstance->get_lang('vchamilosnapshot2');
if (!is_dir($backupDir)) {
$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')
);
}
}
Display::addFlash(
Display::return_message('Database file created: '.$absolute_sqldir)
);
if ($vchamilostep == 0) {
// Create directories, if necessary.
if (!is_dir($absolute_datadir)) {
mkdir($absolute_datadir, 0777, true);
mkdir($absolute_datadir.'/home', 0777, true);
}
$content .= '<form name"single" action="'.$actionurl.'">';
$content .= '<input type="hidden" name="what" value="snapshotinstance" />';
$content .= '<input type="hidden" name="vid" value="'.$vhost->id.'" />';
$content .= '<input type="hidden" name="step" value="2" />';
$content .= '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugininstance->get_lang('continue').'" />';
$content .= '</form>';
}
if (empty($fullautomation)) {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content = '<form name"single" action="'.$actionurl.'">';
$content .= '<input type="hidden" name="what" value="snapshotinstance" />';
$content .= '<input type="hidden" name="vid" value="'.$vhost->id.'" />';
$content .= '<input type="hidden" name="step" value="1" />';
$content .= '<input type="submit" class="btn btn-primary" name="go_btn" value="'.$plugin->get_lang('continue').'" />';
$content .= '</form>';
$content .= '</div>';
$tpl = new Template(get_lang('Snapshot'), true, true, false, true, false);
$tpl->assign('actions', '');
$tpl->assign('message', '<h4>'.$message.'</h4>');
$tpl->assign('message', '<h4>'.$plugin->get_lang('vchamilosnapshot1').'</h4>');
$tpl->assign('content', $content);
$tpl->display_one_col_template();
die;
exit;
} else {
// continue next step
$vchamilostep = 1;
}
}
Display::addFlash(Display::return_message("Copying from '$homePath' to '{$absolute_datadir}/home' "));
copyDirTo($homePath, $absolute_datadir.'/home/', false);
Display::addFlash(Display::return_message("Copying from '$coursePath' to '$absolute_datadir/courses' "));
copyDirTo($coursePath, $absolute_datadir.'/courses/', 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, '?'.'>');
fclose($FILE);
// Every step was SUCCESS.
if (empty($fullautomation)) {
Display::addFlash(
Display::return_message($plugininstance->get_lang('successfinishedcapture'),
'success'
)
);
if ($vchamilostep >= 1) {
if ($wwwroot == $_configuration['root_web']) {
// Make fake Vchamilo record.
$vchamilo = Virtual::makeThis();
$coursePath = api_get_path(SYS_COURSE_PATH);
$homePath = api_get_path(SYS_HOME_PATH);
$archivePath = api_get_path(SYS_ARCHIVE_PATH);
} else {
// Get Vchamilo known record.
$vchamilo = Database::select('*', 'vchamilo', array('where' => array('root_web = ?' => array($wwwroot))), 'first');
$vchamilo = (object) $vchamilo;
$coursePath = Virtual::getConfig('vchamilo', 'course_real_root');
$homePath = Virtual::getConfig('vchamilo', 'home_real_root');
$archivePath = Virtual::getConfig('vchamilo', 'archive_real_root');
$coursePath = $coursePath.'/'.$vchamilo->slug;
$homePath = $homePath.'/'.$vchamilo->slug;
$archivePath = $archivePath.'/'.$vchamilo->slug;
}
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)
);
$params = [
'subkey' => 'vchamilo',
'title' => 'default_template',
'type' => 'setting',
'category' => 'Plugins',
'variable' => 'vchamilo_default_template',
'selected_value' => $vhost->slug,
'access_url_changeable' => 0
];
api_set_setting_simple($params);
} else {
Display::addFlash(
Display::return_message('Default template is: <b>'.$vhost->slug.'</b>', 'success', false)
);
$content = '';
if ($vchamilostep == 1) {
// Auto dump the databases in a master template folder.
// this will create three files : dump.sql
$result = Virtual::dumpDatabase($vchamilo, $absolute_sqldir);
if (empty($fullautomation)) {
if (!$result) {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content .= '<p><form name"single" action="'.$actionurl.'">';
$content .= '<input type="submit" name="go_btn" value="'.$plugin->get_lang('cancel').'" />';
$content .= '</form></p>';
} else {
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$message = $plugin->get_lang('vchamilosnapshot2');
Display::addFlash(
Display::return_message('Database file created: '.$absolute_sqldir)
);
$content .= '<form name"single" action="'.$actionurl.'">';
$content .= '<input type="hidden" name="what" value="snapshotinstance" />';
$content .= '<input type="hidden" name="vid" value="'.$vhost->id.'" />';
$content .= '<input type="hidden" name="step" value="2" />';
$content .= '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugin->get_lang('continue').'" />';
$content .= '</form>';
}
$tpl = new Template(get_lang('Snapshot'), true, true, false, true, false);
$tpl->assign('actions', '');
$tpl->assign('message', '<h4>'.$message.'</h4>');
$tpl->assign('content', $content);
$tpl->display_one_col_template();
die;
}
}
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content .= '<form name"single" action="'.$actionurl.'">';
$content .= '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugininstance->get_lang('backtoindex').'" />';
$content .= '</form>';
Display::addFlash(Display::return_message("Copying from '$homePath' to '{$absolute_datadir}/home' "));
copyDirTo($homePath, $absolute_datadir.'/home/', false);
$tpl = new Template(get_lang('Snapshot'), true, true, false, true, false);
$tpl->assign('actions', '');
$tpl->assign('message', $plugininstance->get_lang('vchamilosnapshot3'));
$tpl->assign('content', $content);
$tpl->display_one_col_template();
Display::addFlash(Display::return_message("Copying from '$coursePath' to '$absolute_datadir/courses' "));
copyDirTo($coursePath, $absolute_datadir.'/courses/', false);
exit;
}
}
}
// 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, '?'.'>');
fclose($FILE);
if ($action == 'clearcache') {
// Removes cache directory.
if (empty($automation)) {
if (array_key_exists('vids', $_REQUEST)) {
$toclear = Database::select('*', 'vchamilo', array('where' => array("id IN ('$vidlist')" => array())));
// Every step was SUCCESS.
if (empty($fullautomation)) {
Display::addFlash(
Display::return_message($plugin->get_lang('successfinishedcapture'),
'success'
)
);
if (empty($vid)) {
$template = Virtual::getConfig('vchamilo', 'default_template');
if (empty($template)) {
Display::addFlash(
Display::return_message('Set default template as <b>'.$vhost->slug.'</b>', 'success', false)
);
$params = [
'subkey' => 'vchamilo',
'title' => 'default_template',
'type' => 'setting',
'category' => 'Plugins',
'variable' => 'vchamilo_default_template',
'selected_value' => $vhost->slug,
'access_url_changeable' => 0
];
api_set_setting_simple($params);
} else {
Display::addFlash(
Display::return_message('Default template is: <b>'.$vhost->slug.'</b>', 'success', false)
);
}
}
$actionurl = $_configuration['root_web'].'/plugin/vchamilo/views/manage.php';
$content .= '<form name"single" action="'.$actionurl.'">';
$content .= '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugin->get_lang('backtoindex').'" />';
$content .= '</form>';
$tpl = new Template(get_lang('Snapshot'), true, true, false, true, false);
$tpl->assign('actions', '');
$tpl->assign('message', $plugin->get_lang('vchamilosnapshot3'));
$tpl->assign('content', $content);
$tpl->display_one_col_template();
exit;
}
}
break;
case 'clearcache':
// Removes cache directory.
if (empty($automation)) {
if (array_key_exists('vids', $_REQUEST)) {
$toclear = Database::select('*', 'vchamilo', array('where' => array("id IN ('$vidlist')" => array())));
} else {
$vid = isset($_REQUEST['vid']) ? $_REQUEST['vid'] : 0;
if ($vid) {
$vhosts = Database::select('*', 'vchamilo', array('where' => array('id = ?' => $vid)));
$vhost = (object)array_pop($vhosts);
$toclear[$vhost->id] = $vhost;
} else {
$toclear[0] = (object)$_configuration;
}
}
} else {
$vid = isset($_REQUEST['vid']) ? $_REQUEST['vid'] : 0;
if ($vid) {
$vhosts = Database::select('*', 'vchamilo', array('where' => array('id = ?' => $vid)));
$vhost = (object)array_pop($vhosts);
$toclear[$vhost->id] = $vhost;
$toclear = Database::select(
'*',
'vchamilo',
array('where' => array("root_web = '{$n->root_web}' " => array()))
);
}
foreach ($toclear as $fooid => $instance) {
if ($fooid == 0) {
$templatepath = api_get_path(SYS_ARCHIVE_PATH).'twig';
Display::addFlash(Display::return_message("Deleting master cache $templatepath \n"));
removeDir($templatepath);
} else {
$toclear[0] = (object)$_configuration;
$coursePath = Virtual::getConfig('vchamilo', 'course_real_root');
$homePath = Virtual::getConfig('vchamilo', 'home_real_root');
$archivePath = Virtual::getConfig('vchamilo', 'archive_real_root');
// Get instance archive
$archivepath = api_get_path(SYS_ARCHIVE_PATH, (array)$instance);
$templatepath = $archivePath.'/'.$instance['slug'].'/twig';
Display::addFlash(Display::return_message("Deleting cache $templatepath \n"));
removeDir($templatepath);
}
}
} else {
$toclear = Database::select(
'*',
'vchamilo',
array('where' => array("root_web = '{$n->root_web}' " => array()))
);
}
foreach ($toclear as $fooid => $instance) {
if ($fooid == 0) {
$templatepath = api_get_path(SYS_ARCHIVE_PATH).'twig';
Display::addFlash(Display::return_message("Deleting master cache $templatepath \n"));
removeDir($templatepath);
} else {
$coursePath = vchamilo_get_config('vchamilo', 'course_real_root');
$homePath = vchamilo_get_config('vchamilo', 'home_real_root');
$archivePath = vchamilo_get_config('vchamilo', 'archive_real_root');
// Get instance archive
$archivepath = api_get_path(SYS_ARCHIVE_PATH, (array)$instance);
$templatepath = $archivePath.'/'.$instance['slug'].'/twig';
Display::addFlash(Display::return_message("Deleting cache $templatepath \n"));
removeDir($templatepath);
break;
case 'setconfigvalue':
$select = '<select name="preset" onchange="setpreset(this.form, this)">';
$settings = api_get_settings();
foreach ($settings as $setting) {
$select .= '<option name="'.$setting['variable'].'/'.$setting['subkey'].'">'.
$setting['variable'].' - '.$setting['subkey'].
'</option>';
}
}
}
$select .= '</select>';
if ($action == 'setconfigvalue') {
$select = '<select name="preset" onchange="setpreset(this.form, this)">';
$settings = api_get_settings();
foreach ($settings as $setting) {
$select .= '<option name="'.$setting['variable'].'/'.$setting['subkey'].'">'.
$setting['variable'].' - '.$setting['subkey'].
'</option>';
}
$select .= '</select>';
if (empty($vidlist)) {
api_not_allowed(true, 'No virtual chamilo selected');
}
Display::display_header();
echo '<h2>'.$plugininstance->get_lang('sendconfigvalue').'</h2>';
echo '<form name="setconfigform">';
echo '<input type="hidden" name="vidlist" value="'.$vidlist.'" />';
echo '<input type="hidden" name="confirm" value="1" />';
echo '<table>';
echo '<tr><td>'.get_lang('variable').'</td><td>'.get_lang('subkey').'</td></tr>';
echo '<tr><td><input type="text" name="variable" value="" size="30" /></td>';
echo '<td><input type="text" name="subkey" value="" size="30" /></td></tr>';
echo '<tr><td colspan="2">'.$select.'</td></tr>';
echo '<tr><td colspan="2">';
echo '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugininstance->get_lang('distributevalue').'"</td></tr>';
echo '</table>';
echo '</form>';
Display::display_footer();
exit;
}
if (empty($vidlist)) {
api_not_allowed(true, 'No virtual chamilo selected');
}
Display::display_header();
echo '<h2>'.$plugin->get_lang('sendconfigvalue').'</h2>';
echo '<form name="setconfigform">';
echo '<input type="hidden" name="vidlist" value="'.$vidlist.'" />';
echo '<input type="hidden" name="confirm" value="1" />';
echo '<table>';
echo '<tr><td>'.get_lang('variable').'</td><td>'.get_lang('subkey').'</td></tr>';
echo '<tr><td><input type="text" name="variable" value="" size="30" /></td>';
echo '<td><input type="text" name="subkey" value="" size="30" /></td></tr>';
echo '<tr><td colspan="2">'.$select.'</td></tr>';
echo '<tr><td colspan="2">';
echo '<input class="btn btn-primary" type="submit" name="go_btn" value="'.$plugin->get_lang('distributevalue').'"</td></tr>';
echo '</table>';
echo '</form>';
Display::display_footer();
exit;
break;
}

@ -1,21 +1,20 @@
<?php
/* For licensing terms, see /license.txt */
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
// Security
api_protect_admin_script();
vchamilo_check_settings();
Virtual::checkSettings();
$action = isset($_GET['what']) ? $_GET['what'] : '';
define('CHAMILO_INTERNAL', true);
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
$thisurl = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php';
require_js('host_list.js', 'vchamilo');
Virtual::requireJs('host_list.js', 'vchamilo');
if ($action) {
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/manage.controller.php';
@ -28,16 +27,7 @@ while ($instance = Database::fetch_object($result)) {
$instances[$instance->id] = $instance;
}
$templates = vchamilo_get_available_templates(false);
/*
$sql = "SELECT * FROM vchamilo
WHERE root_web = '".Database::escape_string('http://my.chamilo222.net/')."'";
$result = Database::query($sql);
$result = Database::store_result($result, 'ASSOC');
vchamilo_load_files_from_template((object)$result[0], 'localhost');
exit;*/
$templates = Virtual::getAvailableTemplates(false);
if (empty($templates)) {
$url = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php?what=snapshotinstance';
@ -54,13 +44,13 @@ $row = 0;
// $table->set_additional_parameters($parameters);
$headers = array(
'',
$plugininstance->get_lang('sitename'),
$plugininstance->get_lang('institution'),
$plugininstance->get_lang('dbhost').' - '.get_lang('Database'),
$plugininstance->get_lang('coursefolder'),
$plugininstance->get_lang('enabled'),
$plugininstance->get_lang('lastcron'),
'',
$plugin->get_lang('sitename'),
$plugin->get_lang('institution'),
$plugin->get_lang('dbhost').' - '.get_lang('Database'),
$plugin->get_lang('coursefolder'),
$plugin->get_lang('enabled'),
$plugin->get_lang('lastcron'),
''
);
$attrs = array('center' => 'left');
$table->addRow($headers, $attrs, 'th');
@ -72,23 +62,23 @@ foreach ($instances as $instance) {
if ($instance->visible) {
$status = '<a href="'.$thisurl.'?what=disableinstances&vids[]='.$instance->id.'" >
<img src="'.$plugininstance->pix_url('enabled').'" /></a>';
'.Display::returnFontAwesomeIcon('toggle-on').'</a>';
} else {
$status = '<a href="'.$thisurl.'?what=enableinstances&vids[]='.$instance->id.'" >
<img src="'.$plugininstance->pix_url('disabled').'" /></a>';
'.Display::returnFontAwesomeIcon('toggle-off').'</a>';
}
$cmd = '&nbsp;<a href="'.$thisurl.'?what=editinstance&vid='.$instance->id.'" title="'.$plugininstance->get_lang('edit').'">
<img src="'.$plugininstance->pix_url('edit').'" /></a>';
$cmd .= '&nbsp;<a href="'.$thisurl.'?what=snapshotinstance&vid='.$instance->id.'" title="'.$plugininstance->get_lang('snapshotinstance').'">
<img src="'.$plugininstance->pix_url('snapshot').'" /></a>';
$cmd = '&nbsp;<a href="'.$thisurl.'?what=editinstance&vid='.$instance->id.'" title="'.$plugin->get_lang('edit').'">
'.Display::returnFontAwesomeIcon('pencil').'</a>';
$cmd .= '&nbsp;<a href="'.$thisurl.'?what=snapshotinstance&vid='.$instance->id.'" title="'.$plugin->get_lang('snapshotinstance').'">
'.Display::returnFontAwesomeIcon('camera').'</a>';
if (!$instance->visible) {
$cmd .= '<a href="'.$thisurl.'?what=fulldeleteinstances&vids[]='.$instance->id.'" title="'.$plugininstance->get_lang('destroyinstances').'">
<img src="'.$plugininstance->pix_url('delete').'" /></a>';
$cmd .= '<a href="'.$thisurl.'?what=fulldeleteinstances&vids[]='.$instance->id.'" title="'.$plugin->get_lang('destroyinstances').'">
&nbsp;'.Display::returnFontAwesomeIcon('trash').' </a>';
} else {
$cmd .= '<a href="'.$thisurl.'?what=deleteinstances&vids[]='.$instance->id.'" title="'.$plugininstance->get_lang('deleteinstances').'">
<img src="'.$plugininstance->pix_url('delete').'" /></a>';
$cmd .= '<a href="'.$thisurl.'?what=deleteinstances&vids[]='.$instance->id.'" title="'.$plugin->get_lang('deleteinstances').'">
&nbsp;'.Display::returnFontAwesomeIcon('trash').' </a>';
}
$crondate = $instance->lastcron ? date('r', $instance->lastcron) : '';
@ -110,28 +100,28 @@ foreach ($instances as $instance) {
$items = [
[
'url' => $thisurl.'?what=newinstance',
'content' => $plugininstance->get_lang('newinstance')
'content' => $plugin->get_lang('newinstance'),
],
[
'url' => $thisurl.'?what=import',
'content' => $plugin->get_lang('ImportInstance'),
],
/*[
'url' => $thisurl.'?what=instance&registeronly=1',
'content' => $plugininstance->get_lang('registerinstance')
],*/
[
'url' => $thisurl.'?what=snapshotinstance&vid=0',
'content' => $plugininstance->get_lang('snapshotmaster')
'content' => $plugin->get_lang('snapshotmaster'),
],
[
'url' => $thisurl.'?what=clearcache&vid=0',
'content' => $plugininstance->get_lang('clearmastercache')
'content' => $plugin->get_lang('clearmastercache'),
],
[
'url' => api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/syncparams.php',
'content' => $plugininstance->get_lang('sync_settings')
'content' => $plugin->get_lang('sync_settings'),
],
[
'url' => api_get_path(WEB_CODE_PATH).'admin/configure_plugin.php?name=vchamilo',
'content' => get_lang('Settings')
]
'content' => get_lang('Settings'),
],
];
$content = Display::page_header('VChamilo Instances');
@ -140,20 +130,20 @@ $content .= Display::actions($items);
$content .= '<form action="'.$thisurl.'">';
$content .= $table->toHtml();
$selectionoptions = array('<option value="0" selected="selected">'.$plugininstance->get_lang('choose').'</option>');
$selectionoptions[] = '<option value="deleteinstances">'.$plugininstance->get_lang('deleteinstances').'</option>';
$selectionoptions[] = '<option value="enableinstances">'.$plugininstance->get_lang('enableinstances').'</option>';
$selectionoptions[] = '<option value="fulldeleteinstances">'.$plugininstance->get_lang(
$selectionoptions = array('<option value="0" selected="selected">'.$plugin->get_lang('choose').'</option>');
$selectionoptions[] = '<option value="deleteinstances">'.$plugin->get_lang('deleteinstances').'</option>';
$selectionoptions[] = '<option value="enableinstances">'.$plugin->get_lang('enableinstances').'</option>';
$selectionoptions[] = '<option value="fulldeleteinstances">'.$plugin->get_lang(
'destroyinstances'
).'</option>';
$selectionoptions[] = '<option value="clearcache">'.$plugininstance->get_lang('clearcache').'</option>';
$selectionoptions[] = '<option value="setconfigvalue">'.$plugininstance->get_lang('setconfigvalue').'</option>';
$selectionoptions[] = '<option value="clearcache">'.$plugin->get_lang('clearcache').'</option>';
$selectionoptions[] = '<option value="setconfigvalue">'.$plugin->get_lang('setconfigvalue').'</option>';
$selectionaction = '<select name="what" onchange="this.form.submit()">'.implode('', $selectionoptions).'</select>';
$content .= '<div class"vchamilo-right"><div></div><div>
<a href="javascript:selectallhosts()">'.$plugininstance->get_lang('selectall').'</a> -
<a href="javascript:deselectallhosts()">'.$plugininstance->get_lang('selectnone').'</a> -
&nbsp; - '.$plugininstance->get_lang('withselection').' '.$selectionaction.'</div></div>';
$content .= '<div class="vchamilo-right"><div></div><div>
<a href="javascript:selectallhosts()">'.$plugin->get_lang('selectall').'</a> -
<a href="javascript:deselectallhosts()">'.$plugin->get_lang('selectnone').'</a> -
&nbsp; - '.$plugin->get_lang('withselection').' '.$selectionaction.'</div></div>';
$content .= '</form>';

@ -1,4 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Tests database connection.
*
@ -9,14 +11,12 @@
// Loading configuration.
require_once '../../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
api_protect_admin_script();
global $_configuration;
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
// Retrieve parameters for database connection test.
$dbParams = array();
@ -47,9 +47,9 @@ try {
);
$list = $connection->getSchemaManager()->listDatabases();
echo $plugininstance->get_lang('connectionok');
echo $plugin->get_lang('connectionok');
} catch (Exception $e) {
echo $plugininstance->get_lang('badconnection');
echo $plugin->get_lang('badconnection');
die();
}

@ -1,4 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Tests presence of course directories.
*
@ -9,17 +11,15 @@
// Loading configuration.
require_once '../../../main/inc/global.inc.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
api_protect_admin_script();
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
// Retrieve parameters for database connection test.
$dataroot = $_REQUEST['dataroot'];
$absalternatecourse = vchamilo_get_config('vchamilo', 'course_real_root');
$absalternatecourse = Virtual::getConfig('vchamilo', 'course_real_root');
if (!empty($absalternatecourse)){
// this is the relocated case
$coursedir = str_replace('//', '/', $absalternatecourse.'/'.$dataroot);
@ -40,23 +40,23 @@ if (is_dir($coursedir)) {
closedir($DIR);
if ($hasfiles) {
echo '<div class="error">'.$plugininstance->get_lang('datapathnotavailable').'</div>';
echo '<div class="error">'.$plugin->get_lang('datapathnotavailable').'</div>';
} else {
echo '<div class="success">'.$plugininstance->get_lang('datapathavailable').'</div>';
echo '<div class="success">'.$plugin->get_lang('datapathavailable').'</div>';
}
echo stripslashes($coursedir);
} else {
if (@mkdir($coursedir, 02777, true)) {
echo '<div class="success">'.$plugininstance->get_lang('datapathcreated').'</div>';
echo '<div class="success">'.$plugin->get_lang('datapathcreated').'</div>';
} else {
echo '<div class="error">'.$plugininstance->get_lang('couldnotcreatedataroot').'</div>';
echo '<div class="error">'.$plugin->get_lang('couldnotcreatedataroot').'</div>';
}
echo stripslashes($coursedir);
}
echo "</p>";
$closestr = $plugininstance->get_lang('closewindow');
$closestr = $plugin->get_lang('closewindow');
echo "<center>";
echo "<input class='btn' type=\"button\" name=\"close\" value=\"$closestr\" onclick=\"self.close();\" />";
echo "</center>";

@ -1,4 +1,5 @@
<?php
/* For licensing terms, see /license.txt */
api_protect_admin_script();

@ -1,20 +1,18 @@
<?php
/* For licensing terms, see /license.txt */
$cidReset = true;
require_once '../../../main/inc/global.inc.php';
api_protect_admin_script();
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib.php';
require_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/lib/vchamilo_plugin.class.php';
$action = isset($_GET['what']) ? $_GET['what'] : '';
define('CHAMILO_INTERNAL', true);
$plugininstance = VChamiloPlugin::create();
$plugin = VChamiloPlugin::create();
$thisurl = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php';
if ($action){
if ($action) {
require_once(api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/syncparams.controller.php');
}
@ -27,10 +25,10 @@ $row = 0;
// $table->set_additional_parameters($parameters);
$headers = array(
'',
$plugininstance->get_lang('variable').' ['.$plugininstance->get_lang('subkey').']',
$plugininstance->get_lang('category'),
$plugininstance->get_lang('accessurl'),
$plugininstance->get_lang('value'),
$plugin->get_lang('variable').' ['.$plugin->get_lang('subkey').']',
$plugin->get_lang('category'),
$plugin->get_lang('accessurl'),
$plugin->get_lang('value'),
'',
);
$attrs = array('center' => 'left');
@ -42,10 +40,10 @@ foreach ($settings as $param) {
continue;
}
// $check = '<input type="checkbox" name="sync_'.$param->id.'" value="'.$param->selected_value.'" />';
//<input type="checkbox" name="del_'.$param['id'].'" value="1" title="'.$plugininstance->get_lang('deleteifempty').'" />
//<input type="checkbox" name="del_'.$param['id'].'" value="1" title="'.$plugin->get_lang('deleteifempty').'" />
$check = '';
$attrs = array('center' => 'left');
$syncthisbutton = '<input type="button" name="syncthis" value="'.$plugininstance->get_lang('syncthis').'" onclick="ajax_sync_setting(\''.$_configuration['root_web'].'\', \''.$param['id'].'\')" />
$syncthisbutton = '<input type="button" name="syncthis" value="'.$plugin->get_lang('syncthis').'" onclick="ajax_sync_setting(\''.$_configuration['root_web'].'\', \''.$param['id'].'\')" />
<span id="res_'.$param['id'].'"></span>';
$data = array(
$check,
@ -63,18 +61,17 @@ foreach ($settings as $param) {
$content = '<form name="settingsform" action="'.$thisurl.'">';
$content .= '<input type="hidden" name="what" value="" />';
$content .= $table->toHtml();
// $content .= '<div class"vchamilo-right"><div></div><div><input type="button" name="syncall" value="'.$plugininstance->get_lang('syncall').'" onclick="this.form.what.value=\'syncall\';this.form.submit();">';
// $content .= '<div class"vchamilo-right"><div></div><div><input type="button" name="syncall" value="'.$plugin->get_lang('syncall').'" onclick="this.form.what.value=\'syncall\';this.form.submit();">';
$content .= '</form>';
$actions = '';
Display::addFlash(Display::return_message($plugininstance->get_lang('Sync your master settings to all instances.')));
Display::addFlash(Display::return_message($plugin->get_lang('Sync your master settings to all instances.')));
$message = require_js('ajax.js', 'vchamilo', true);
$interbreadcrumb[] = array('url' => 'manage.php', 'name' => get_lang('VChamilo'));
$tpl = new Template($plugininstance->get_lang('sync_settings'), true, true, false, true, false);
$tpl = new Template($plugin->get_lang('sync_settings'), true, true, false, true, false);
$tpl->assign('actions', $actions);
$tpl->assign('message', $message);
$tpl->assign('content', $content);

Loading…
Cancel
Save