commit
333910eabc
@ -0,0 +1,41 @@ |
|||||||
|
import baseService from "./baseService" |
||||||
|
|
||||||
|
const url = "/api/color_themes" |
||||||
|
|
||||||
|
/** |
||||||
|
* Gets the color themes |
||||||
|
* |
||||||
|
* @returns {Promise<Array>} |
||||||
|
*/ |
||||||
|
async function getThemes() { |
||||||
|
const { items } = await baseService.getCollection(url) |
||||||
|
|
||||||
|
return items |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Update or create a theme with the title |
||||||
|
* |
||||||
|
* @param {string|null} iri |
||||||
|
* @param {string} title |
||||||
|
* @param {Object} colors |
||||||
|
* @returns {Promise<Object>} |
||||||
|
*/ |
||||||
|
async function updateTheme({ iri = null, title, colors }) { |
||||||
|
if (iri) { |
||||||
|
return await baseService.put(iri, { |
||||||
|
title, |
||||||
|
variables: colors, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
return await baseService.post(url, { |
||||||
|
title, |
||||||
|
variables: colors, |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export default { |
||||||
|
getThemes, |
||||||
|
updateTheme, |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
<?php |
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
require_once __DIR__.'/../inc/global.inc.php'; |
||||||
|
|
||||||
|
api_protect_admin_script(); |
||||||
|
|
||||||
|
//Adds the JS needed to use the jqgrid |
||||||
|
$htmlHeadXtra[] = api_get_jqgrid_js(); |
||||||
|
|
||||||
|
$action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : 'list'; |
||||||
|
$check = Security::check_token('request'); |
||||||
|
$token = Security::get_token(); |
||||||
|
$id = !empty($_REQUEST['id']) ? $_REQUEST['id'] : 0; |
||||||
|
|
||||||
|
$mailTemplate = new MailTemplateManager(); |
||||||
|
$content = ''; |
||||||
|
|
||||||
|
switch ($action) { |
||||||
|
case 'add': |
||||||
|
$url = api_get_self().'?action='.Security::remove_XSS($_GET['action']); |
||||||
|
$form = $mailTemplate->returnForm($url, 'add'); |
||||||
|
|
||||||
|
// The validation or display |
||||||
|
if ($form->validate()) { |
||||||
|
if ($check) { |
||||||
|
$values = $form->exportValues(); |
||||||
|
$values['template'] = $values['email_template']; |
||||||
|
$values['author_id'] = api_get_user_id(); |
||||||
|
$values['url_id'] = api_get_current_access_url_id(); |
||||||
|
|
||||||
|
var_dump($values); |
||||||
|
|
||||||
|
$res = $mailTemplate->save($values); |
||||||
|
if ($res) { |
||||||
|
Display::addFlash(Display::return_message(get_lang('ItemAdded'), 'confirm')); |
||||||
|
} |
||||||
|
} |
||||||
|
header('Location: '.api_get_self()); |
||||||
|
exit; |
||||||
|
} else { |
||||||
|
$content .= '<div class="actions">'; |
||||||
|
$content .= Display::url( |
||||||
|
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM), |
||||||
|
api_get_self() |
||||||
|
); |
||||||
|
$content .= '</div>'; |
||||||
|
$form->addElement('hidden', 'sec_token'); |
||||||
|
$form->setConstants(['sec_token' => $token]); |
||||||
|
$content .= $form->returnForm(); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'edit': |
||||||
|
$url = api_get_self().'?action='.Security::remove_XSS($_GET['action']).'&id='.$id; |
||||||
|
$form = $mailTemplate->returnForm($url, 'edit'); |
||||||
|
|
||||||
|
$content .= '<div class="actions">'; |
||||||
|
$content .= Display::url( |
||||||
|
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM), |
||||||
|
api_get_self() |
||||||
|
); |
||||||
|
$content .= '</div>'; |
||||||
|
$content .= $form->returnForm(); |
||||||
|
|
||||||
|
// The validation or display |
||||||
|
if ($form->validate()) { |
||||||
|
//if ($check) { |
||||||
|
$values = $form->exportValues(); |
||||||
|
$values['template'] = $values['email_template']; |
||||||
|
$res = $mailTemplate->update($values); |
||||||
|
if ($res) { |
||||||
|
Display::addFlash( |
||||||
|
Display::return_message(get_lang('ItemUpdated').': '.$values['title'], 'confirm') |
||||||
|
); |
||||||
|
} |
||||||
|
//} |
||||||
|
header('Location: '.api_get_self()); |
||||||
|
exit; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'delete': |
||||||
|
$mailTemplate->delete($id); |
||||||
|
Display::addFlash( |
||||||
|
Display::return_message(get_lang('Deleted'), 'confirm') |
||||||
|
); |
||||||
|
header('Location: '.api_get_self()); |
||||||
|
exit; |
||||||
|
break; |
||||||
|
case 'set_default': |
||||||
|
$mailTemplate->setDefault($id); |
||||||
|
Display::addFlash( |
||||||
|
Display::return_message(get_lang('Updated'), 'confirm') |
||||||
|
); |
||||||
|
header('Location: '.api_get_self()); |
||||||
|
break; |
||||||
|
case 'list': |
||||||
|
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_mail_template'; |
||||||
|
$columns = [ |
||||||
|
get_lang('Name'), |
||||||
|
get_lang('Type'), |
||||||
|
get_lang('Default'), |
||||||
|
get_lang('Actions'), |
||||||
|
]; |
||||||
|
$column_model = [ |
||||||
|
[ |
||||||
|
'name' => 'name', |
||||||
|
'index' => 'name', |
||||||
|
'width' => '380px', |
||||||
|
'align' => 'left', |
||||||
|
], |
||||||
|
[ |
||||||
|
'name' => 'type', |
||||||
|
'index' => 'type', |
||||||
|
'width' => '150px', |
||||||
|
'align' => 'left', |
||||||
|
], |
||||||
|
[ |
||||||
|
'name' => 'default_template', |
||||||
|
'index' => 'default_template', |
||||||
|
'width' => '200px', |
||||||
|
'align' => 'left', |
||||||
|
'hidden' => 'true', |
||||||
|
], |
||||||
|
[ |
||||||
|
'name' => 'actions', |
||||||
|
'index' => 'actions', |
||||||
|
'width' => '300px', |
||||||
|
'align' => 'left', |
||||||
|
'formatter' => 'action_formatter', |
||||||
|
'sortable' => 'false', |
||||||
|
], |
||||||
|
]; |
||||||
|
$extra_params['autowidth'] = 'true'; //use the width of the parent |
||||||
|
$extra_params['height'] = 'auto'; //use the width of the parent |
||||||
|
|
||||||
|
//With this function we can add actions to the jgrid |
||||||
|
$action_links = 'function action_formatter (cellvalue, options, rowObject) { |
||||||
|
|
||||||
|
var defaultIcon = "<i class=\"mdi mdi-circle-outline mdi-24px\"></i>"; |
||||||
|
if (rowObject[2] == 1) { |
||||||
|
defaultIcon = "<i class=\"mdi mdi-check-circle mdi-24px\"></i>"; |
||||||
|
} |
||||||
|
return \' <a href="?action=edit&id=\'+options.rowId+\'"><i class=\"mdi mdi-pencil mdi-24px\"></i></a>'. |
||||||
|
' <a href="?action=set_default&id=\'+options.rowId+\'" title=\"'.get_lang('Default').'\">\'+ defaultIcon + \'</a>'. |
||||||
|
' <a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."\'".')) return false;" href="?sec_token='.$token.'&action=delete&id=\'+options.rowId+\'"><i class=\"mdi mdi-delete mdi-24px\"></i></a> \'; |
||||||
|
}'; |
||||||
|
|
||||||
|
$content = $mailTemplate->display(); |
||||||
|
$content .= ' |
||||||
|
<script> |
||||||
|
$(function() { |
||||||
|
'.Display::grid_js('mail_template', $url, $columns, $column_model, $extra_params, [], $action_links, true).' |
||||||
|
}); |
||||||
|
</script>'; |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
$template = new Template(); |
||||||
|
$template->assign('content', $content); |
||||||
|
$template->display_one_col_template(); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,49 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
||||||
|
|
||||||
|
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; |
||||||
|
use Chamilo\CoreBundle\DataFixtures\ExtraFieldFixtures; |
||||||
|
use Doctrine\DBAL\Schema\Schema; |
||||||
|
|
||||||
|
class Version20240416110300 extends AbstractMigrationChamilo |
||||||
|
{ |
||||||
|
public function getDescription(): string |
||||||
|
{ |
||||||
|
return 'Adds missing extra fields to the database based on the predefined list'; |
||||||
|
} |
||||||
|
|
||||||
|
public function up(Schema $schema): void |
||||||
|
{ |
||||||
|
$extraFields = ExtraFieldFixtures::getExtraFields(); |
||||||
|
|
||||||
|
foreach ($extraFields as $field) { |
||||||
|
$count = $this->connection->executeQuery( |
||||||
|
"SELECT COUNT(*) FROM extra_field WHERE variable = :variable AND item_type = :item_type", |
||||||
|
[ |
||||||
|
'variable' => $field['variable'], |
||||||
|
'item_type' => $field['item_type'], |
||||||
|
] |
||||||
|
)->fetchOne(); |
||||||
|
|
||||||
|
if ($count == 0) { |
||||||
|
$this->connection->insert('extra_field', [ |
||||||
|
'item_type' => $field['item_type'], |
||||||
|
'value_type' => $field['value_type'], |
||||||
|
'variable' => $field['variable'], |
||||||
|
'display_text' => $field['display_text'], |
||||||
|
'visible_to_self' => $field['visible_to_self'] ? 1 : 0, |
||||||
|
'changeable' => $field['changeable'] ? 1 : 0, |
||||||
|
'filter' => 1, |
||||||
|
'created_at' => (new \DateTime())->format('Y-m-d H:i:s'), |
||||||
|
]); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function down(Schema $schema): void {} |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
declare(strict_types=1); |
||||||
|
|
||||||
|
/* For licensing terms, see /license.txt */ |
||||||
|
|
||||||
|
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
||||||
|
|
||||||
|
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; |
||||||
|
use Doctrine\DBAL\Schema\Schema; |
||||||
|
|
||||||
|
class Version20240416132900 extends AbstractMigrationChamilo |
||||||
|
{ |
||||||
|
public function getDescription(): string |
||||||
|
{ |
||||||
|
return 'Update mail_template table structure, adding author_id, changing url_id and removing old fields'; |
||||||
|
} |
||||||
|
|
||||||
|
public function up(Schema $schema): void |
||||||
|
{ |
||||||
|
if ($schema->hasTable('mail_template')) { |
||||||
|
// Adding author_id and setting the foreign key |
||||||
|
$this->addSql('ALTER TABLE mail_template ADD author_id INT DEFAULT NULL'); |
||||||
|
$this->addSql('ALTER TABLE mail_template ADD CONSTRAINT FK_4AB7DECBF675F31B FOREIGN KEY (author_id) REFERENCES user (id) ON DELETE SET NULL'); |
||||||
|
$this->addSql('CREATE INDEX IDX_4AB7DECBF675F31B ON mail_template (author_id)'); |
||||||
|
|
||||||
|
// Updating result_id to url_id and adjusting foreign key |
||||||
|
$this->addSql('ALTER TABLE mail_template CHANGE result_id url_id INT NOT NULL'); |
||||||
|
$this->addSql('ALTER TABLE mail_template ADD CONSTRAINT FK_4AB7DECB81CFDAE7 FOREIGN KEY (url_id) REFERENCES access_url (id) ON DELETE CASCADE'); |
||||||
|
$this->addSql('CREATE INDEX IDX_4AB7DECB81CFDAE7 ON mail_template (url_id)'); |
||||||
|
|
||||||
|
// Dropping unused column 'score' |
||||||
|
$this->addSql('ALTER TABLE mail_template DROP score'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function down(Schema $schema): void |
||||||
|
{ |
||||||
|
if ($schema->hasTable('mail_template')) { |
||||||
|
// Reverting changes |
||||||
|
$this->addSql('ALTER TABLE mail_template DROP FOREIGN KEY FK_4AB7DECBF675F31B'); |
||||||
|
$this->addSql('ALTER TABLE mail_template DROP author_id'); |
||||||
|
$this->addSql('DROP INDEX IDX_4AB7DECBF675F31B ON mail_template'); |
||||||
|
|
||||||
|
$this->addSql('ALTER TABLE mail_template DROP FOREIGN KEY FK_4AB7DECB81CFDAE7'); |
||||||
|
$this->addSql('ALTER TABLE mail_template CHANGE url_id result_id INT NOT NULL'); |
||||||
|
$this->addSql('DROP INDEX IDX_4AB7DECB81CFDAE7 ON mail_template'); |
||||||
|
|
||||||
|
$this->addSql('ALTER TABLE mail_template ADD score FLOAT NULL DEFAULT NULL'); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue