chamilo /
chamilo-lms
| 1 | <?php |
||
| 2 | |||
| 3 | /* For licensing terms, see /license.txt */ |
||
| 4 | |||
| 5 | use Chamilo\CoreBundle\Entity\Sequence; |
||
| 6 | use Chamilo\CoreBundle\Entity\SequenceResource; |
||
| 7 | use ChamiloSession as Session; |
||
| 8 | use Symfony\Component\HttpFoundation\Request as HttpRequest; |
||
|
0 ignored issues
–
show
|
|||
| 9 | |||
| 10 | $cidReset = true; |
||
| 11 | |||
| 12 | require_once __DIR__.'/../inc/global.inc.php'; |
||
| 13 | |||
| 14 | api_protect_global_admin_script(); |
||
| 15 | |||
| 16 | Session::erase('sr_vertex'); |
||
| 17 | |||
| 18 | $httpRequest = HttpRequest::createFromGlobals(); |
||
| 19 | |||
| 20 | // setting breadcrumbs |
||
| 21 | $interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')]; |
||
| 22 | |||
| 23 | $type = $httpRequest->query->has('type') |
||
| 24 | ? $httpRequest->query->getInt('type', SequenceResource::SESSION_TYPE) |
||
| 25 | : $httpRequest->request->getInt('type', SequenceResource::SESSION_TYPE); |
||
| 26 | |||
| 27 | $tpl = new Template(get_lang('ResourcesSequencing')); |
||
| 28 | $em = Database::getManager(); |
||
| 29 | $sequenceRepository = $em->getRepository('ChamiloCoreBundle:Sequence'); |
||
| 30 | |||
| 31 | $currentUrl = api_get_self().'?type='.$type; |
||
| 32 | |||
| 33 | $formSequence = new FormValidator('sequence_form', 'post', $currentUrl, null, null, FormValidator::LAYOUT_INLINE); |
||
| 34 | $formSequence->addText('name', get_lang('Sequence'), true, ['cols-size' => [3, 8, 1]]); |
||
| 35 | $formSequence->applyFilter('name', 'html_filter'); |
||
| 36 | $formSequence->addButtonCreate(get_lang('AddSequence'), 'submit_sequence', false, ['cols-size' => [3, 8, 1]]); |
||
| 37 | |||
| 38 | $em = Database::getManager(); |
||
| 39 | |||
| 40 | // Add sequence |
||
| 41 | if ($formSequence->validate()) { |
||
| 42 | $values = $formSequence->exportValues(); |
||
| 43 | $sequence = new Sequence(); |
||
| 44 | $sequence->setName($values['name']); |
||
| 45 | $em->persist($sequence); |
||
| 46 | $em->flush(); |
||
| 47 | Display::addFlash(Display::return_message(get_lang('Saved'))); |
||
| 48 | header('Location: '.$currentUrl); |
||
| 49 | exit; |
||
| 50 | } |
||
| 51 | |||
| 52 | $selectSequence = new FormValidator('frm_select_delete', 'post', $currentUrl); |
||
| 53 | $sequenceList = $sequenceRepository->findAllToSelect($type); |
||
| 54 | |||
| 55 | $sequenceElement = $selectSequence->addSelect( |
||
| 56 | 'sequence', |
||
| 57 | get_lang('Sequence'), |
||
| 58 | $sequenceList, |
||
| 59 | ['id' => 'sequence_id', 'cols-size' => [3, 7, 2], 'disabled' => 'disabled'] |
||
| 60 | ); |
||
| 61 | |||
| 62 | if (!empty($sequenceList)) { |
||
| 63 | $selectSequence->addButtonDelete(get_lang('Delete')); |
||
| 64 | $sequenceElement->removeAttribute('disabled'); |
||
| 65 | } |
||
| 66 | |||
| 67 | if ($selectSequence->validate()) { |
||
| 68 | $values = $selectSequence->exportValues(); |
||
| 69 | $sequenceRepository->removeSequence($values['sequence']); |
||
| 70 | |||
| 71 | Display::addFlash( |
||
| 72 | Display::return_message(get_lang('Deleted'), 'success') |
||
| 73 | ); |
||
| 74 | |||
| 75 | header('Location: '.$currentUrl); |
||
| 76 | exit; |
||
| 77 | } |
||
| 78 | |||
| 79 | $list = $sequenceRepository->getItems($type); |
||
| 80 | |||
| 81 | switch ($type) { |
||
| 82 | case SequenceResource::COURSE_TYPE: |
||
| 83 | $label = get_lang('Courses'); |
||
| 84 | break; |
||
| 85 | case SequenceResource::SESSION_TYPE: |
||
| 86 | $label = get_lang('Sessions'); |
||
| 87 | break; |
||
| 88 | } |
||
| 89 | |||
| 90 | $form = new FormValidator(''); |
||
| 91 | $form->addHtml("<div class='col-md-6'>"); |
||
| 92 | $form->addHidden('sequence_type', $type); |
||
| 93 | $form->addSelect( |
||
| 94 | 'sessions', |
||
| 95 | $label, |
||
| 96 | $list, |
||
| 97 | ['id' => 'item', 'cols-size' => [4, 7, 1], 'disabled' => 'disabled'] |
||
| 98 | ); |
||
| 99 | $form->addButtonNext( |
||
| 100 | get_lang('UseAsReference'), |
||
| 101 | 'use_as_reference', |
||
| 102 | ['cols-size' => [4, 7, 1], 'disabled' => 'disabled'] |
||
| 103 | ); |
||
| 104 | $form->addHtml("</div>"); |
||
| 105 | $form->addHtml("<div class='col-md-6'>"); |
||
| 106 | $form->addSelect( |
||
| 107 | 'requirements', |
||
| 108 | get_lang('Requirements'), |
||
| 109 | $list, |
||
| 110 | ['id' => 'requirements', 'cols-size' => [3, 7, 2], 'disabled' => 'disabled'] |
||
| 111 | ); |
||
| 112 | |||
| 113 | $form->addButtonCreate( |
||
| 114 | get_lang('SetAsRequirement'), |
||
| 115 | 'set_requirement', |
||
| 116 | false, |
||
| 117 | ['cols-size' => [3, 7, 2], 'disabled' => 'disabled'] |
||
| 118 | ); |
||
| 119 | $form->addHtml('</div>'); |
||
| 120 | |||
| 121 | $formSave = new FormValidator(''); |
||
| 122 | $formSave->addButton( |
||
| 123 | 'save_resource', |
||
| 124 | get_lang('SaveSettings'), |
||
| 125 | 'floppy-o', |
||
| 126 | 'success', |
||
| 127 | null, |
||
| 128 | null, |
||
| 129 | ['cols-size' => [1, 10, 1], 'disabled' => 'disabled'] |
||
| 130 | ); |
||
| 131 | |||
| 132 | $headers[] = [ |
||
| 133 | 'url' => api_get_self().'?type='.SequenceResource::SESSION_TYPE, |
||
| 134 | 'content' => get_lang('Sessions'), |
||
| 135 | ]; |
||
| 136 | |||
| 137 | $headers[] = [ |
||
| 138 | 'url' => api_get_self().'?type='.SequenceResource::COURSE_TYPE, |
||
| 139 | 'content' => get_lang('Courses'), |
||
| 140 | ]; |
||
| 141 | |||
| 142 | $tabs = Display::tabsOnlyLink($headers, $type === SequenceResource::COURSE_TYPE ? 2 : 1); |
||
| 143 | |||
| 144 | $tpl->assign('create_sequence', $formSequence->returnForm()); |
||
| 145 | $tpl->assign('select_sequence', $selectSequence->returnForm()); |
||
| 146 | $tpl->assign('configure_sequence', $form->returnForm()); |
||
| 147 | $tpl->assign('save_sequence', $formSave->returnForm()); |
||
| 148 | $tpl->assign('sequence_type', $type); |
||
| 149 | $tpl->assign('tabs', $tabs); |
||
| 150 | $layout = $tpl->get_template('admin/resource_sequence.tpl'); |
||
| 151 | $tpl->display($layout); |
||
| 152 |
Let?s assume that you have a directory layout like this:
. |-- OtherDir | |-- Bar.php | `-- Foo.php `-- SomeDir `-- Foo.phpand let?s assume the following content of
Bar.php:If both files
OtherDir/Foo.phpandSomeDir/Foo.phpare loaded in the same runtime, you will see a PHP error such as the following:PHP Fatal error: Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.phpHowever, as
OtherDir/Foo.phpdoes not necessarily have to be loaded and the error is only triggered if it is loaded beforeOtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias: