<?php

class CourseCodes extends Nmc_Db_Table
{
    protected $_primary = 'courseCodeId';
    protected $_rowClass = 'CourseCode';

    /**
     * The one true instance
     *
     * @var CourseCodes
     */
    protected static $_instance = null;

    /**
     * Returns the one true instance
     *
     * @return CourseCodes
     */
    public static function getInstance($config = array())
    {
        if(!self::$_instance) {
            self::$_instance = new CourseCodes($config);
        }
        return self::$_instance;
    }

    public function fetchAll($where = null, $order = null, $count = null, $offset = null)
    {
        if(!$order) {
            $order = array('subject', 'courseNumber', 'courseLetter');
        }
        return parent::fetchAll($where, $order, $count, $offset);
    }

    public function findBySubjectNumberAndLetter($subject, $number, $letter = '')
    {
        if (!$subject || !$number) {
            return null;
        }

        $where = array();
        $where[] = $this->_db->quoteInto('subject = ?', $subject);
        $where[] = $this->_db->quoteInto('courseNumber = ?', $number);
        $where[] = $this->_db->quoteInto('courseLetter = ?', $letter);
        $where = implode(' AND ', $where);

        $result = $this->fetchRow($where);
        $primaryKeyName = $this->getPrimaryKeyName();
        if(! $result->$primaryKeyName) {
            $result = $this->fetchNew();
            $result->subject = $subject;
            $result->courseNumber = $number;
            $result->courseLetter = $letter;
            $result->save();
        }
        return $result;
    }

}

?>