/** * Action to show a list of queueable resources. */ public function indexAction() { $this->view->headTitle($this->_headPrefix . 'Rig Selection'); /* Whether to enable the permission activation system. */ $this->view->renderPermActivation = $this->_config->permkey->enable; /* Load the permissions of the user. */ $client = Sahara_Soap::getSchedServerPermissionsClient(); $perms = $client->getPermissionsForUser(array('userQName' => $this->_auth->getIdentity())); if (!isset($perms->permission)) { $this->view->noPermissions = true; return; } /* Translate the permissions into a form to display based on user class. */ $userClasses = array(); $i = 1; foreach ($perms->permission as $perm) { /* This is a hack because PHPSoap / Zend SOAP seems to have some quirks * parsing WSDLs. It generates a different object structure * depending if there is one permission, or multiple permissions. */ if ($perm->permission == null) { if (is_bool($perm)) { continue; } $p = $perm; $perm = $perms; $perm->isLocked = $perm->permission->isLocked; } else { $p = $perm->permission; } /* Add the user class if it hasn't already been loaded. */ if (!array_key_exists($p->userClass->userClassName, $userClasses)) { $userClasses[$p->userClass->userClassName] = array(); } /* Load up resource information. */ $resource = array('canBook' => $p->canBook, 'canQueue' => $p->canQueue, 'resourceClass' => $p->resourceClass, 'resource' => $p->resource->resourceName, 'locked' => $perm->isLocked, 'active' => Sahara_DateTimeUtil::isBeforeNow($p->start) && Sahara_DateTimeUtil::isAfterNow($p->expiry), 'id' => 'permission' . $p->permissionID, 'start' => $p->start, 'expiry' => $p->expiry, 'permissionId' => $p->permissionID, 'display' => isset($p->displayName) ? $p->displayName : $p->resource->resourceName); array_push($userClasses[$p->userClass->userClassName], $resource); } /* Sort each of the user class permissions by resource name. */ foreach ($userClasses as $class => $permList) { $buckets = array(); foreach ($permList as $perm) { if (!array_key_exists($perm['resourceClass'], $buckets)) { $buckets[$perm['resourceClass']] = array(); } $bucket =& $buckets[$perm['resourceClass']]; if (array_key_exists($perm['display'], $bucket)) { $bucket[$perm['display'] . $perm['permissionId']] = $perm; } else { $bucket[$perm['display']] = $perm; } } foreach ($buckets as &$bucket) { ksort($bucket); } $userClasses[$class] = array('Rig Types:' => array_key_exists('TYPE', $buckets) ? $buckets['TYPE'] : array(), 'Specific Rigs:' => array_key_exists('RIG', $buckets) ? $buckets['RIG'] : array(), 'Other:' => array_key_exists('CAPABILITY', $buckets) ? $buckets['CAPABILITY'] : array()); } $this->view->userPermissions = $userClasses; }