osmosis / branches / master / models / enrollment.php

history
<?php
/* SVN FILE: $Id$ */
/**
 * Ósmosis LMS: <http://www.osmosislms.org/>
 * Copyright 2008, Ósmosis LMS
 *
 * This file is part of Ósmosis LMS.
 * Ósmosis LMS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Ósmosis LMS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Ósmosis LMS.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @filesource
 * @copyright		Copyright 2008, Ósmosis LMS
 * @link			http://www.osmosislms.org/
 * @package			org.osmosislms
 * @subpackage		org.osmosislms.app
 * @since			Version 2.0 
 * @version			$Revision$
 * @modifiedby		$LastChangedBy$
 * @lastmodified	$Date$
 * @license			http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
 */
/**
 * Enrollment Model, handles a ternary relation between Member, Course and Role 
 * (Member role in each course)
 */
class Enrollment extends AppModel {
	var $name = 'Enrollment';
	var $useTable = 'courses_members';

	/**
	 * BelongsTo (1-N) relation descriptors
	 *
	 * @var array
	 **/
	var $belongsTo = array(
		// Enrollment BelongsTo Member (Enrolled Member)
		'Member' => array('className' => 'Member', 'foreignKey' => 'member_id'),
		// Enrollment BelongsTo Course (Course in which the Member is enrolled)
		'Course' => array('className' => 'Course', 'foreignKey' => 'course_id'),
		// Enrollment BelongsTo Role (Role of the Member)
		'Role' => array('className' => 'Role', 'foreignKey' => 'role_id')
	);
	
	/**
	 * Finds roles through its readable name
	 *
	 * @param mixed $role Role name(s)
	 * @param string $just_ids Wether the function should return only the ids of the roles
	 * @return mixed Array of roles (or ids) if found, false otherwise
	 */
	function roles($role = 'all', $just_ids = false) {
		$this->Role->recursive = -1;
		if ($role=='all') {
			return $this->Role->find('all');
		}
		if (is_string($role)) {
			$role = array($role);
		}
		$role = array_map(array('Inflector', 'camelize'), $role);
		$roles = $this->Role->find('all', array('conditions' => compact('role')));
		if ($just_ids) {
			$roles = Set::extract('/Role/id', $roles);
		}
		return $roles;
	}
	
	/**
	 * Returns an array with the course-specific roles
	 *
	 * @return array roles
	 **/
	function enrollableRoles() {
		$this->Role->recursive = -1;
		$enrollable_roles = array('Attendee'=>__('Attendee', true), 'Professor'=>__('Professor', true), 'Assistant'=>__('Assistant', true));
		return $this->Role->find('all', array('conditions' => array('role' => array_keys($enrollable_roles))));
	}
}
?>