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));
 }
Example #2
0
 *
 *   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'))));
Example #3
0
 /**
  * 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);
 }