/** * Returns the search form * @return string */ public static function getSearchForm() { $url = api_get_path(WEB_CODE_PATH) . 'group/group_overview.php?' . api_get_cidreq(); $form = new FormValidator('search_groups', 'get', $url, null, array('class' => 'form-search')); $form->addElement('text', 'keyword'); $form->addElement('button', 'submit', get_lang('Search')); return $form->toHtml(); }
/** * Builds the form that enables the user to * select a directory to browse/upload in * * @param array An array containing the folders we want to be able to select * @param string The current folder (path inside of the "document" directory, including the prefix "/") * @param string Group directory, if empty, prevents documents to be uploaded (because group documents cannot be uploaded in root) * @param boolean Whether to change the renderer (this will add a template <span> to the QuickForm object displaying the form) * @todo this funcionality is really bad : jmontoya * @return string html form */ public static function build_directory_selector($folders, $document_id, $group_dir = '', $change_renderer = false) { $doc_table = Database::get_course_table(TABLE_DOCUMENT); $course_id = api_get_course_int_id(); $folder_titles = array(); if (is_array($folders)) { $escaped_folders = array(); foreach ($folders as $key => &$val) { $escaped_folders[$key] = Database::escape_string($val); } $folder_sql = implode("','", $escaped_folders); $sql = "SELECT * FROM {$doc_table}\n WHERE filetype = 'folder' AND c_id = {$course_id} AND path IN ('" . $folder_sql . "')"; $res = Database::query($sql); $folder_titles = array(); while ($obj = Database::fetch_object($res)) { $folder_titles[$obj->path] = $obj->title; } } $form = new FormValidator('selector', 'GET', api_get_self() . '?' . api_get_cidreq()); $form->addElement('hidden', 'cidReq', api_get_course_id()); $parent_select = $form->addSelect('id', get_lang('CurrentDirectory'), '', array('onchange' => 'javascript: document.selector.submit();')); if ($change_renderer) { $renderer = $form->defaultRenderer(); $renderer->setElementTemplate('<span>{label} : {element}</span> ', 'curdirpath'); } // Group documents cannot be uploaded in the root if (empty($group_dir)) { $parent_select->addOption(get_lang('Documents'), '/'); if (is_array($folders)) { foreach ($folders as $folder_id => &$folder) { $selected = $document_id == $folder_id ? ' selected="selected"' : ''; $path_parts = explode('/', $folder); $folder_titles[$folder] = cut($folder_titles[$folder], 80); $counter = count($path_parts) - 2; if ($counter > 0) { $label = str_repeat(' ', $counter) . ' — ' . $folder_titles[$folder]; } else { $label = ' — ' . $folder_titles[$folder]; } $parent_select->addOption($label, $folder_id); if ($selected != '') { $parent_select->setSelected($folder_id); } } } } else { if (!empty($folders)) { foreach ($folders as $folder_id => &$folder) { $selected = $document_id == $folder_id ? ' selected="selected"' : ''; $label = $folder_titles[$folder]; if ($folder == $group_dir) { $label = get_lang('Documents'); } else { $path_parts = explode('/', str_replace($group_dir, '', $folder)); $label = cut($label, 80); $label = str_repeat(' ', count($path_parts) - 2) . ' — ' . $label; } $parent_select->addOption($label, $folder_id); if ($selected != '') { $parent_select->setSelected($folder_id); } } } } $html = $form->toHtml(); return $html; }
/** * Returns the search form * @return string */ public static function getSearchForm() { $url = api_get_path(WEB_CODE_PATH) . 'group/group_overview.php?' . api_get_cidreq(); $form = new FormValidator('search_groups', 'get', $url, null, array('class' => 'form-search'), FormValidator::LAYOUT_INLINE); $form->addHidden('cidReq', api_get_course_id()); $form->addHidden('id_session', api_get_session_id()); $form->addElement('text', 'keyword'); $form->addButtonSearch(); return $form->toHtml(); }
/** * Displays a basic form on the overview page for changing the item title and the item description. * @param string $item_type * @param string $title * @param array $data * @return string */ public function display_item_small_form($item_type, $title = '', $data = array()) { $url = api_get_self() . '?' . api_get_cidreq() . '&action=edit_item&lp_id=' . $this->lp_id; $form = new FormValidator('small_form', 'post', $url); $form->addElement('header', $title); $form->addElement('text', 'title', get_lang('Title')); $form->addElement('button', 'submit_button', get_lang('Save')); $form->addElement('hidden', 'id', $data['id']); $form->addElement('hidden', 'parent', $data['parent_item_id']); $form->addElement('hidden', 'previous', $data['previous_item_id']); $form->setDefaults(array('title' => $data['title'])); return $form->toHtml(); }
if ($form->validate()) { $em = Database::getManager(); $values = $form->exportValues(); $password = $values['pass1']; $token = $values['token']; /** @var \Chamilo\UserBundle\Entity\User $user */ $user = UserManager::getManager()->findUserByConfirmationToken($token); if ($user) { if (!$user->isPasswordRequestNonExpired($ttl)) { Display::addFlash(Display::return_message(get_lang('LinkExpired')), 'warning'); header('Location: ' . api_get_path(WEB_CODE_PATH) . 'auth/lostPassword.php'); exit; } $user->setPlainPassword($password); $userManager = UserManager::getManager(); $userManager->updateUser($user, true); $user->setConfirmationToken(null); $user->setPasswordRequestedAt(null); Database::getManager()->persist($user); Database::getManager()->flush(); Display::addFlash(Display::return_message(get_lang('Updated'))); header('Location: ' . api_get_path(WEB_PATH)); exit; } else { Display::addFlash(Display::return_message(get_lang('LinkExpired'))); } } $tpl->assign('form', $form->toHtml()); $content = $tpl->get_template('auth/set_temp_password.tpl'); $tpl->assign('content', $tpl->fetch($content)); $tpl->display_one_col_template();
if (!empty($selectedGroupChoices)) { $defaults['groups'] = $selectedGroupChoices; } $form->setDefaults($defaults); $tpl = new Template(); $currentUser = $em->getRepository('ChamiloUserBundle:User')->find(api_get_user_id()); if ($form->validate()) { $values = $form->getSubmitValues(); // Subscribing users $users = isset($values['users']) ? $values['users'] : []; $userForm = isset($values['user_form']) ? $values['user_form'] : []; if (!empty($userForm)) { $em->getRepository('ChamiloCourseBundle:CItemProperty')->subscribeUsersToItem($currentUser, 'learnpath', $course, $session, $lpId, $users); Display::addFlash(Display::return_message(get_lang('Updated'))); } // Subscribing groups $groups = isset($values['groups']) ? $values['groups'] : []; $groupForm = isset($values['group_form']) ? $values['group_form'] : []; if (!empty($groupForm)) { $em->getRepository('ChamiloCourseBundle:CItemProperty')->subscribeGroupsToItem($currentUser, 'learnpath', $course, $session, $lpId, $groups); Display::addFlash(Display::return_message(get_lang('Updated'))); } header("Location: {$url}"); exit; } else { $headers = [get_lang('SubscribeUsersToLp'), get_lang('SubscribeGroupsToLp')]; $tabs = Display::tabs($headers, [$formUsers->toHtml(), $form->toHtml()]); $tpl->assign('tabs', $tabs); } $layout = $tpl->get_template('learnpath/subscribe_users.tpl'); $tpl->display($layout);
/** * Index * * @param \Silex\Application $app * @param int $lpId * * @todo move calls in repositories * * @return Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ public function indexAction(Request $request) { ///$lpId $courseId = api_get_course_int_id(); //@todo use the before filter to aborts this course calls if (empty($courseId)) { $app->abort(403, 'Course not available'); } $courseCode = api_get_course_id(); $lp = new \learnpath($courseCode, $lpId, api_get_user_id()); $url = $app['url_generator']->generate('subscribe_users', array('lpId' => $lpId)); //Setting breadcrumb @todo move this in the template lib $breadcrumb = array(array('url' => api_get_path(WEB_CODE_PATH) . 'newscorm/lp_controller.php?action=list', 'name' => get_lang('LearningPaths')), array('url' => api_get_path(WEB_CODE_PATH) . "newscorm/lp_controller.php?action=build&lp_id=" . $lp->get_id(), 'name' => $lp->get_name()), array('url' => '#', 'name' => get_lang('SubscribeUsers'))); $app['breadcrumb'] = $breadcrumb; // Find session. $sessionId = api_get_session_id(); $session = null; if (!empty($sessionId)) { $session = $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\Session')->find($sessionId); } // Find course. $course = $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\Course')->find($courseId); // Getting subscribe users to the course. $subscribedUsers = $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\Course')->getSubscribedStudents($course); $subscribedUsers = $subscribedUsers->getQuery(); $subscribedUsers = $subscribedUsers->execute(); // Getting all users in a nice format. $choices = array(); foreach ($subscribedUsers as $user) { $choices[$user->getUserId()] = $user->getCompleteNameWithClasses(); } // Getting subscribed users to a LP. $subscribedUsersInLp = $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\CItemProperty')->getUsersSubscribedToItem('learnpath', $lpId, $course, $session); $selectedChoices = array(); foreach ($subscribedUsersInLp as $itemProperty) { $selectedChoices[] = $itemProperty->getToUserId(); } //Building the form for Users $formUsers = new \FormValidator('lp_edit', 'post', $url); $formUsers->addElement('hidden', 'user_form', 1); $formUsers->addElement('header', get_lang('SubscribeUsersToLp')); $userMultiSelect = $formUsers->addElement('advmultiselect', 'users', get_lang('Users'), $choices); $userMultiSelect->setButtonAttributes('add'); $userMultiSelect->setButtonAttributes('remove'); $formUsers->addElement('style_submit_button', 'submit', get_lang('Save'), 'class="save"'); $defaults = array(); if (!empty($selectedChoices)) { $defaults['users'] = $selectedChoices; } $formUsers->setDefaults($defaults); //Building the form for Groups $form = new \FormValidator('lp_edit', 'post', $url); $form->addElement('header', get_lang('SubscribeGroupsToLp')); $form->addElement('hidden', 'group_form', 1); //Group list $groupList = \CourseManager::get_group_list_of_course(api_get_course_id(), api_get_session_id(), 1); $groupChoices = array(); if (!empty($groupList)) { foreach ($groupList as $group) { $groupChoices[$group['id']] = $group['name']; } } //Subscribed groups to a LP $subscribedGroupsInLp = $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\CItemProperty')->getGroupsSubscribedToItem('learnpath', $lpId, $course, $session); $selectedGroupChoices = array(); foreach ($subscribedGroupsInLp as $itemProperty) { $selectedGroupChoices[] = $itemProperty->getToGroupId(); } $groupMultiSelect = $form->addElement('advmultiselect', 'groups', get_lang('Groups'), $groupChoices); $groupMultiSelect->setButtonAttributes('add'); $groupMultiSelect->setButtonAttributes('remove'); // submit button $form->addElement('style_submit_button', 'submit', get_lang('Save'), 'class="save"'); /*$form = $app['form.factory']->createBuilder('form') ->add('origin', 'choice', array( 'label' => get_lang('Origin'), 'multiple' => true, 'required' => false, 'expanded' => false, //'class' => 'Entity\Course', //'property' => 'complete_name', //'query_builder' => function(Chamilo\CoreBundle\Entity\Repository\CourseRepository $repo) use ($course) { $repo = $repo->getSubscribedStudents($course); return $repo; }, 'choices' => $choices )) ->add('destination', 'choice', array( 'label' => get_lang('Destination'), 'multiple' => true, 'expanded' => false, 'required' => false, //'class' => 'Entity\Course', //'property' => 'complete_name', //'query_builder' => function(Chamilo\CoreBundle\Entity\Repository\CourseRepository $repo) use ($course) { // return $repo->getSubscribedStudents($course); //}, 'choices' => $selectedChoices )) ->getForm(); */ $defaults = array(); if (!empty($selectedGroupChoices)) { $defaults['groups'] = $selectedGroupChoices; } $form->setDefaults($defaults); if ($request->getMethod() == 'POST') { //Subscribing users $users = $request->get('users'); $userForm = $request->get('user_form'); if (!empty($userForm)) { $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\CItemProperty')->subscribeUsersToItem('learnpath', $course, $session, $lpId, $users); } //Subscribing groups $groups = $request->get('groups'); $groupForm = $request->get('group_form'); if (!empty($groupForm)) { $app['orm.em']->getRepository('Chamilo\\CoreBundle\\Entity\\CItemProperty')->subscribeGroupsToItem('learnpath', $course, $session, $lpId, $groups); } return $app->redirect($url); } else { $app['template']->assign('formUsers', $formUsers->toHtml()); $app['template']->assign('formGroups', $form->toHtml()); } $response = $app['template']->render_template('learnpath/subscribe_users.tpl'); return new Response($response, 200, array()); }
$users = isset($values['users']) ? $values['users'] : []; if (!empty($users)) { $deleteUsers = []; if ($subscribedUsersInCategory) { /** @var CLpCategoryUser $user */ foreach ($subscribedUsersInCategory as $user) { $userId = $user->getUser()->getId(); if (!in_array($userId, $users)) { $category->removeUsers($user); } } } foreach ($users as $userId) { $categoryUser = new CLpCategoryUser(); $user = UserManager::getRepository()->find($userId); $categoryUser->setUser($user); $category->addUser($categoryUser); } $em->merge($category); $em->flush(); Display::addFlash(Display::return_message(get_lang('Updated'))); } header("Location: {$url}"); exit; } else { $headers = [get_lang('SubscribeUsersToLp'), get_lang('SubscribeGroupsToLp')]; $tabs = $formUsers->toHtml(); $tpl->assign('tabs', $tabs); } $layout = $tpl->get_template('learnpath/subscribe_users.tpl'); $tpl->display($layout);