/** * Adds a resource to the unique gradebook of a given course * @param int * @param string Course code * @param int Resource type (use constants defined in linkfactory.class.php) * @param int Resource ID in the corresponding tool * @param string Resource name to show in the gradebook * @param int Resource weight to set in the gradebook * @param int Resource max * @param string Resource description * @param int Visibility (0 hidden, 1 shown) * @param int Session ID (optional or 0 if not defined) * @param int * @return boolean True on success, false on failure */ public static function add_resource_to_course_gradebook($category_id, $course_code, $resource_type, $resource_id, $resource_name = '', $weight = 0, $max = 0, $resource_description = '', $visible = 0, $session_id = 0, $link_id = null) { $link = LinkFactory::create($resource_type); $link->set_user_id(api_get_user_id()); $link->set_course_code($course_code); if (empty($category_id)) { return false; } $link->set_category_id($category_id); if ($link->needs_name_and_description()) { $link->set_name($resource_name); } else { $link->set_ref_id($resource_id); } $link->set_weight($weight); if ($link->needs_max()) { $link->set_max($max); } if ($link->needs_name_and_description()) { $link->set_description($resource_description); } $link->set_visible(empty($visible) ? 0 : 1); if (!empty($session_id)) { $link->set_session_id($session_id); } $link->add(); return true; }
protected function build_create() { $this->addElement('header', get_lang('MakeLink')); $select = $this->addElement('select', 'select_link', get_lang('ChooseLink'), null, array('onchange' => 'document.create_link.submit()')); $linktypes = LinkFactory::get_all_types(); $select->addoption('[' . get_lang('ChooseLink') . ']', 0); $cc = $this->category_object->get_course_code(); foreach ($linktypes as $linktype) { $link = LinkFactory::create($linktype); if (!empty($cc)) { $link->set_course_code($cc); } elseif (!empty($_GET['course_code'])) { $link->set_course_code(Database::escape_string($_GET['course_code'])); } // disable this element if the link works with a dropdownlist // and if there are no links left if (!$link->needs_name_and_description() && count($link->get_all_links()) == '0') { $select->addoption($link->get_type_name(), $linktype, 'disabled'); } else { $select->addoption($link->get_type_name(), $linktype); } } if (isset($this->extra)) { $this->setDefaults(array('select_link' => $this->extra)); } }
/** * Constructor * To add link, define category_object and link_type * To edit link, define link_object */ function LinkAddEditForm($form_type, $category_object, $link_type, $link_object, $form_name, $action = null) { parent::__construct($form_name, 'post', $action); // set or create link object if (isset($link_object)) { $link = $link_object; } elseif (isset($link_type) && isset($category_object)) { $link = LinkFactory::create($link_type); $link->set_course_code(api_get_course_id()); } else { die('LinkAddEditForm error: define link_type/category_object or link_object'); } $defaults = array(); $this->addElement('hidden', 'zero', 0); if (!empty($_GET['editlink'])) { $this->addElement('header', '', get_lang('EditLink')); } // ELEMENT: name if ($form_type == self::TYPE_ADD || $link->is_allowed_to_change_name()) { if ($link->needs_name_and_description()) { $this->add_textfield('name', get_lang('Name'), true, array('size' => '40', 'maxlength' => '40')); } else { $select = $this->addElement('select', 'select_link', get_lang('ChooseItem')); foreach ($link->get_all_links() as $newlink) { $select->addoption($newlink[1], $newlink[0]); } } } else { $this->addElement('label', get_lang('Name'), '<span class="freeze">' . $link->get_name() . ' [' . $link->get_type_name() . ']</span>'); $this->addElement('hidden', 'name_link', $link->get_name(), array('id' => 'name_link')); } if (count($category_object) == 1) { $this->addElement('hidden', 'select_gradebook', $category_object[0]->get_id()); } else { $select_gradebook = $this->addElement('select', 'select_gradebook', get_lang('SelectGradebook'), array(), array('id' => 'hide_category_id')); $this->addRule('select_gradebook', get_lang('ThisFieldIsRequired'), 'nonzero'); $default_weight = 0; if (!empty($category_object)) { foreach ($category_object as $my_cat) { if ($my_cat->get_course_code() == api_get_course_id()) { $grade_model_id = $my_cat->get_grade_model_id(); if (empty($grade_model_id)) { if ($my_cat->get_parent_id() == 0) { $default_weight = $my_cat->get_weight(); $select_gradebook->addoption(get_lang('Default'), $my_cat->get_id()); } else { $select_gradebook->addoption($my_cat->get_name(), $my_cat->get_id()); } } else { $select_gradebook->addoption(get_lang('Select'), 0); } if ($link->get_category_id() == $my_cat->get_id()) { $default_weight = $my_cat->get_weight(); } } } } } $this->add_textfield('weight_mask', array(get_lang('Weight'), null, ' [0 .. ' . $category_object[0]->get_weight() . '] '), true, array('size' => '4', 'maxlength' => '5', 'class' => 'span1')); $this->addElement('hidden', 'weight'); /* // ELEMENT: weight $this->add_textfield('weight', array(get_lang('Weight'), null, '/ <span id="max_weight">'.$default_weight.'</span>'), true, array ( 'size' => '4', 'maxlength' => '5', 'class' => 'span1' ));*/ $this->addRule('weight_mask', get_lang('OnlyNumbers'), 'numeric'); $this->addRule(array('weight_mask', 'zero'), get_lang('NegativeValue'), 'compare', '>='); if ($form_type == self::TYPE_EDIT) { $parent_cat = Category::load($link->get_category_id()); if ($parent_cat[0]->get_parent_id() == 0) { $values['weight'] = $link->get_weight(); } else { $cat = Category::load($parent_cat[0]->get_parent_id()); //$global_weight = $cat[0]->get_weight(); //$values['weight'] = $link->get_weight()/$parent_cat[0]->get_weight()*$global_weight; //$weight = $parent_cat[0]->get_weight()* $link->get_weight() / $global_weight; //$values['weight'] = $weight; $values['weight'] = $link->get_weight(); } $defaults['weight_mask'] = $values['weight']; $defaults['select_gradebook'] = $link->get_category_id(); } // ELEMENT: max if ($link->needs_max()) { if ($form_type == self::TYPE_EDIT && $link->has_results()) { $this->add_textfield('max', get_lang('QualificationNumeric'), false, array('size' => '4', 'maxlength' => '5', 'disabled' => 'disabled')); } else { $this->add_textfield('max', get_lang('QualificationNumeric'), true, array('size' => '4', 'maxlength' => '5')); $this->addRule('max', get_lang('OnlyNumbers'), 'numeric'); $this->addRule(array('max', 'zero'), get_lang('NegativeValue'), 'compare', '>='); } if ($form_type == self::TYPE_EDIT) { $defaults['max'] = $link->get_max(); } } // ELEMENT: date //$this->add_datepicker('date',get_lang('Date')); //$defaults['date'] = ($form_type == self :: TYPE_EDIT ? $link->get_date() : time()); // ELEMENT: description if ($link->needs_name_and_description()) { $this->addElement('textarea', 'description', get_lang('Description'), array('rows' => '3', 'cols' => '34')); if ($form_type == self::TYPE_EDIT) { $defaults['description'] = $link->get_description(); } } // ELEMENT: visible $visible = $form_type == self::TYPE_EDIT && $link->is_visible() ? '1' : '0'; $this->addElement('checkbox', 'visible', null, get_lang('Visible'), $visible); if ($form_type == self::TYPE_EDIT) { $defaults['visible'] = $link->is_visible(); } // ELEMENT: add results if ($form_type == self::TYPE_ADD && $link->needs_results()) { $this->addElement('checkbox', 'addresult', get_lang('AddResult')); } // submit button if ($form_type == self::TYPE_ADD) { $this->addElement('style_submit_button', 'submit', get_lang('CreateLink'), 'class="save"'); } else { $this->addElement('style_submit_button', 'submit', get_lang('LinkMod'), 'class="save"'); } if ($form_type == self::TYPE_ADD) { $setting = api_get_setting('tool_visible_by_default_at_creation'); $visibility_default = 1; if (isset($setting['gradebook']) && $setting['gradebook'] == 'false') { $visibility_default = 0; } $defaults['visible'] = $visibility_default; } // set default values $this->setDefaults($defaults); }
/** * @param $result * @return array */ private static function create_objects_from_sql_result($result) { $links = array(); while ($data = Database::fetch_array($result)) { $link = LinkFactory::create($data['type']); $link->set_id($data['id']); $link->set_type($data['type']); $link->set_ref_id($data['ref_id']); $link->set_user_id($data['user_id']); $link->set_course_code($data['course_code']); $link->set_category_id($data['category_id']); $link->set_date($data['created_at']); $link->set_weight($data['weight']); $link->set_visible($data['visible']); $link->set_locked($data['locked']); //session id should depend of the category --> $data['category_id'] $session_id = api_get_session_id(); $link->set_session_id($session_id); $links[] = $link; } return $links; }
/** * @param $link * @param $courseCode * @return AttendanceLink|DropboxLink|ExerciseLink|ForumThreadLink|LearnpathLink|null|StudentPublicationLink|SurveyLink */ private function createLink($link, $courseCode) { $link = LinkFactory::create($link); if (!empty($courseCode)) { $link->set_course_code($courseCode); } elseif (!empty($_GET['course_code'])) { $link->set_course_code(Database::escape_string($_GET['course_code'], null, false)); } return $link; }
$category = Category::load($_GET['selectcat']); $url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&newtypeselected=' . $typeSelected . '&course_code=' . api_get_course_id() . '&' . api_get_cidreq(); $typeform = new LinkForm(LinkForm::TYPE_CREATE, $category[0], null, 'create_link', null, $url, $typeSelected); // if user selected a link type if ($typeform->validate() && isset($_GET['newtypeselected'])) { // reload page, this time with a parameter indicating the selected type header('Location: ' . api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&typeselected=' . $typeform->exportValue('select_link') . '&course_code=' . Security::remove_XSS($_GET['course_code']) . '&' . api_get_cidreq()); exit; } // link type selected, show 2nd form to retrieve the link data if (isset($typeSelected) && $typeSelected != '0') { $url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&typeselected=' . $typeSelected . '&course_code=' . $courseCode . '&' . api_get_cidreq(); $addform = new LinkAddEditForm(LinkAddEditForm::TYPE_ADD, $all_categories, $typeSelected, null, 'add_link', $url); if ($addform->validate()) { $addvalues = $addform->exportValues(); $link = LinkFactory::create($typeSelected); $link->set_user_id(api_get_user_id()); $link->set_course_code(api_get_course_id()); $link->set_category_id($addvalues['select_gradebook']); if ($link->needs_name_and_description()) { $link->set_name($addvalues['name']); } else { $link->set_ref_id($addvalues['select_link']); } $parent_cat = Category::load($addvalues['select_gradebook']); $global_weight = $category[0]->get_weight(); $link->set_weight($addvalues['weight_mask']); if ($link->needs_max()) { $link->set_max($addvalues['max']); } if ($link->needs_name_and_description()) {
$category = Category::load($_GET['selectcat']); $url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&newtypeselected=' . (isset($_GET['typeselected']) ? Security::remove_XSS($_GET['typeselected']) : '') . '&course_code=' . api_get_course_id(); $typeform = new LinkForm(LinkForm::TYPE_CREATE, $category[0], null, 'create_link', null, $url, $_GET['typeselected']); // if user selected a link type if ($typeform->validate() && isset($_GET['newtypeselected'])) { // reload page, this time with a parameter indicating the selected type header('Location: ' . api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&typeselected=' . $typeform->exportValue('select_link') . '&course_code=' . Security::remove_XSS($_GET['course_code'])); exit; } // link type selected, show 2nd form to retrieve the link data if (isset($_GET['typeselected']) && $_GET['typeselected'] != '0') { $url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']) . '&typeselected=' . Security::remove_XSS($_GET['typeselected']) . '&course_code=' . Security::remove_XSS($_GET['course_code']); $addform = new LinkAddEditForm(LinkAddEditForm::TYPE_ADD, $all_categories, intval($_GET['typeselected']), null, 'add_link', $url); if ($addform->validate()) { $addvalues = $addform->exportValues(); $link = LinkFactory::create($_GET['typeselected']); $link->set_user_id(api_get_user_id()); $link->set_course_code(api_get_course_id()); $link->set_category_id($addvalues['select_gradebook']); if ($link->needs_name_and_description()) { $link->set_name($addvalues['name']); } else { $link->set_ref_id($addvalues['select_link']); } $parent_cat = Category::load($addvalues['select_gradebook']); $global_weight = $category[0]->get_weight(); $link->set_weight($addvalues['weight_mask']); if ($link->needs_max()) { $link->set_max($addvalues['max']); } if ($link->needs_name_and_description()) {
/** * Create an AbsctrackLink array from GradebookLink \Doctrine\Common\Collections\ArrayCollection or array * @param \Doctrine\Common\Collections\ArrayCollection|array $entities * @return array */ private static function createObjectsFromEntities($entities) { $links = []; foreach ($entities as $gradebookLink) { $link = LinkFactory::create($gradebookLink->getType()); $link->set_id($gradebookLink->getId()); $link->set_type($gradebookLink->getType()); $link->set_ref_id($gradebookLink->getRefId()); $link->set_user_id($gradebookLink->getUserId()); $link->set_course_code($gradebookLink->getCourse()->getCode()); $link->set_category_id($gradebookLink->getCategoryId()); $link->set_date($gradebookLink->getCreatedAt()->format('Y-m-d h:m:i')); $link->set_weight($gradebookLink->getWeight()); $link->set_visible($gradebookLink->getVisible()); $link->set_locked($gradebookLink->getLocked()); //session id should depend of the category --> $data['category_id'] $session_id = api_get_session_id(); $link->set_session_id($session_id); $links[] = $link; } return $links; }