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;
}
}