public function getFarmWidgetRoles($farmId, $options) { $dbFarm = DBFarm::LoadById($farmId); $this->user->getPermissions()->validate($dbFarm); $dataFarmRoles = array(); $behaviors = array(); foreach ($options as $key => $value) { $matches = explode('_', $value); if ($matches[0] == 'behavior' && $matches[1]) { $behaviors[] = $matches[1]; } } foreach ($this->db->GetAll("SELECT id, platform, role_id, alias AS name FROM farm_roles WHERE farmid = ?", array($dbFarm->ID)) as $farmRole) { try { $dbRole = DBRole::loadById($farmRole['role_id']); if (!empty($behaviors)) { $bFilter = false; foreach ($behaviors as $behavior) { if ($dbRole->hasBehavior($behavior)) { $bFilter = true; break; } } if (!$bFilter) { continue; } } } catch (Exception $e) { $farmRole['name'] = '*removed*'; } array_push($dataFarmRoles, $farmRole); } if (count($dataFarmRoles) && in_array('addAll', $options)) { array_unshift($dataFarmRoles, array('id' => '0', 'name' => 'On all roles')); } if (in_array('addEmpty', $options)) { array_unshift($dataFarmRoles, array('id' => '', 'name' => '')); } if (!empty($dataFarmRoles)) { return $dataFarmRoles; } else { return null; } }
public function executeAction() { $farmId = $this->getParam('farmId'); $farmRoleId = $this->getParam('farmRoleId'); $serverId = $this->getParam('serverId'); $scriptId = $this->getParam('scriptId'); $eventName = $this->getParam('eventName'); $farms = array(); $farmRoles = array(); $servers = array(); $scripts = $this->getList(); sort($scripts); if ($eventName) { $scriptInfo = $this->db->GetRow("SELECT * FROM farm_role_scripts WHERE event_name=?", array($eventName)); if (!$scriptInfo) { throw new Exception("Scalr unable to find script execution options for used link"); } $farmId = $scriptInfo['farmid']; $farmRoleId = $scriptInfo['farm_roleid']; $scriptId = $scriptInfo['scriptid']; } if ($serverId) { $dbServer = DBServer::LoadByID($serverId); $farmRoleId = $dbServer->farmRoleId; } if ($farmRoleId) { $dbFarmRole = DBFarmRole::LoadByID($farmRoleId); $farmId = $dbFarmRole->FarmID; foreach ($dbFarmRole->GetServersByFilter(array('status' => SERVER_STATUS::RUNNING)) as $key => $value) { $servers[$value->serverId] = $value->remoteIp; } if (count($servers)) { $servers[0] = _('On all servers'); if (!$serverId) { $serverId = 0; } } } if ($farmId) { $dbFarm = DBFarm::LoadById($farmId); $this->user->getPermissions()->validate($dbFarm); $this->request->setParams(array('farmId' => $farmId)); $farmRoles = self::loadController('Roles', 'Scalr_UI_Controller_Farms')->getList(); if (count($farmRoles)) { $farmRoles[0] = array('id' => 0, 'name' => 'On all roles'); } } $farms = self::loadController('Farms')->getList(); $this->response->page('ui/scripts/execute.js', array('farms' => $farms, 'farmRoles' => $farmRoles, 'servers' => $servers, 'scripts' => $scripts, 'farmId' => $farmId, 'farmRoleId' => $farmRoleId, 'serverId' => $serverId, 'scriptId' => $scriptId, 'scriptIsSync' => $scriptInfo['issync'], 'scriptTimeout' => $scriptInfo['timeout'], 'scriptVersion' => $scriptInfo['version'], 'scriptOptions' => @unserialize($scriptInfo['params']))); }