upgrade
This commit is contained in:
259
plugin/toplinks/admin.php
Normal file
259
plugin/toplinks/admin.php
Normal file
@@ -0,0 +1,259 @@
|
||||
<?php
|
||||
|
||||
/* For license terms, see /license.txt */
|
||||
|
||||
use Chamilo\CoreBundle\Entity\Course as CourseEntity;
|
||||
use Chamilo\PluginBundle\Entity\TopLinks\TopLink;
|
||||
use Chamilo\PluginBundle\Entity\TopLinks\TopLinkRelTool;
|
||||
use Chamilo\PluginBundle\TopLinks\Form\LinkForm as TopLinkForm;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
|
||||
$cidReset = true;
|
||||
|
||||
require_once __DIR__.'/../../main/inc/global.inc.php';
|
||||
|
||||
api_protect_admin_script();
|
||||
|
||||
$plugin = TopLinksPlugin::create();
|
||||
$httpRequest = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
|
||||
|
||||
$pageBaseUrl = api_get_self();
|
||||
$em = Database::getManager();
|
||||
$linkRepo = $em->getRepository(TopLink::class);
|
||||
|
||||
$pageTitle = $plugin->get_title();
|
||||
$pageActions = Display::url(
|
||||
Display::return_icon('back.png', get_lang('Back'), [], ICON_SIZE_MEDIUM),
|
||||
$pageBaseUrl
|
||||
);
|
||||
$pageContent = '';
|
||||
|
||||
$interbreadcrumb[] = [
|
||||
'name' => get_lang('Administration'),
|
||||
'url' => api_get_path(WEB_CODE_PATH).'admin/index.php',
|
||||
];
|
||||
$interbreadcrumb[] = ['name' => $plugin->get_title(), 'url' => $pageBaseUrl];
|
||||
|
||||
switch ($httpRequest->query->getAlpha('action', 'list')) {
|
||||
case 'list':
|
||||
default:
|
||||
array_pop($interbreadcrumb); // Only show link to administration in breadcrumb
|
||||
|
||||
$pageActions = Display::url(
|
||||
Display::return_icon('add.png', get_lang('AddLink'), [], ICON_SIZE_MEDIUM),
|
||||
"$pageBaseUrl?".http_build_query(['action' => 'add'])
|
||||
);
|
||||
|
||||
$table = new SortableTable(
|
||||
'toplinks',
|
||||
function () use ($linkRepo) {
|
||||
return $linkRepo->count([]);
|
||||
},
|
||||
function ($offset, $limit, $column, $direction) use ($linkRepo) {
|
||||
$links = $linkRepo->all($offset, $limit, $column, $direction);
|
||||
|
||||
return array_map(
|
||||
function (TopLink $link) {
|
||||
return [
|
||||
[$link->getTitle(), $link->getUrl()],
|
||||
$link->getId(),
|
||||
];
|
||||
},
|
||||
$links
|
||||
);
|
||||
},
|
||||
0
|
||||
);
|
||||
$table->set_header(0, get_lang('LinkName'));
|
||||
$table->set_header(1, get_lang('Actions'), false, ['class' => 'th-head text-right'], ['class' => 'text-right']);
|
||||
$table->set_column_filter(
|
||||
0,
|
||||
function (array $params) {
|
||||
[$title, $url] = $params;
|
||||
|
||||
return "$title<br>".Display::url($url, $url);
|
||||
}
|
||||
);
|
||||
$table->set_column_filter(
|
||||
1,
|
||||
function (int $id) use ($pageBaseUrl, $em, $plugin) {
|
||||
$missingCourses = $em->getRepository(TopLinkRelTool::class)->getMissingCoursesForTool($id);
|
||||
$countMissingCourses = count($missingCourses);
|
||||
|
||||
$actions = [];
|
||||
$actions[] = Display::url(
|
||||
Display::return_icon('edit.png', get_lang('Edit')),
|
||||
"$pageBaseUrl?".http_build_query(['action' => 'edit', 'link' => $id])
|
||||
);
|
||||
|
||||
if (count($missingCourses) > 0) {
|
||||
$actions[] = Display::url(
|
||||
Display::return_icon(
|
||||
'view_tree.png',
|
||||
sprintf($plugin->get_lang('ReplicateInXMissingCourses'), $countMissingCourses)
|
||||
),
|
||||
"$pageBaseUrl?".http_build_query(['action' => 'replicate', 'link' => $id])
|
||||
);
|
||||
} else {
|
||||
$actions[] = Display::return_icon(
|
||||
'view_tree_na.png',
|
||||
$plugin->get_lang('AlreadyReplicatedInAllCourses')
|
||||
);
|
||||
}
|
||||
|
||||
$actions[] = Display::url(
|
||||
Display::return_icon('delete.png', get_lang('Delete')),
|
||||
"$pageBaseUrl?".http_build_query(['action' => 'delete', 'link' => $id])
|
||||
);
|
||||
|
||||
return implode(PHP_EOL, $actions);
|
||||
}
|
||||
);
|
||||
|
||||
if ($table->total_number_of_items) {
|
||||
$pageContent = $table->return_table();
|
||||
} else {
|
||||
$pageContent = Display::return_message(
|
||||
get_lang('NoData'),
|
||||
'info'
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'add':
|
||||
$pageTitle = get_lang('LinkAdd');
|
||||
|
||||
$form = new TopLinkForm();
|
||||
$form->createElements();
|
||||
|
||||
if ($form->validate()) {
|
||||
$values = $form->exportValues();
|
||||
|
||||
$link = new TopLink();
|
||||
$link
|
||||
->setTitle($values['title'])
|
||||
->setUrl($values['url'])
|
||||
->setTarget($values['target']);
|
||||
|
||||
$em->persist($link);
|
||||
$em->flush();
|
||||
|
||||
$iconPath = $form
|
||||
->setLink($link)
|
||||
->saveImage();
|
||||
|
||||
$link->setIcon($iconPath);
|
||||
|
||||
$em->flush();
|
||||
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('LinkAdded'), 'success')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
$pageContent = $form->returnForm();
|
||||
break;
|
||||
case 'edit':
|
||||
$pageTitle = get_lang('LinkMod');
|
||||
|
||||
$link = $em->find(TopLink::class, $httpRequest->query->getInt('link'));
|
||||
|
||||
if (null === $link) {
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('NotFound'), 'error')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
$form = new TopLinkForm($link);
|
||||
$form->createElements();
|
||||
|
||||
if ($form->validate()) {
|
||||
$values = $form->exportValues();
|
||||
|
||||
$iconPath = $form->saveImage();
|
||||
|
||||
$link
|
||||
->setTitle($values['title'])
|
||||
->setUrl($values['url'])
|
||||
->setIcon($iconPath)
|
||||
->setTarget($values['target']);
|
||||
|
||||
$em->flush();
|
||||
|
||||
$em->getRepository(TopLinkRelTool::class)->updateTools($link);
|
||||
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('LinkModded'), 'success')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
$pageContent = $form->returnForm();
|
||||
break;
|
||||
case 'delete':
|
||||
$link = $em->find(TopLink::class, $httpRequest->query->getInt('link'));
|
||||
|
||||
if (null === $link) {
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('NotFound'), 'error')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($link->getIcon()) {
|
||||
$fullIconPath = api_get_path(SYS_UPLOAD_PATH).'plugins/toplinks/'.$link->getIcon();
|
||||
|
||||
$fs = new Filesystem();
|
||||
$fs->remove($fullIconPath);
|
||||
}
|
||||
|
||||
$em->remove($link);
|
||||
$em->flush();
|
||||
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('LinkDeleted'), 'success')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
case 'replicate':
|
||||
$link = $em->find(TopLink::class, $httpRequest->query->getInt('link'));
|
||||
|
||||
if (null === $link) {
|
||||
Display::addFlash(
|
||||
Display::return_message(get_lang('NotFound'), 'error')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
$missingCourses = $em->getRepository(TopLinkRelTool::class)->getMissingCoursesForTool($link->getId());
|
||||
|
||||
/** @var CourseEntity $missingCourse */
|
||||
foreach ($missingCourses as $missingCourse) {
|
||||
$plugin->addToolInCourse($missingCourse->getId(), $link);
|
||||
}
|
||||
|
||||
Display::addFlash(
|
||||
Display::return_message($plugin->get_lang('LinkReplicated'), 'success')
|
||||
);
|
||||
|
||||
header("Location: $pageBaseUrl");
|
||||
exit;
|
||||
}
|
||||
|
||||
$view = new Template($plugin->get_title());
|
||||
$view->assign('header', $pageTitle);
|
||||
$view->assign('actions', Display::toolbarAction('xapi_actions', [$pageActions]));
|
||||
$view->assign('content', $pageContent);
|
||||
$view->display_one_col_template();
|
||||
Reference in New Issue
Block a user