<?php
/**
 * Rights user behavior class file.
 *
 * @author Christoffer Niska <cniska@live.com>
 * @copyright Copyright &copy; 2010 Christoffer Niska
 * @since 0.9.10
 */
class RUserBehavior extends CModelBehavior
{
    /**
     * @property the name of the id column.
     */
    public $idColumn;
    /**
     * @property the name of the name column.
     */
    public $nameColumn;
    private $_assignments;
    /**
     * Returns the value of the owner's id column.
     * Attribute name is retrived from the module configuration.
     * @return string the id.
     */
    public function getId()
    {
	if ($this->idColumn === null)
	    $this->idColumn = Rights::module()->userIdColumn;
	return $this->owner->{$this->idColumn};
    }
    /**
     * Returns the value of the owner's name column.
     * Attribute name is retrived from the module configuration.
     * @return string the name.
     */
    public function getName()
    {
	if ($this->nameColumn === null)
	    $this->nameColumn = Rights::module()->userNameColumn;
	return $this->owner->{$this->nameColumn};
    }
    /**
     * Returns a link labeled with the username pointing to the users assignments.
     * @return string the link markup.
     */
    public function getAssignmentNameLink()
    {
	return CHtml::link($this->getName(), array('assignment/user', 'id' => $this->getId()));
    }
    /**
     * Returns a string with names of the authorization items
     * of the given type that are assigned to this user.
     * @param integer $type the item type (0: operation, 1: task, 2: role).
     * @return mixed the assigned items. 
     */
    public function getAssignmentsText($type)
    {
	$assignedItems = $this->getAssignments();
	if (isset($assignedItems[$type]) === true)
	{
	    $items = $assignedItems[$type];
	    $names = array();
	    foreach ($items as $itemname => $item)
		$names[] = $item->getNameText();
	    return implode('<br />', $names);
	}
    }
    /**
     * Returns the authorization items assigned to the user.
     * @return string the assignments markup.
     */
    public function getAssignments()
    {
	if ($this->_assignments !== null)
	{
	    return $this->_assignments;
	}
	else
	{
	    $authorizer = Rights::getAuthorizer();
	    $authAssignments = $authorizer->authManager->getAuthAssignments($this->getId());
	    $nestedItems = $authorizer->authManager->getAuthItemsByNames(array_keys($authAssignments), true);
	    $assignments = array();
	    foreach ($nestedItems as $type => $items)
	    {
		$items = $authorizer->attachAuthItemBehavior($items);
		$assignments[$type] = array();
		foreach ($items as $itemName => $item)
		    $assignments[$type][$itemName] = $item;
	    }
	    return $this->_assignments = $assignments;
	}
    }
}
