chamilo/chamilo-lms

View on GitHub
public/main/lp/lp_add_author.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

/* For licensing terms, see /license.txt */

use ChamiloSession as Session;

/**
 * This is a learning path editor author.
 *
 * @author Carlos Alvarado
 * @author Yannick Warnier <ywarnier@beeznest.org> - cleaning and update
 * @author Julio Montoya  - Improving the list of templates
 */
$this_section = SECTION_COURSES;

api_protect_course_script();
api_protect_admin_script(true);

$isStudentView = isset($_REQUEST['isStudentView']) ? $_REQUEST['isStudentView'] : null;
$lpId = isset($_REQUEST['lp_id']) ? (int) $_REQUEST['lp_id'] : 0;
$submit = isset($_POST['submit_button']) ? $_POST['submit_button'] : null;
$type = isset($_GET['type']) ? $_GET['type'] : null;
$action = isset($_GET['action']) ? $_GET['action'] : null;
$is_allowed_to_edit = api_is_allowed_to_edit(null, false);

$listUrl = api_get_path(WEB_CODE_PATH).
    'lp/lp_controller.php?action=view&lp_id='.$lpId.'&'.api_get_cidreq().'&isStudentView=true';
if (!$is_allowed_to_edit) {
    header("Location: $listUrl");
    exit;
}

/** @var learnpath $learnPath */
$learnPath = Session::read('oLP');

if (empty($learnPath)) {
    api_not_allowed();
}

if ($learnPath->get_lp_session_id() != api_get_session_id()) {
    // You cannot edit an LP from a base course.
    header("Location: $listUrl");
    exit;
}

if (api_is_in_gradebook()) {
    $interbreadcrumb[] = [
        'url' => Category::getUrl(),
        'name' => get_lang('ToolGradebook'),
    ];
}

$htmlHeadXtra[] = api_get_jquery_libraries_js(['jquery-ui', 'jquery-upload']);
$interbreadcrumb[] = [
    'url' => 'lp_controller.php?action=list&'.api_get_cidreq(),
    'name' => get_lang('LearningPaths'),
];
$interbreadcrumb[] = [
    'url' => api_get_self()."?action=build&lp_id=$lpId&".api_get_cidreq(),
    'name' => $learnPath->getNameNoTags(),
];

switch ($type) {
    case 'dir':
        $interbreadcrumb[] = [
            'url' => 'lp_controller.php?action=add_item&type=step&lp_id='.$learnPath->get_id().'&'.api_get_cidreq(),
            'name' => get_lang('NewStep'),
        ];
        $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('NewChapter')];
        break;
    case 'document':
        $interbreadcrumb[] = [
            'url' => 'lp_controller.php?action=add_item&type=step&lp_id='.$learnPath->get_id().'&'.api_get_cidreq(),
            'name' => get_lang('NewStep'),
        ];
        break;
    default:
        $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('NewStep')];
        break;
}

if ('add_item' === $action && 'document' === $type) {
    $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('NewDocumentCreated')];
}

// Theme calls.
$show_learn_path = true;
$lp_theme_css = $learnPath->get_theme();

$extraField = [];
$form = new FormValidator(
    'configure_homepage_'.$action,
    'post',
    api_get_path(WEB_CODE_PATH).'lp/lp_controller.php?'.api_get_cidreq().'&action=author_view&sub_action=author_view',
    '',
    ['style' => 'margin: 0px;']
);
$extraField['backTo'] = api_get_self().'?action=add_item&type=step&lp_id='.$lpId.'&'.api_get_cidreq();
$form->addHtml('<div id="doc_form" class="col-md-12 row">');
$extraFieldValue = new ExtraFieldValue('lp_item');
$form->addHeader(get_lang('LpByAuthor'));
$default = [];
$form->addHtml('<div class="col-xs-12 row" >');
$defaultAuthor = [];
foreach ($_SESSION['oLP']->items as $item) {
    $itemName = $item->name;
    $itemId = $item->iId;
    $extraFieldValues = $extraFieldValue->get_values_by_handler_and_field_variable($itemId, 'authorlpitem');
    $priceItem = $extraFieldValue->get_values_by_handler_and_field_variable($itemId, 'price');
    $authorName = [];
    if (!empty($extraFieldValues)) {
        if (false != $extraFieldValues) {
            $authors = explode(';', $extraFieldValues['value']);
            if (!empty($authors)) {
                foreach ($authors as $author) {
                    if (0 != $author) {
                        $defaultAuthor[$author] = $author;
                        $teacher = api_get_user_info($author);
                        $authorName[] = $teacher['complete_name'];
                    }
                }
            }
        }
    }
    if (0 != count($authorName)) {
        $authorName = " (".implode(', ', $authorName).")";
    } else {
        $authorName = '';
    }
    if (isset($priceItem['value']) && !empty($priceItem['value'])) {
        $authorName .= "<br /><small>".get_lang('Price')." (".$priceItem['value'].")</small>";
    }
    $form->addCheckBox(
        "itemSelected[$itemId]",
        null,
        Display::getMdiIcon('bookshelf', 'ch-tool-icon', null, 22, get_lang('Document')).$itemName.$authorName
    );
    $default['itemSelected'][$itemId] = false;
}

