HEX
Server: LiteSpeed
System: Linux s917.lon1.mysecurecloudhost.com 4.18.0-477.21.1.lve.1.el8.x86_64 #1 SMP Tue Sep 5 23:08:35 UTC 2023 x86_64
User: assibfaf (3034)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/assibfaf/public_html/prox-classes/Preference/Discipline.php
<?php
/**
 * @package    Proxim
 * @author     Davison Pro <davis@davisonpro.dev | https://davisonpro.dev>
 * @copyright  2019 Proxim
 * @version    1.5.0
 * @since      File available since Release 1.0.0
 */

namespace Proxim\Preference;

use Db;
use Proxim\Database\DbQuery;
use Proxim\ObjectModel;
use Proxim\Util\ArrayUtils;
use Proxim\Validate;

/**
 * Discipline
 */
class Discipline extends ObjectModel
{
    const DISCIPLINE_OTHER = 52;

	/** @var $id Discipline ID */
    public $id;

    /** @var int group_id */
    public $group_id;

    /** @var string title */
    public $title;

    /** @var int is_complex_assignment */
    public $is_complex_assignment = 0;
    
    /** @var string date_upd */
	public $date_upd;
	
	/** @var string date_add */
	public $date_add;
	
	/**
     * @see ObjectModel::$definition
     */
    public static $definition = array(
        'table' => 'discipline',
        'primary' => 'discipline_id',
        'fields' => array( 
            'group_id' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required'=> true),
            'title' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true, 'size' => 255),
            'is_complex_assignment' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
			'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDateOrNull'),
            'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
        ),
    );

    /**
     * constructor.
     *
     * @param null $id
     */
    public function __construct($id = null) {
		parent::__construct($id);
    }
    
    /**
     * Return disciplines 
     *
     * @return array Disciplines
     */
    public static function getDisciplines()
    {
        $sql = new DbQuery();
        $sql->select('d.*');
        $sql->from('discipline', 'd');
        $sql->orderBy('d.discipline_id ASC');

        $result = Db::getInstance()->executeS($sql);
        
        return $result;
    }

    public static function getTopDisciplines( $limit = 5 ) {
        $sql = new DbQuery();
        $sql->select('o.topic_category_id, COUNT(*) AS discipline_count');
        $sql->from('order', 'o');
        $sql->where('o.topic_category_id != ' . (int) self::DISCIPLINE_OTHER );
        $sql->groupBy('o.topic_category_id');
        $sql->orderBy('discipline_count DESC');
        $sql->limit( $limit );

        $result = Db::getInstance()->executeS($sql);

        return $result;
    }

    /**
     * Return disciplines by Group ID.
     *
     * @return array Disciplines
     */
    public static function getDisciplinesByGroup()
    {
        $disciplines = Discipline::getDisciplines();
        $groupedDisciplineGroups = ArrayUtils::groupByKey($disciplines, 'group_id');

        $disciplineGroups = array();

        // discipline groups
        if(count($groupedDisciplineGroups) > 0) {
            foreach($groupedDisciplineGroups as $disciplineGroupId => $disciplineGroupItems) {
                $xDiscipline = array();
                foreach( $disciplineGroupItems as $x ) {
                    $xDiscipline[] = array(
                        'id' => (int) $x['discipline_id'],
                        'name' => $x['title'],
                        'isComplexAssignment' => (bool) $x['is_complex_assignment']
                    );
                }
                
                $discipline = new Discipline( (int) $disciplineGroupId );
                if(Validate::isLoadedObject($discipline)) {
                    $disciplineGroups[] = array(
                        'id' => $discipline->id,
                        'groupName' => $discipline->title,
                        'disciplines' => $xDiscipline
                    );
                } else {
                    $disciplineGroups[] = array(
                        'id' => self::DISCIPLINE_OTHER,
                        'groupName' => 'Other',
                        'disciplines' => $xDiscipline
                    );
                }
                
            }

        // no groups
        } else {
            $xDiscipline = array();
            foreach( $disciplines as $x ) {
                $xDiscipline[] = array(
                    'id' => (int) $x['discipline_id'],
                    'name' => $x['title'],
                    'isComplexAssignment' => (bool) $x['is_complex_assignment']
                );
            }

            $disciplineGroups[] = array(
                'id' => self::DISCIPLINE_OTHER,
                'groupName' => 'Other',
                'disciplines' => $xDiscipline
            );
        }

        return $disciplineGroups;
    }
}