Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/plugin/vchamilo/views/syncparams.controller.php

137 lines
5.2 KiB

<?php
/* For licensing terms, see /license.txt */
api_protect_admin_script();
$sql = "SELECT * FROM vchamilo";
$result = Database::query($sql);
$vchamilos = Database::store_result($result, 'ASSOC');
// propagate in all known vchamilos a setting
switch ($action) {
case 'syncall':
exit;
$keys = array_keys($_REQUEST);
$selection = preg_grep('/sel_.*/', $keys);
foreach ($selection as $selkey) {
$settingId = str_replace('sel_', '', $selkey);
if (!is_numeric($settingId)) {
continue;
}
$value = $_REQUEST[$selkey];
$setting = api_get_settings_params_simple(['id = ?' => $settingId]);
$params = [
'title' => $setting['title'],
'variable' => $setting['variable'],
'subkey' => $setting['subkey'],
'category' => $setting['category'],
'access_url' => $setting['access_url'],
];
foreach ($vchamilos as $chm) {
$table = $chm['main_database'].".settings_current ";
$sql = " SELECT * FROM $table
WHERE
variable = '{{$setting['variable']}}' AND
access_url = '{$setting['access_url']}'
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$sql = "UPDATE $table SET
selected_value = '$value'
WHERE id = $settingId";
Database::query($sql);
}
}
}
break;
case 'syncthis':
$settingId = isset($_GET['settingid']) ? (int) $_GET['settingid'] : '';
if (!empty($settingId) && is_numeric($settingId)) {
$deleteIfEmpty = isset($_REQUEST['del']) ? $_REQUEST['del'] : '';
$value = $_REQUEST['value'];
// Getting the local setting record.
$setting = api_get_settings_params_simple(['id = ?' => $settingId]);
if (empty($setting)) {
return 0;
}
$params = [
'access_url_changeable' => $setting['access_url_changeable'],
'title' => $setting['title'],
'variable' => $setting['variable'],
'subkey' => $setting['subkey'],
'category' => $setting['category'],
'type' => $setting['type'],
'comment' => $setting['comment'],
'access_url' => $setting['access_url'],
];
$errors = '';
foreach ($vchamilos as $instance) {
$table = 'settings_current';
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = [
'dbname' => $instance['main_database'],
'user' => $instance['db_user'],
'password' => $instance['db_password'],
'host' => $instance['db_host'],
'driver' => 'pdo_mysql',
];
$connection = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
try {
$variable = $setting['variable'];
$subKey = $setting['subkey'];
$category = $setting['category'];
$accessUrl = $setting['access_url'];
if ($deleteIfEmpty && empty($value)) {
$sql = "DELETE FROM $table
WHERE
selected_value = '$value' AND
variable = '$variable' AND
access_url = '$accessUrl'
";
$connection->executeQuery($sql);
$case = 'delete';
} else {
$sql = "SELECT * FROM $table
WHERE
variable = '$variable' AND
access_url = '$accessUrl'
";
$result = $connection->fetchAll($sql);
if (!empty($result)) {
//$sql = "UPDATE $table SET selected_value = '$value' WHERE id = $settingId";
$sql = "UPDATE $table SET selected_value = '$value' WHERE variable = '$variable'";
if (!empty($subKey)) {
$sql .= " AND subkey = '$subKey' ";
}
if (!empty($category)) {
$sql .= " AND category = '$category'";
}
$connection->executeQuery($sql);
} else {
$connection->insert($table, $params);
}
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
return $errors;
} else {
return "Bad ID. Non numeric";
}
break;
}
return 0;