Skip to content
Snippets Groups Projects
Subject.php 2.07 KiB
Newer Older
<?php defined('SYSPATH') || die('No direct script access.');
xamgore's avatar
xamgore committed
class Model_Subject
    const MARK_UNDEFINED = 'Undefined';
    const MARK_F  = 'ECTS-F';
    const MARK_FX = 'ECTS-FX';
    const MARK_E  = 'ECTS-E';
    const MARK_D  = 'ECTS-D';
    const MARK_C  = 'ECTS-C';
    const MARK_B  = 'ECTS-B';
    const MARK_A  = 'ECTS-A';

    /**
     * @param $rate     int rate of student
     * @param $current  int current max rate of discipline
     * @param $examRate int exam rate of student
     * @return string mark name
     */
    public static function getECTSMark($rate, $current, $examRate) {
        if ($current <= 0)
            return self::MARK_UNDEFINED;
        if ($examRate !== null && $examRate < 22)
            return self::MARK_FX;
        return self::compute_mark($rate / $current);
    }

    private static function compute_mark($percent) {
        if ($percent < 0.31) return self::MARK_F;
        if ($percent < 0.60) return self::MARK_FX;
        if ($percent < 0.65) return self::MARK_E;
        if ($percent < 0.71) return self::MARK_D;
        if ($percent < 0.85) return self::MARK_C;
        if ($percent < 0.95) return self::MARK_B;
        return self::MARK_A;
    }
    public static function createOrUpdate($name, $abbr, $facultyID, $extID=null) {
        $sql = 'SELECT `Subject_Create`(:faculty, :name, :abbr, :extID) AS `Num`';
        $res = DB::query(Database::SELECT, $sql)
xamgore's avatar
xamgore committed
            ->parameters([
                ':faculty' => $facultyID,
xamgore's avatar
xamgore committed
                ':name'    => UTF8::clear($name),
                ':abbr'    => UTF8::clear($abbr),
                ':extID'    => UTF8::clear($extID),
            ])->execute();

        return (int) $res->get('Num');
    public static function withExternalID($extID, $name, $abbr, $facultyID) {
        $sql = 'SELECT `Subject_GetByExternalID`(:extID) AS `ID`';
        $id = DB::query(Database::SELECT, $sql)
            ->param(':extID', $extID)
            ->execute()->get('ID');

        if ($id == -1) {
            $id = self::createOrUpdate($name, $abbr, $facultyID, $extID);
        }
        return $id;