123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <?php
- /* For licensing terms, see /license.txt */
- /**
- * Class Promotion
- * This class provides methods for the promotion management.
- * Include/require it in your code to use its features.
- *
- * @package chamilo.library
- */
- class Promotion extends Model
- {
- public $table;
- public $columns = [
- 'id',
- 'name',
- 'description',
- 'career_id',
- 'status',
- 'created_at',
- 'updated_at',
- ];
- /**
- * Constructor.
- */
- public function __construct()
- {
- parent::__construct();
- $this->table = Database::get_main_table(TABLE_PROMOTION);
- }
- /**
- * Get the count of elements.
- */
- public function get_count()
- {
- $row = Database::select(
- 'count(*) as count',
- $this->table,
- [],
- 'first'
- );
- return $row['count'];
- }
- /**
- * Copies the promotion to a new one.
- *
- * @param int Promotion ID
- * @param int Career ID, in case we want to change it
- * @param bool Whether or not to copy the sessions inside
- *
- * @return int New promotion ID on success, false on failure
- */
- public function copy($id, $career_id = null, $copy_sessions = false)
- {
- $pid = false;
- $promotion = $this->get($id);
- if (!empty($promotion)) {
- $new = [];
- foreach ($promotion as $key => $val) {
- switch ($key) {
- case 'id':
- case 'updated_at':
- break;
- case 'name':
- $val .= ' '.get_lang('Copy');
- $new[$key] = $val;
- break;
- case 'created_at':
- $val = api_get_utc_datetime();
- $new[$key] = $val;
- break;
- case 'career_id':
- if (!empty($career_id)) {
- $val = (int) $career_id;
- }
- $new[$key] = $val;
- break;
- default:
- $new[$key] = $val;
- break;
- }
- }
- if ($copy_sessions) {
- /**
- * When copying a session we do:
- * 1. Copy a new session from the source
- * 2. Copy all courses from the session (no user data, no user list)
- * 3. Create the promotion.
- */
- $session_list = SessionManager::get_all_sessions_by_promotion($id);
- if (!empty($session_list)) {
- $pid = $this->save($new);
- if (!empty($pid)) {
- $new_session_list = [];
- foreach ($session_list as $item) {
- $sid = SessionManager::copy(
- $item['id'],
- true,
- false,
- false,
- true
- );
- $new_session_list[] = $sid;
- }
- if (!empty($new_session_list)) {
- SessionManager::subscribe_sessions_to_promotion(
- $pid,
- $new_session_list
- );
- }
- }
- }
- } else {
- $pid = $this->save($new);
- }
- }
- return $pid;
- }
- /**
- * Gets all promotions by career id.
- *
- * @param int career id
- * @param bool $order
- *
- * @return array results
- */
- public function get_all_promotions_by_career_id($career_id, $order = false)
- {
- return Database::select(
- '*',
- $this->table,
- [
- 'where' => ['career_id = ?' => $career_id],
- 'order' => $order,
- ]
- );
- }
- /**
- * @return array
- */
- public function get_status_list()
- {
- return [
- PROMOTION_STATUS_ACTIVE => get_lang('active'),
- PROMOTION_STATUS_INACTIVE => get_lang('inactive'),
- ];
- }
- /**
- * Displays the title + grid.
- *
- * @return string html code
- */
- public function display()
- {
- // Action links
- echo '<div class="actions" style="margin-bottom:20px">';
- echo '<a href="career_dashboard.php">'.
- Display::return_icon(
- 'back.png',
- get_lang('Back'),
- '',
- '32'
- )
- .'</a>';
- echo '<a href="'.api_get_self().'?action=add">'.
- Display::return_icon(
- 'new_promotion.png',
- get_lang('Add'),
- '',
- '32'
- ).'</a>';
- echo '<a href="'.api_get_path(WEB_CODE_PATH).'session/session_add.php">'.
- Display::return_icon(
- 'new_session.png',
- get_lang('Add a training session'),
- '',
- '32'
- ).'</a>';
- echo '</div>';
- echo Display::grid_html('promotions');
- }
- /**
- * Update all session status by promotion.
- *
- * @param int $promotion_id
- * @param int $status (1, 0)
- */
- public function update_all_sessions_status_by_promotion_id(
- $promotion_id,
- $status
- ) {
- $sessionList = SessionManager::get_all_sessions_by_promotion($promotion_id);
- if (!empty($sessionList)) {
- foreach ($sessionList as $item) {
- SessionManager::set_session_status($item['id'], $status);
- }
- }
- }
- /**
- * Returns a Form validator Obj.
- *
- * @param string $url
- * @param string $action
- *
- * @return FormValidator
- */
- public function return_form($url, $action = 'add')
- {
- $form = new FormValidator('promotion', 'post', $url);
- // Setting the form elements
- $header = get_lang('Add');
- if ($action == 'edit') {
- $header = get_lang('Edit');
- }
- $id = isset($_GET['id']) ? (int) $_GET['id'] : '';
- $form->addElement('header', '', $header);
- $form->addElement('hidden', 'id', $id);
- $form->addElement(
- 'text',
- 'name',
- get_lang('Name'),
- ['size' => '70', 'id' => 'name']
- );
- $form->addHtmlEditor(
- 'description',
- get_lang('Description'),
- false,
- false,
- [
- 'ToolbarSet' => 'Careers',
- 'Width' => '100%',
- 'Height' => '250',
- ]
- );
- $career = new Career();
- $careers = $career->get_all();
- $career_list = [];
- foreach ($careers as $item) {
- $career_list[$item['id']] = $item['name'];
- }
- $form->addSelect(
- 'career_id',
- get_lang('Career'),
- $career_list,
- ['id' => 'career_id']
- );
- $status_list = $this->get_status_list();
- $form->addElement('select', 'status', get_lang('Status'), $status_list);
- if ($action == 'edit') {
- $form->addElement('text', 'created_at', get_lang('Created at'));
- $form->freeze('created_at');
- }
- if ($action == 'edit') {
- $form->addButtonSave(get_lang('Edit'), 'submit');
- } else {
- $form->addButtonCreate(get_lang('Add'), 'submit');
- }
- // Setting the defaults
- $defaults = $this->get($id);
- if (!empty($defaults['created_at'])) {
- $defaults['created_at'] = api_convert_and_format_date($defaults['created_at']);
- }
- if (!empty($defaults['updated_at'])) {
- $defaults['updated_at'] = api_convert_and_format_date($defaults['updated_at']);
- }
- $form->setDefaults($defaults);
- // Setting the rules
- $form->addRule('name', get_lang('Required field'), 'required');
- return $form;
- }
- /**
- * @param array $params
- * @param bool $show_query
- *
- * @return bool
- */
- public function save($params, $show_query = false)
- {
- $promotion = new \Chamilo\CoreBundle\Entity\Promotion();
- $em = Database::getManager();
- $repo = $em->getRepository('ChamiloCoreBundle:Career');
- $promotion
- ->setName($params['name'])
- ->setStatus($params['status'])
- ->setDescription($params['description'])
- ->setCareer($repo->find($params['career_id']))
- ;
- $em->persist($promotion);
- $em->flush();
- if (!empty($promotion->getId())) {
- Event::addEvent(
- LOG_PROMOTION_CREATE,
- LOG_PROMOTION_ID,
- $promotion->getId(),
- api_get_utc_datetime(),
- api_get_user_id()
- );
- }
- return $promotion->getId();
- }
- /**
- * @param int $id
- *
- * @return bool
- */
- public function delete($id)
- {
- if (parent::delete($id)) {
- SessionManager::clear_session_ref_promotion($id);
- Event::addEvent(
- LOG_PROMOTION_DELETE,
- LOG_PROMOTION_ID,
- $id,
- api_get_utc_datetime(),
- api_get_user_id()
- );
- } else {
- return false;
- }
- }
- }
|