<?php

class UserAdminController extends Nmc_Controller_Action
{
    public function indexAction()
    {
        $out = new Nmc_View();

        $groups = Groups::getInstance()->fetchAllWithoutPrimaries();

        $out->title = 'Group Administration';
        $out->page = 'user_admin';
        $out->groups = $groups;
        echo $out->render();
    }

    public function editUserAction()
    {
        $in = $this->_getAllParams();
        $userId = Zend_Filter::getInt($in['URI_PARAMS'][0]);

        if($in['Submit'] == 'Submit') {
            return $this->editUserActionPost();
        }

        $out = new Nmc_View();

        $out->title = 'Group Administration';
        $out->page = 'user_admin';

        if($userId < 0) {
            $out->user = People::getInstance()->fetchNew();
        } else {
            $out->user = People::getInstance()->find($userId);
        }
        $out->groups = Groups::getInstance()->fetchAllWithoutPrimaries();

        echo $out->render();
    }

    protected function editUserActionPost()
    {
        $in = $this->_getAllParams();
        $userId = Zend_Filter::getInt($in['URI_PARAMS'][0]);
        if(!$userId) {
            $user = People::getInstance()->fetchNew();
        } else {
            $user = People::getInstance()->find($userId);
        }

        if($in['delete'] == '1') {
            $user->delete();
        } else {
            $user->firstName = Zend_Filter::getAlnum($in['firstName']);
            $user->lastName = Zend_Filter::getAlnum($in['lastName']);
            $user->save();
        }

        $selectedGroups = Groups::getInstance()->findAll($in['groups']);
        $currentGroups = $user->getGroups(false);

        $removedGroups = $currentGroups->getRowsNotInCommonWith($selectedGroups);
        $newGroups = $selectedGroups->getRowsNotInCommonWith($currentGroups);

        foreach($removedGroups as $removedGroup) {
            $removedGroup->removeUser($user);
        }

        foreach($newGroups as $newGroup)
        {
            $newGroup->addUser($user);
        }


        $out = new Nmc_View();
        $out->refresh = '/UserAdmin/EditUser/' . $userId;
        echo $out->render();
    }

    public function editGroupAction()
    {
        $in = $this->_getAllParams();
        $groupId = Zend_Filter::getInt($in['URI_PARAMS'][0]);

        if($in['Submit'] == 'Submit') {
            return $this->editGroupActionPost();
        }

        $out = new Nmc_View();

        $out->title = 'Group Administration';
        $out->page = 'user_admin';

        if($groupId < 0) {
            $out->group = Groups::getInstance()->fetchNew();
        } else {
            $out->group = Groups::getInstance()->find($groupId);
        }
        $out->groups = Groups::getInstance()->fetchAllWithoutPrimaries();
        $out->users = People::getInstance()->fetchAll();
        $out->groups = Groups::getInstance()->fetchAllWithoutPrimaries();

        echo $out->render();
    }

    protected function editGroupActionPost()
    {
        $in = $this->_getAllParams();
        $groupId = Zend_Filter::getInt($in['URI_PARAMS'][0]);
        if(!$groupId) {
            $group = Groups::getInstance()->fetchNew();
            $group->type = 1;
        } else {
            $group = Groups::getInstance()->find($groupId);
        }

        if($in['delete'] == '1') {
            $group->delete();
        } else {
            $group->name = $in['name'];
            $group->description = $in['description'];
            $group->save();
        }

        $selectedGroups = Groups::getInstance()->findAll($in['groups']);
        $currentGroups = $group->getGroups(false);

        $removedGroups = $currentGroups->getRowsNotInCommonWith($selectedGroups);
        $newGroups = $selectedGroups->getRowsNotInCommonWith($currentGroups);

        foreach($removedGroups as $removedGroup) {
            $group->removeGroup($removedGroup);
        }

        foreach($newGroups as $newGroup)
        {
            $group->addGroup($newGroup);
        }

        $selectedUsers = People::getInstance()->findAll($in['users']);
        $currentUsers = $group->getUsers(false);

        $removedUsers = $currentUsers->getRowsNotInCommonWith($selectedUsers);
        $newUsers = $selectedUsers->getRowsNotInCommonWith($currentUsers);

        foreach($removedUsers as $removedUser) {
            $group->removeUser($removedUser);
        }

        foreach($newUsers as $newUser) {
            $group->addUser($newUser);
        }

        $out = new Nmc_View();
        $out->refresh = '/UserAdmin/EditGroup/' . $groupId;
        echo $out->render();
    }
}

?>