WIP fix vchamilo plugin

ofaj
jmontoyaa 9 years ago
parent 5c461a5e48
commit 356522a410
  1. 2
      plugin/vchamilo/ajax/service.php
  2. 231
      plugin/vchamilo/lib.php
  3. 8
      plugin/vchamilo/views/editinstance.controller.php
  4. 20
      plugin/vchamilo/views/syncparams.controller.php

@ -12,7 +12,7 @@ $thisurl = api_get_path(WEB_PLUGIN_PATH).'vchamilo/views/manage.php';
api_protect_admin_script();
if ($action == 'syncthis') {
$res = include_once(api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/syncparams.controller.php');
$res = include_once api_get_path(SYS_PLUGIN_PATH).'vchamilo/views/syncparams.controller.php';
if (!$res) {
echo '<span class="ok">Success</span>';
} else {

@ -1,7 +1,7 @@
<?php
use Cocur\Slugify\Slugify;
use Symfony\Component\Finder\Finder;
require_once 'lib/bootlib.php';
require_once 'lib/vchamilo_plugin.class.php';
@ -109,7 +109,7 @@ function vchamilo_boot_connection(&$_configuration)
// Only relevant for pdo_sqlite, specifies the path to the SQLite database.
'path' => isset($_configuration['db_path']) ? $_configuration['db_path'] : '',
// Only relevant for pdo_mysql, pdo_pgsql, and pdo_oci/oci8,
'port' => isset($_configuration['db_port']) ? $_configuration['db_port'] : ''
'port' => isset($_configuration['db_port']) ? $_configuration['db_port'] : '',
);
try {
$database = new \Database();
@ -167,15 +167,16 @@ function vchamilo_get_default_course_index_fragment() {
return "<html><head></head><body></body></html>";
}
function vchamilo_template_exists($template) {
function vchamilo_template_exists($template)
{
global $_configuration;
// Find and checktemplate directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
$templatefoldername = 'plugin'.$separator.'vchamilo'.$separator.'templates';
$separator = DIRECTORY_SEPARATOR;
$templatefoldername = 'plugin'.$separator.'vchamilo'.$separator.'templates';
$absolute_templatesdir = $_configuration['root_sys'].$templatefoldername;
$relative_datadir = $templatefoldername.$separator.$template.'_sql';
$absolute_datadir = $_configuration['root_sys'].$relative_datadir;
$relative_datadir = $templatefoldername.$separator.$template.'_sql';
$absolute_datadir = $_configuration['root_sys'].$relative_datadir;
return is_dir($absolute_datadir);
}
@ -206,14 +207,14 @@ function vchamilo_drop_databases(&$vchamilo)
foreach($sqls as $sql){
$res = Database::query($sql);
if (!$res){
$erroritem = new StdClass();
$erroritem = new stdClass();
$erroritem->message = $plugininstance->get_lang('couldnotdropdb');
$erroritem->on = 'db';
$erroritems[] = $erroritem;
}
}
if (!empty($erroritems)){
if (!empty($erroritems)) {
return $erroritems;
}
@ -254,13 +255,9 @@ function vchamilo_create_databases($vchamilo)
*/
function vchamilo_get_database_dump_cmd($vchamilodata)
{
global $CFG;
$pgm = vchamilo_get_config('vchamilo', 'mysql_cmd');
$pgm = vchamilo_get_config('mysql_cmd');
// Checks the needed program.
Display::addFlash(Display::return_message("load_database_from_dump : checking database command"));
if (!$pgm){
if (!$pgm) {
$pgm = '/usr/bin/mysql';
Display::addFlash(Display::return_message("Using default database command $pgm "));
}
@ -269,7 +266,6 @@ function vchamilo_get_database_dump_cmd($vchamilodata)
$phppgm = str_replace("\"", '', $phppgm);
$pgm = str_replace("/", DIRECTORY_SEPARATOR, $pgm);
Display::addFlash(Display::return_message('load_database_from_dump : checking command is available'));
if (!is_executable($phppgm)){
print_error('databasecommanddoesnotmatchanexecutablefile');
return false;
@ -277,49 +273,44 @@ function vchamilo_get_database_dump_cmd($vchamilodata)
// Retrieves the host configuration (more secure).
$vchamilodata = vchamilo_make_this();
if (strstr($vchamilodata->db_host, ':') !== false){
list($vchamilodata->db_host, $vchamilodata->db_port) = split(':', $vchamilodata->db_host);
if (strstr($vchamilodata->db_host, ':') !== false) {
list($vchamilodata->db_host, $vchamilodata->db_port) = explode(':', $vchamilodata->db_host);
}
// Password.
if (!empty($vchamilodata->db_password)){
if (!empty($vchamilodata->db_password)) {
$vchamilodata->db_password = '-p'.escapeshellarg($vchamilodata->db_password).' ';
}
// Making the command line (see 'vconfig.php' file for defining the right paths).
$sqlcmd = $pgm.' -h'.$vchamilodata->db_host.(isset($vchamilodata->db_port) ? ' -P'.$vchamilodata->db_port.' ' : ' ' );
$sqlcmd = $pgm.' -h'.$vchamilodata->db_host.(isset($vchamilodata->db_port) ? ' -P'.$vchamilodata->db_port.' ' : ' ' );
$sqlcmd .= '-u'.$vchamilodata->db_user.' '.$vchamilodata->db_password;
$sqlcmd .= '%DATABASE% < ';
return $sqlcmd;
}
function vchamilo_load_db_template($vchamilo, $dbtemplate, $template){
function vchamilo_load_db_template($vchamilo, $template) {
global $_configuration;
// Make template directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
$templatefoldername = 'plugin'.$separator.'vchamilo'.$separator.'templates';
$absolute_templatesdir = $_configuration['root_sys'].$templatefoldername;
$relative_datadir = $templatefoldername.$separator.$template.'_sql';
$absolute_datadir = $_configuration['root_sys'].$relative_datadir;
$filerad = preg_replace('/_database$/', '', $dbtemplate);
$sqlfile = 'chamilo_master_'.$filerad.'.sql';
$separator = DIRECTORY_SEPARATOR;
$templatefoldername = 'plugin'.$separator.'vchamilo'.$separator.'templates';
$absolute_datadir = $_configuration['root_sys'].$templatefoldername.$separator.$template.$separator.'dump.sql';
if (!$sqlcmd = vchamilo_get_database_dump_cmd($vchamilo)){
if (!$sqlcmd = vchamilo_get_database_dump_cmd($vchamilo)) {
return false;
}
$sqlcmd = str_replace('%DATABASE%', $vchamilo->$dbtemplate, $sqlcmd);
$sqlcmd = str_replace('%DATABASE%', $vchamilo->main_database, $sqlcmd);
// Make final commands to execute, depending on the database type.
$import = $sqlcmd.$absolute_datadir.'/'.$sqlfile;
$import = $sqlcmd.$absolute_datadir;
// Execute the command.
Display::addFlash(Display::return_message("load_database_from_dump : executing feeding sql as \n $import "));
if (!defined('CLI_SCRIPT')){
if (!defined('CLI_SCRIPT')) {
putenv('LANG=en_US.utf-8');
}
// ensure utf8 is correctly handled by php exec()
@ -339,13 +330,13 @@ function vchamilo_load_db_template($vchamilo, $dbtemplate, $template){
* @param handle $cnx
* @param array $vars an array of vars to inject in the bulk file before processing
*/
function vchamilo_execute_db_sql(&$vchamilo, $bulkfile, $cnx = null, $vars=null, $filter=null){
global $_configuration;
if (file_exists($bulkfile)){
$erroritem = new StdClass();
function vchamilo_execute_db_sql(&$vchamilo, $bulkfile, $cnx = null, $vars = null, $filter = null)
{
if (file_exists($bulkfile)) {
$erroritem = new stdClass();
$erroritem->message = "vchamilo_load_db_template : Bulk file $bulkfile not found";
$erroritems[] = $erroritem;
return $erroritem;
}
@ -391,7 +382,7 @@ function vchamilo_execute_db_sql(&$vchamilo, $bulkfile, $cnx = null, $vars=null,
if ($query == '') continue; // avoid empty queries
$query = mb_convert_encoding($query, 'iso-8859-1', 'auto');
if (!$res = vchamilo_execute_query($vchamilo, $query, $cnx)){
$erroritem = new StdClass();
$erroritem = new stdClass();
$erroritem->message = "vchamilo_load_db_template : Load error on query $l";
$erroritem->content = $query;
$erroritems[] = $erroritem;
@ -459,7 +450,7 @@ function vchamilo_dump_databases($vchamilo, $outputfilerad)
$pgm = !empty($mysqldumpcmd) ? stripslashes($mysqldumpcmd) : false ;
if (!$pgm) {
$erroritem = new StdClass();
$erroritem = new stdClass();
$erroritem->message = "Database dump command not available check here: ";
$url = api_get_path(WEB_CODE_PATH).'admin/configure_plugin.php?name=vchamilo';
$erroritem->message .= Display::url($url, $url);
@ -470,7 +461,7 @@ function vchamilo_dump_databases($vchamilo, $outputfilerad)
$pgm = str_replace('/', DIRECTORY_SEPARATOR, $pgm);
if (!is_executable($phppgm)){
$erroritem = new StdClass();
$erroritem = new stdClass();
$erroritem->message = "Database dump command $phppgm does not match any executable";
return array($erroritem);
}
@ -501,15 +492,23 @@ function vchamilo_dump_databases($vchamilo, $outputfilerad)
/**
* read manifest values in vchamilo template.
* @uses $CFG
*/
function vchamilo_get_vmanifest($version)
{
include(api_get_path(SYS_PATH, SYS_PATH).'/plugin/vchamilo/templates/'.$version.'_sql/manifest.php');
$manifest->templatewwwroot = $templatewwwroot;
$manifest->templatevdbprefix = $templatevdbprefix;
$manifest->coursefolder = $coursefolder;
return $manifest;
$file = api_get_path(SYS_PATH).'/plugin/vchamilo/templates/'.$version.'/manifest.php';
if (file_exists($file)) {
include($file);
$manifest = new stdClass();
$manifest->templatewwwroot = $templatewwwroot;
// $manifest->templatevdbprefix = $templatevdbprefix;
// $manifest->coursefolder = $coursefolder;
return $manifest;
}
return false;
}
/**
@ -544,19 +543,21 @@ function vchamilo_get_available_templates()
$absolute_templatesdir = $_configuration['root_sys'].$templatefoldername;
// Scans the templates.
if (!is_dir($absolute_templatesdir)){
if (!is_dir($absolute_templatesdir)) {
mkdir($absolute_templatesdir, 0777, true);
}
$dirs = glob($absolute_templatesdir.'/*');
$vtemplates = preg_grep("/[^\/](.*)_vchamilodata$/", $dirs);
$finder = new \Symfony\Component\Finder\Finder();
$dirs = $finder->in($absolute_templatesdir)->depth('== 0');
// Retrieves template(s) name(s). Should be hostnames.
$templatesarray = array('' => $plugininstance->get_lang('emptysite'));
if ($vtemplates){
foreach($vtemplates as $vtemplatedir){
preg_match("/([^\/]*)_vchamilodata/", $vtemplatedir, $matches);
$templatesarray[$matches[1]] = $matches[1];
if (!isset($first)) $first = $matches[1];
if ($dirs) {
/** @var Symfony\Component\Finder\SplFileInfo $dir */
foreach ($dirs as $dir) {
if (is_dir($dir->getPathname())) {
$templatesarray[$dir->getRelativePathname()] = $dir->getRelativePathname();
}
}
}
@ -607,12 +608,8 @@ function vchamilo_load_files_from_template($vchamilo, $template)
global $_configuration;
// Make template directory (files and SQL).
$separator = DIRECTORY_SEPARATOR;
$templatefoldername = 'plugin'.$separator.'vchamilo'.$separator.'templates';
$relative_template_datadir = $templatefoldername.$separator.$template.'_vchamilodata';
$absolute_templatesdir = $_configuration['root_sys'].$templatefoldername;
$absolute_template_datadir = $_configuration['root_sys'].$relative_template_datadir;
$separator = DIRECTORY_SEPARATOR;
$absolute_template_datadir = $_configuration['root_sys'].'plugin'.$separator.'vchamilo'.$separator.'templates'.$separator.$template;
$vchamilo->virtual = true;
@ -621,22 +618,39 @@ function vchamilo_load_files_from_template($vchamilo, $template)
$vhomepath = api_get_path(SYS_HOME_PATH, (array)$vchamilo);
$varchivepath = api_get_path(SYS_ARCHIVE_PATH, (array)$vchamilo);
echo "archiveapth : $varchivepath";
Display::addFlash(Display::return_message("archiveapth : $varchivepath"));
// Rename some dirs top match instance requirements
$manifest = vchamilo_get_vmanifest($template);
// get the protocol free hostname
$originarchivedir = preg_replace('/https?:\/\//', '', $manifest->templatewwwroot);
$originhomedir = preg_replace('/https?:\/\//', '', $manifest->templatewwwroot);
Display::addFlash(Display::return_message("Copying {$absolute_template_datadir}/{$manifest->coursefolder} => $vcoursepath"));
Display::addFlash(Display::return_message("Copying {$absolute_template_datadir}/archive/{$originarchivedir} => $varchivepath"));
Display::addFlash(Display::return_message("Copying {$absolute_template_datadir}/home/{$originhomedir} => $vhomepath"));
copyDirContentTo(chop_last_slash($absolute_template_datadir.'/'.$manifest->coursefolder), chop_last_slash($vcoursepath), false);
copyDirContentTo(chop_last_slash($absolute_template_datadir.'/archive/'.$originarchivedir), chop_last_slash($varchivepath), false);
copyDirContentTo(chop_last_slash($absolute_template_datadir.'/home/'.$originhomedir), chop_last_slash($vhomepath), false);
if ($manifest) {
// get the protocol free hostname
Display::addFlash(
Display::return_message("Copying {$absolute_template_datadir}/data/courses => $vcoursepath")
);
Display::addFlash(
Display::return_message("Copying {$absolute_template_datadir}/data/archive => $varchivepath")
);
Display::addFlash(
Display::return_message("Copying {$absolute_template_datadir}/data/home => $vhomepath")
);
copyDirTo(
chop_last_slash($absolute_template_datadir.'/data/courses'),
chop_last_slash($vcoursepath),
false
);
copyDirTo(
chop_last_slash($absolute_template_datadir.'/data/archive'),
chop_last_slash($varchivepath),
false
);
copyDirTo(
chop_last_slash($absolute_template_datadir.'/data/home'),
chop_last_slash($vhomepath),
false
);
}
}
function chop_last_slash($path)
@ -644,54 +658,6 @@ function chop_last_slash($path)
return preg_replace('/\/$/', '', $path);
}
/**
* Moves a directory and its content to an other area
*
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be>
* @param - $orig_dir_path (string) - the path of the directory to move
* @param - $destination (string) - the path of the new area
* @return - no return
*/
function copyDirContentTo($source, $destination, $move = true) {
// Extract directory name - create it at destination - update destination trail
if (!is_dir($source)) {
return;
}
if (!is_dir($destination)) {
mkdir($destination, api_get_permissions_for_new_directories());
}
$DIR = opendir($source);
while ($element = readdir($DIR)) {
if ($element == '.' || $element == '..') {
continue; // Skip the current and parent directories
} elseif (is_file($source.'/'.$element)) {
copy($source.'/'.$element, $destination.'/'.$element);
if ($move) {
unlink($source.'/'.$element) ;
}
} elseif (is_dir($source.'/'.$element)) {
$dirs_to_copy[] = $element;
}
}
closedir($DIR) ;
if (sizeof($dirs_to_copy) > 0) {
foreach ($dirs_to_copy as $dir) {
copyDirContentTo($source.'/'.$dir, $destination.'/'.$dir, $move); // Recursivity
}
}
if ($move) {
rmdir($source) ;
}
}
// from moot
define('PARAM_BOOL', 1);
define('PARAM_INT', 2);
@ -752,8 +718,8 @@ function get_config($module, $key = false, $isplugin = true) {
}
}
function set_config($key, $value, $module, $isplugin = false) {
function set_config($key, $value, $module, $isplugin = false)
{
if ($isplugin) {
$key = $module.'_'.$key;
}
@ -770,7 +736,7 @@ function set_config($key, $value, $module, $isplugin = false) {
* gets a string from a component
*
*/
function get_string($key, $component = 'local_ent_installer', $a = ''){
function get_string($key, $component = 'local_ent_installer', $a = '') {
global $_configuration;
static $strings;
static $fallbackstrings;
@ -906,7 +872,19 @@ function ctrace($str) {
* @param int The changeability of this setting for non-master urls
* @return boolean true on success, false on failure
*/
function api_update_setting($val, $var, $sk = null, $type = 'textfield', $c = null, $title = '', $com = '', $sc = null, $skt = null, $a = 1, $v = 0) {
function api_update_setting(
$val,
$var,
$sk = null,
$type = 'textfield',
$c = null,
$title = '',
$com = '',
$sc = null,
$skt = null,
$a = 1,
$v = 0
) {
global $_setting;
if (empty($var) || !isset($val)) {
@ -1012,6 +990,7 @@ function api_update_setting($val, $var, $sk = null, $type = 'textfield', $c = nu
*/
function make_tms($time) {
$tms = date('Y-m-d H:i:s', $time);
return $tms;
}

@ -31,7 +31,7 @@ if ($data->what == 'addinstance' || $data->what == 'registerinstance') {
return ;
}
ctrace("Registering VChamilo");
ctrace("Registering: ".$data->root_web);
$tablename = Database::get_main_table('vchamilo');
$sql = "SELECT * FROM $tablename
WHERE root_web = '".Database::escape_string($data->root_web)."'";
@ -114,8 +114,6 @@ if ($data->what == 'addinstance' || $data->what == 'registerinstance') {
}
}
ctrace("Checking direct home dir ");
// if real homedir IS NOT under chamilo install, link to it
// Seems not be necessary as we can globally link the whole Home container
/*
@ -141,8 +139,6 @@ if ($data->what == 'addinstance' || $data->what == 'registerinstance') {
}
}
ctrace("Checking direct archive dir ");
// if real archivedir IS NOT under chamilo install, link to it
// Seems not be necessary as we can globally link the whole Home container
/*
@ -164,7 +160,7 @@ if ($data->what == 'addinstance' || $data->what == 'registerinstance') {
ctrace("Creating databases from template $template ");
vchamilo_create_databases($data);
ctrace("Loading data template $template ");
vchamilo_load_db_template($data, 'main_database', $template);
vchamilo_load_db_template($data, $template);
ctrace("Coying files from template $template ");
vchamilo_load_files_from_template($data, $template);
}

@ -63,6 +63,8 @@ if ($action == 'syncthis') {
'variable' => $setting['variable'],
'subkey' => $setting['subkey'],
'category' => $setting['category'],
'type' => $setting['type'],
'comment' => $setting['comment'],
'access_url' => $setting['access_url'],
);
@ -71,10 +73,10 @@ if ($action == 'syncthis') {
$table = $chm['main_database'].".settings_current";
if ($delifempty && empty($value)) {
$sql = "DELETE FROM $table WHERE
selected_value = '$value' AND
variable = '{{$setting['variable']}}' AND
access_url = '{$setting['access_url']}'
";
selected_value = '$value' AND
variable = '{{$setting['variable']}}' AND
access_url = '{$setting['access_url']}'
";
Database::query($sql);
//$res = $DB->delete_records('settings_current', $params, $chm->main_database);
@ -82,10 +84,10 @@ if ($action == 'syncthis') {
} else {
$sql = " SELECT * FROM $table
WHERE
variable = '{{$setting['variable']}}' AND
subkey = '{$setting['subkey']}'
";
WHERE
variable = '".$setting['variable']."' AND
access_url = '{$setting['access_url']}'
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
@ -94,7 +96,7 @@ if ($action == 'syncthis') {
WHERE id = $settingId";
Database::query($sql);
} else {
Database::insert($table, $params);
Database::insert($table, $params, true);
}
}
}

Loading…
Cancel
Save