public function actionEditPermissionsConfig($id) { Yii::app()->user->can($id, 'edit configs', true); $model = $this->loadModel($id); $error = ''; $world = $model->world ? $model->world : 'world'; if (@$_POST['save'] === 'true') { require_once dirname(__FILE__) . '/../extensions/spyc/spyc.php'; $groups['groups'] = array(); $def = User::getLevelRole($model->default_level); $prev = false; foreach (User::$roles as $role) { if ($role == 'none') { continue; } $lbl = $role; //User::getRoleLabel($role); $groups['groups'][$lbl] = $this->getRolePerms($role, $role == $def, $_POST['prefix_' . $role], $_POST['suffix_' . $role], $_POST['build_' . $role] == 0, $_POST['perms_' . $role]); if ($prev) { $groups['groups'][$lbl]['inheritance'] = array($prev); } $prev = $lbl; } $plrs = Player::model()->findAllByAttributes(array('server_id' => $model->id)); $users['users'] = array(); foreach ($plrs as $plr) { $users['users'][$plr->name] = array('groups' => array(User::getLevelRole($plr->level))); } $groups = Spyc::YAMLDump($groups, 4, 0); $users = Spyc::YAMLDump($users, 4, 0); $groupsData = $groups ? str_replace(array('\\', ' ;'), array('\\\\', ' \\;'), $groups) : ''; $groupsData = preg_replace('/\\n\\r?/', ' ;', $groupsData); $usersData = $users ? str_replace(array('\\', ' ;'), array('\\\\', ' \\;'), $users) : ''; $usersData = preg_replace('/\\n\\r?/', ' ;', $usersData); $d = null; if (!McBridge::get()->serverCmd($id, 'cfgfile setlist:groups.yml:plugins/Permissions/' . $world . ':' . $groupsData, $d)) { $error = McBridge::get()->lastError(); } else { if (@$d[0]['accepted'] != 'True') { $error = isset($d[0]['message']) ? $d[0]['message'] : Yii::t('mc', 'Error updating config file!'); } else { if (!McBridge::get()->serverCmd($id, 'cfgfile setlist:users.yml:plugins/Permissions/' . $world . ':' . $usersData, $d)) { $error = McBridge::get()->lastError(); } else { if (@$d[0]['accepted'] != 'True') { $error = isset($d[0]['message']) ? $d[0]['message'] : Yii::t('mc', 'Error updating config file!'); } else { Yii::app()->user->setFlash('server', Yii::t('mc', 'Config File saved.')); $this->redirect(array('configs', 'id' => $id)); } } } } } else { require_once dirname(__FILE__) . '/../extensions/spyc/spyc.php'; $groupsData = array(); $usersData = array(); if (!McBridge::get()->serverCmd($id, 'cfgfile getlist:groups.yml:plugins/Permissions/' . $world . ':', $groupsData)) { $error = McBridge::get()->lastError(); } if (!McBridge::get()->serverCmd($id, 'cfgfile getlist:users.yml:plugins/Permissions/' . $world . ':', $usersData)) { $error = McBridge::get()->lastError(); } $users = ''; $groups = ''; if (count($groupsData)) { foreach ($groupsData as $line) { if (isset($line['line'])) { $groups .= $line['line'] . "\n"; } } } if (count($usersData)) { foreach ($usersData as $line) { if (isset($line['line'])) { $users .= $line['line'] . "\n"; } } } $groups = Spyc::YAMLLoadString($groups); foreach (User::$roles as $role) { if ($role == 'none') { continue; } $lbl = $role; //User::getRoleLabel($role); $_POST['prefix_' . $role] = @$groups['groups'][$lbl]['info']['prefix']; $_POST['suffix_' . $role] = @$groups['groups'][$lbl]['info']['suffix']; $_POST['build_' . $role] = isset($groups['groups'][$lbl]['info']['build']) && !$groups['groups'][$lbl]['info']['build'] ? 1 : 0; if (isset($groups['groups'][$lbl]['permissions'][0]) && $groups['groups'][$lbl]['permissions'][0]) { $_POST['perms_' . $role] = implode(', ', array_map(array($this, 'toYmlStr'), $groups['groups'][$lbl]['permissions'])); } } } $this->render('editPermissionsConfig', array('model' => $model, 'error' => $error)); }
* * Copyright © 2010-2012 by xhost.ch GmbH * * All rights reserved. * **/ $this->breadcrumbs = array(Yii::t('mc', 'Servers') => array('server/index'), $sv ? @Server::model()->findByPk((int) $sv)->name : Yii::t('mc', 'All') => $sv ? array('server/view', 'id' => $sv) : array('/server'), Yii::t('mc', 'Players') => $sv ? array('player/index', 'sv' => $sv) : array('player/admin'), $model->isNewRecord ? Yii::t('mc', 'New Player') : CHtml::encode($model->name)); if (!$model->isNewRecord) { $this->menu = array(array('label' => Yii::t('mc', 'Delete Player'), 'url' => '#', 'linkOptions' => array('submit' => array('delete', 'id' => $model->id), 'confirm' => Yii::t('mc', 'Are you sure you want to delete this player?'), 'csrf' => true), 'visible' => $edit, 'icon' => 'player_del')); } $this->menu[] = array('label' => Yii::t('mc', 'Back'), 'url' => $sv ? array('player/index', 'sv' => $sv) : array('player/admin'), 'icon' => 'back'); ?> <?php if (!$edit) { $attribs = array('name', 'level' => array('name' => 'level', 'value' => User::getRoleLabel(User::getLevelRole($model->level)))); $user = User::model()->findByPk((int) $model->user); if ($user) { $attribs[] = array('label' => Yii::t('mc', 'Belongs to'), 'type' => 'raw', 'value' => CHtml::encode($user->name)); } } else { $form = $this->beginWidget('CActiveForm', array('id' => 'player-form', 'enableAjaxValidation' => false)); if (!$sv) { $attribs[] = array('label' => $form->labelEx($model, 'server_id'), 'type' => 'raw', 'value' => $form->dropDownList($model, 'server_id', CHtml::listData(Server::model()->findAll(), 'id', 'name')) . ' ' . $form->error($model, 'server_id')); } $attribs[] = array('label' => $form->labelEx($model, 'name'), 'type' => 'raw', 'value' => $form->textField($model, 'name') . ' ' . $form->error($model, 'name')); $attribs[] = array('label' => $form->labelEx($model, 'level'), 'type' => 'raw', 'value' => $form->dropDownList($model, 'level', $playerRoles) . ' ' . $form->error($model, 'level')); if (count(@$users)) { $attribs[] = array('label' => Yii::t('mc', 'Assign to user'), 'type' => 'raw', 'value' => CHtml::dropDownList('user-assign', $model->user, array('0' => Yii::t('mc', 'None')) + CHtml::listData($users, 'id', 'name'))); } $attribs[] = array('label' => $form->labelEx($model, 'banned'), 'type' => 'raw', 'value' => $form->dropDownList($model, 'banned', array('' => Yii::t('mc', 'False'), 'true' => Yii::t('mc', 'True'))));
/** * Returns the current users role for the specified server */ public function serverRole($server) { if (isset($this->_serverRole[$server])) { return $this->_serverRole[$server]; } if ($this->isSuperuser()) { return 'owner'; } $sv = Server::model()->findByPk((int) $server); $role = $sv ? User::getLevelRole($sv->default_level) : ''; if (!$this->isGuest) { if ($r = $this->model->getServerRole($server)) { $role = $r; } if (User::getRoleLevel($role) < User::getRoleLevel($this->globalRole)) { $role = $this->globalRole; } } return $this->_serverRole[$server] = $this->checkSvRole($sv, $role); }