AppStateESS/homestead

View on GitHub
class/ResidenceHallFactory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Homestead;

use \Homestead\Exception\DatabaseException;

/**
 * ResidenceHallFactory - Factory methods to aid in creating ResidenceHall objects.
 *
 * @author jbooker
 * @package hms
*/
class ResidenceHallFactory {

    /**
     * Returns an array of ResidenceHall objects for the given term.
     *
     * @param integer $term
     * @throws \InvalidArgumentException
     * @throws DatabaseException
     * @return multitype:ResidenceHall
     */
    public static function getHallsForTerm($term)
    {
        if(!isset($term)){
            throw new \InvalidArgumentException('Missing term.');
        }

        $halls = array();

        $db = PdoFactory::getPdoInstance();
        $sql = "SELECT id
           FROM hms_residence_hall
           WHERE term = :term
           ORDER BY hall_name ASC";
        $sth = $db->prepare($sql);
        $sth->execute(array('term' => $term));
        $results = $sth->fetchAll(\PDO::FETCH_ASSOC);

        //TODO this is terribly inefficient
        foreach($results as $result){
            $halls[] = new ResidenceHall($result['id']);
        }

        return $halls;
    }

    /**
     * Returns a list of hall names in an associative array, where the array key is the hall's database id.
     *
     * @param integer $term
     * @throws \InvalidArgumentException
     * @return multitype:Array
     */
    public static function getHallNamesAssoc($term)
    {
        if(!isset($term)){
            throw new \InvalidArgumentException('Missing term.');
        }

        $hallArray = array();

        $halls = ResidenceHallFactory::getHallsForTerm($term);

        foreach ($halls as $hall){
            $hallArray[$hall->id] = $hall->hall_name;
        }

        return $hallArray;
    }
}