$options = [0 => get_lang('RemoveSelected')];
$default['authorItemSelect'] = [];
$form->addHtml('</div>');
$teachers = [];
$field = new ExtraField('user');
$authorLp = $field->get_handler_field_info_by_field_variable('authorlp');
$extraFieldId = isset($authorLp['id']) ? (int) $authorLp['id'] : 0;
if (0 != $extraFieldId) {
    $extraFieldValueUser = new ExtraFieldValue('user');
    $arrayExtraFieldValueUser = $extraFieldValueUser->get_item_id_from_field_variable_and_field_value(
        'authorlp',
        1,
        true,
        false,
        true
    );

    if (!empty($arrayExtraFieldValueUser)) {
        foreach ($arrayExtraFieldValueUser as $item) {
            $teacher = api_get_user_info($item['item_id']);
            $teachers[] = $teacher;
        }
    }
}

foreach ($teachers as $key => $value) {
    $authorId = $value['id'];
    $authorName = $value['complete_name'];
    if (!empty($authorName)) {
        $options[$authorId] = $authorName;
    }
}

$form->addSelect('authorItemSelect', get_lang('Authors'), $options, ['multiple' => 'multiple']);
$form->addNumeric('price', get_lang('Price'));
$form->addHtml('</div>');
$form->addButtonCreate(get_lang('Send'));
$form->setDefaults($default);

if ($form->validate()) {
    if (isset($_GET['sub_action']) && ('author_view' === $_GET['sub_action'])) {
        $authors = isset($_POST['authorItemSelect']) ? $_POST['authorItemSelect'] : [];
        $items = isset($_POST['itemSelected']) ? $_POST['itemSelected'] : [];
        $price = api_float_val($_POST['price']);
        unset($author);
        $saveExtraFieldItem = [];
        $saveAuthor = [];
        $removeExist = 0;
        foreach ($_SESSION['oLP']->items as $item) {
            $itemName = $item->name;
            $itemId = $item->iId;
            if (isset($items[$itemId])) {
                foreach ($authors as $author) {
                    if (0 == $author || 1 == $removeExist) {
                        $saveExtraFieldItem[$itemId][0] = 0;
                        $removeExist = 1;
                    } else {
                        $saveExtraFieldItem[$itemId][$author] = $author;
                    }
                }
                if ($price > 0) {
                    $extraFieldValues = $extraFieldValue->get_values_by_handler_and_field_variable(
                        $itemId,
                        'price'
                    );
                    $extraFieldValue->save([
                        'variable' => 'price',
                        'value' => $price,
                        'item_id' => $itemId,
                    ]);
                }
            }
        }

        if (count($saveExtraFieldItem) > 0 || $price > 0) {
            $lastEdited = [];
            foreach ($saveExtraFieldItem as $saveItemId => $values) {
                $extraFieldValues = $extraFieldValue->get_values_by_handler_and_field_variable(
                    $saveItemId,
                    'authorlpitem'
                );
                $extraFieldValue->save([
                    'variable' => 'authorlpitem',
                    'value' => $values,
                    'item_id' => $saveItemId,
                ]);
                $lastEdited = $values;
                if (isset($options[$author])) {
                    $saveAuthor[] = $options[$author];
                }
            }
            $saveAuthor = array_unique($saveAuthor);
            $messages = implode(' / ', $saveAuthor);
            $currentUrl = api_request_uri();
            $redirect = false;
            if ($removeExist) {
                Display::addFlash(Display::return_message(get_lang('DeletedAuthors')));
                $redirect = true;
            } elseif ($price > 0) {
                Display::addFlash(Display::return_message(get_lang('PriceUpdated')));
                $redirect = true;
            } elseif (!empty($messages)) {
                Display::addFlash(Display::return_message(get_lang('RegisteredAuthors').' '.$messages));
                $redirect = true;
            }

            if ($redirect) {
                api_location($currentUrl);
            }
        }
    }
}

Display::display_header(null, 'Path');

echo $learnPath->build_action_menu(
    false,
    true,
    false,
    true,
    '',
    $extraField
);

echo '<div class="row">';
echo $learnPath->showBuildSideBar(null, false, $type);
$form->display();
echo '</div>';
echo '</div>';
Display::display_footer();