Merge branch '0.9.x' of git://gitorious.org/statusnet/mainline into 0.9.x
This commit is contained in:
commit
104a47e4a2
@ -67,7 +67,7 @@ class DeletenoticeAction extends Action
|
|||||||
common_user_error(_('Not logged in.'));
|
common_user_error(_('Not logged in.'));
|
||||||
exit;
|
exit;
|
||||||
} else if ($this->notice->profile_id != $this->user_profile->id &&
|
} else if ($this->notice->profile_id != $this->user_profile->id &&
|
||||||
!$this->user->hasRight(Right::deleteOthersNotice)) {
|
!$this->user->hasRight(Right::DELETEOTHERSNOTICE)) {
|
||||||
common_user_error(_('Can\'t delete this notice.'));
|
common_user_error(_('Can\'t delete this notice.'));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ class OpensearchAction extends Action
|
|||||||
$this->element('Url', array('type' => 'text/html', 'method' => 'get',
|
$this->element('Url', array('type' => 'text/html', 'method' => 'get',
|
||||||
'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---')))));
|
'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---')))));
|
||||||
$this->element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico'));
|
$this->element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico'));
|
||||||
$this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), theme_path('logo.png'));
|
$this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), Theme::path('logo.png'));
|
||||||
$this->element('AdultContent', null, 'false');
|
$this->element('AdultContent', null, 'false');
|
||||||
$this->element('Language', null, common_language());
|
$this->element('Language', null, common_language());
|
||||||
$this->element('OutputEncoding', null, 'UTF-8');
|
$this->element('OutputEncoding', null, 'UTF-8');
|
||||||
|
@ -102,6 +102,6 @@ class Avatar extends Memcached_DataObject
|
|||||||
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
|
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
|
||||||
AVATAR_STREAM_SIZE => 'stream',
|
AVATAR_STREAM_SIZE => 'stream',
|
||||||
AVATAR_MINI_SIZE => 'mini');
|
AVATAR_MINI_SIZE => 'mini');
|
||||||
return theme_path('default-avatar-'.$sizenames[$size].'.png');
|
return Theme::path('default-avatar-'.$sizenames[$size].'.png');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -705,10 +705,12 @@ class User extends Memcached_DataObject
|
|||||||
if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
|
if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
|
||||||
switch ($right)
|
switch ($right)
|
||||||
{
|
{
|
||||||
case Right::deleteOthersNotice:
|
case Right::DELETEOTHERSNOTICE:
|
||||||
$result = $this->hasRole('moderator');
|
$result = $this->hasRole(User_role::MODERATOR);
|
||||||
break;
|
break;
|
||||||
default:
|
case Right::CONFIGURESITE:
|
||||||
|
$result = $this->hasRole(User_role::ADMINISTRATOR);
|
||||||
|
default:
|
||||||
$result = false;
|
$result = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ class User_group extends Memcached_DataObject
|
|||||||
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
|
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
|
||||||
AVATAR_STREAM_SIZE => 'stream',
|
AVATAR_STREAM_SIZE => 'stream',
|
||||||
AVATAR_MINI_SIZE => 'mini');
|
AVATAR_MINI_SIZE => 'mini');
|
||||||
return theme_path('default-avatar-'.$sizenames[$size].'.png');
|
return Theme::path('default-avatar-'.$sizenames[$size].'.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
function homeUrl()
|
function homeUrl()
|
||||||
|
@ -45,4 +45,7 @@ class User_role extends Memcached_DataObject
|
|||||||
{
|
{
|
||||||
return Memcached_DataObject::pkeyGet('User_role', $kv);
|
return Memcached_DataObject::pkeyGet('User_role', $kv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MODERATOR = 'moderator';
|
||||||
|
const ADMINISTRATOR = 'administrator';
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
{
|
{
|
||||||
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/favicon.ico')) {
|
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/favicon.ico')) {
|
||||||
$this->element('link', array('rel' => 'shortcut icon',
|
$this->element('link', array('rel' => 'shortcut icon',
|
||||||
'href' => theme_path('favicon.ico')));
|
'href' => Theme::path('favicon.ico')));
|
||||||
} else {
|
} else {
|
||||||
$this->element('link', array('rel' => 'shortcut icon',
|
$this->element('link', array('rel' => 'shortcut icon',
|
||||||
'href' => common_path('favicon.ico')));
|
'href' => common_path('favicon.ico')));
|
||||||
@ -177,7 +177,7 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
if (common_config('site', 'mobile')) {
|
if (common_config('site', 'mobile')) {
|
||||||
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/apple-touch-icon.png')) {
|
if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/apple-touch-icon.png')) {
|
||||||
$this->element('link', array('rel' => 'apple-touch-icon',
|
$this->element('link', array('rel' => 'apple-touch-icon',
|
||||||
'href' => theme_path('apple-touch-icon.png')));
|
'href' => Theme::path('apple-touch-icon.png')));
|
||||||
} else {
|
} else {
|
||||||
$this->element('link', array('rel' => 'apple-touch-icon',
|
$this->element('link', array('rel' => 'apple-touch-icon',
|
||||||
'href' => common_path('apple-touch-icon.png')));
|
'href' => common_path('apple-touch-icon.png')));
|
||||||
@ -210,16 +210,16 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
|
|
||||||
if (Event::handle('StartShowUAStyles', array($this))) {
|
if (Event::handle('StartShowUAStyles', array($this))) {
|
||||||
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
|
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
|
||||||
'href="'.theme_path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
|
'href="'.Theme::path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
|
||||||
foreach (array(6,7) as $ver) {
|
foreach (array(6,7) as $ver) {
|
||||||
if (file_exists(theme_file('css/ie'.$ver.'.css', 'base'))) {
|
if (file_exists(Theme::file('css/ie'.$ver.'.css', 'base'))) {
|
||||||
// Yes, IE people should be put in jail.
|
// Yes, IE people should be put in jail.
|
||||||
$this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
|
$this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
|
||||||
'href="'.theme_path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
|
'href="'.Theme::path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
|
$this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
|
||||||
'href="'.theme_path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]');
|
'href="'.Theme::path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]');
|
||||||
Event::handle('EndShowUAStyles', array($this));
|
Event::handle('EndShowUAStyles', array($this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,9 +391,9 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
if (Event::handle('StartAddressData', array($this))) {
|
if (Event::handle('StartAddressData', array($this))) {
|
||||||
$this->elementStart('a', array('class' => 'url home bookmark',
|
$this->elementStart('a', array('class' => 'url home bookmark',
|
||||||
'href' => common_local_url('public')));
|
'href' => common_local_url('public')));
|
||||||
if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) {
|
if (common_config('site', 'logo') || file_exists(Theme::file('logo.png'))) {
|
||||||
$this->element('img', array('class' => 'logo photo',
|
$this->element('img', array('class' => 'logo photo',
|
||||||
'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : theme_path('logo.png'),
|
'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png'),
|
||||||
'alt' => common_config('site', 'name')));
|
'alt' => common_config('site', 'name')));
|
||||||
}
|
}
|
||||||
$this->element('span', array('class' => 'fn org'), common_config('site', 'name'));
|
$this->element('span', array('class' => 'fn org'), common_config('site', 'name'));
|
||||||
@ -1101,4 +1101,22 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
{
|
{
|
||||||
return Design::siteDesign();
|
return Design::siteDesign();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the session token.
|
||||||
|
*
|
||||||
|
* Checks that the current form has the correct session token,
|
||||||
|
* and throw an exception if it does not.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
|
function checkSessionToken()
|
||||||
|
{
|
||||||
|
// CSRF protection
|
||||||
|
$token = $this->trimmed('token');
|
||||||
|
if (empty($token) || $token != common_session_token()) {
|
||||||
|
$this->clientError(_('There was a problem with your session token.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +227,6 @@ require_once 'markdown.php';
|
|||||||
|
|
||||||
require_once INSTALLDIR.'/lib/util.php';
|
require_once INSTALLDIR.'/lib/util.php';
|
||||||
require_once INSTALLDIR.'/lib/action.php';
|
require_once INSTALLDIR.'/lib/action.php';
|
||||||
require_once INSTALLDIR.'/lib/theme.php';
|
|
||||||
require_once INSTALLDIR.'/lib/mail.php';
|
require_once INSTALLDIR.'/lib/mail.php';
|
||||||
require_once INSTALLDIR.'/lib/subs.php';
|
require_once INSTALLDIR.'/lib/subs.php';
|
||||||
require_once INSTALLDIR.'/lib/Shorturl_api.php';
|
require_once INSTALLDIR.'/lib/Shorturl_api.php';
|
||||||
|
@ -375,8 +375,8 @@ class HTMLOutputter extends XMLOutputter
|
|||||||
$url = parse_url($src);
|
$url = parse_url($src);
|
||||||
if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
|
if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
|
||||||
{
|
{
|
||||||
if(file_exists(theme_file($src,$theme))){
|
if(file_exists(Theme::file($src,$theme))){
|
||||||
$src = theme_path($src, $theme) . '?version=' . STATUSNET_VERSION;
|
$src = Theme::path($src, $theme) . '?version=' . STATUSNET_VERSION;
|
||||||
}else{
|
}else{
|
||||||
$src = common_path($src);
|
$src = common_path($src);
|
||||||
}
|
}
|
||||||
|
@ -513,7 +513,7 @@ class NoticeListItem extends Widget
|
|||||||
$user = common_current_user();
|
$user = common_current_user();
|
||||||
|
|
||||||
if (!empty($user) &&
|
if (!empty($user) &&
|
||||||
($this->notice->profile_id == $user->id || $user->hasRight(Right::deleteOthersNotice))) {
|
($this->notice->profile_id == $user->id || $user->hasRight(Right::DELETEOTHERSNOTICE))) {
|
||||||
|
|
||||||
$deleteurl = common_local_url('deletenotice',
|
$deleteurl = common_local_url('deletenotice',
|
||||||
array('notice' => $this->notice->id));
|
array('notice' => $this->notice->id));
|
||||||
|
@ -114,7 +114,7 @@ class NoticeSection extends Section
|
|||||||
$att_class = 'attachments';
|
$att_class = 'attachments';
|
||||||
}
|
}
|
||||||
|
|
||||||
$clip = theme_path('images/icons/clip.png', 'base');
|
$clip = Theme::path('images/icons/clip.png', 'base');
|
||||||
$this->out->elementStart('a', array('class' => $att_class, 'style' => "font-style: italic;", 'href' => $href, 'title' => "# of attachments: $count"));
|
$this->out->elementStart('a', array('class' => $att_class, 'style' => "font-style: italic;", 'href' => $href, 'title' => "# of attachments: $count"));
|
||||||
$this->out->raw(" ($count ");
|
$this->out->raw(" ($count ");
|
||||||
$this->out->element('img', array('style' => 'display: inline', 'align' => 'top', 'width' => 20, 'height' => 20, 'src' => $clip, 'alt' => 'alt'));
|
$this->out->element('img', array('style' => 'display: inline', 'align' => 'top', 'width' => 20, 'height' => 20, 'src' => $clip, 'alt' => 'alt'));
|
||||||
|
@ -45,6 +45,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
|
|
||||||
class Right
|
class Right
|
||||||
{
|
{
|
||||||
const deleteOthersNotice = 'deleteothersnotice';
|
const DELETEOTHERSNOTICE = 'deleteothersnotice';
|
||||||
|
const CONFIGURESITE = 'configuresite';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
188
lib/theme.php
188
lib/theme.php
@ -23,7 +23,7 @@
|
|||||||
* @package StatusNet
|
* @package StatusNet
|
||||||
* @author Evan Prodromou <evan@status.net>
|
* @author Evan Prodromou <evan@status.net>
|
||||||
* @author Sarven Capadisli <csarven@status.net>
|
* @author Sarven Capadisli <csarven@status.net>
|
||||||
* @copyright 2008 StatusNet, Inc.
|
* @copyright 2008-2009 StatusNet, Inc.
|
||||||
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
@ -33,62 +33,146 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the full path of a file in a theme dir based on its relative name
|
* Class for querying and manipulating a theme
|
||||||
*
|
*
|
||||||
* @param string $relative relative path within the theme directory
|
* Themes are directories with some expected sub-directories and files
|
||||||
* @param string $theme name of the theme; defaults to current theme
|
* in them. They're found in either local/theme (for locally-installed themes)
|
||||||
|
* or theme/ subdir of installation dir.
|
||||||
*
|
*
|
||||||
* @return string File path to the theme file
|
* This used to be a couple of functions, but for various reasons it's nice
|
||||||
|
* to have a class instead.
|
||||||
|
*
|
||||||
|
* @category Output
|
||||||
|
* @package StatusNet
|
||||||
|
* @author Evan Prodromou <evan@status.net>
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function theme_file($relative, $theme=null)
|
class Theme
|
||||||
{
|
{
|
||||||
if (empty($theme)) {
|
var $dir = null;
|
||||||
$theme = common_config('site', 'theme');
|
var $path = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* Determines the proper directory and path for this theme.
|
||||||
|
*
|
||||||
|
* @param string $name Name of the theme; defaults to config value
|
||||||
|
*/
|
||||||
|
|
||||||
|
function __construct($name=null)
|
||||||
|
{
|
||||||
|
if (empty($name)) {
|
||||||
|
$name = common_config('site', 'theme');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check to see if it's in the local dir
|
||||||
|
|
||||||
|
$localroot = INSTALLDIR.'/local/theme';
|
||||||
|
|
||||||
|
$fulldir = $localroot.'/'.$name;
|
||||||
|
|
||||||
|
if (file_exists($fulldir) && is_dir($fulldir)) {
|
||||||
|
$this->dir = $fulldir;
|
||||||
|
$this->path = common_path('local/theme/'.$name.'/');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check to see if it's in the distribution dir
|
||||||
|
|
||||||
|
$instroot = common_config('theme', 'dir');
|
||||||
|
|
||||||
|
if (empty($instroot)) {
|
||||||
|
$instroot = INSTALLDIR.'/theme';
|
||||||
|
}
|
||||||
|
|
||||||
|
$fulldir = $instroot.'/'.$name;
|
||||||
|
|
||||||
|
if (file_exists($fulldir) && is_dir($fulldir)) {
|
||||||
|
|
||||||
|
$this->dir = $fulldir;
|
||||||
|
|
||||||
|
$path = common_config('theme', 'path');
|
||||||
|
|
||||||
|
if (empty($path)) {
|
||||||
|
$path = common_config('site', 'path') . '/theme/';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($path[strlen($path)-1] != '/') {
|
||||||
|
$path .= '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($path[0] != '/') {
|
||||||
|
$path = '/'.$path;
|
||||||
|
}
|
||||||
|
|
||||||
|
$server = common_config('theme', 'server');
|
||||||
|
|
||||||
|
if (empty($server)) {
|
||||||
|
$server = common_config('site', 'server');
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX: protocol
|
||||||
|
|
||||||
|
$this->path = 'http://'.$server.$path.$name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$dir = common_config('theme', 'dir');
|
|
||||||
if (empty($dir)) {
|
/**
|
||||||
$dir = INSTALLDIR.'/theme';
|
* Gets the full local filename of a file in this theme.
|
||||||
|
*
|
||||||
|
* @param string $relative relative name, like 'logo.png'
|
||||||
|
*
|
||||||
|
* @return string full pathname, like /var/www/mublog/theme/default/logo.png
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getFile($relative)
|
||||||
|
{
|
||||||
|
return $this->dir.'/'.$relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the full HTTP url of a file in this theme
|
||||||
|
*
|
||||||
|
* @param string $relative relative name, like 'logo.png'
|
||||||
|
*
|
||||||
|
* @return string full URL, like 'http://example.com/theme/default/logo.png'
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getPath($relative)
|
||||||
|
{
|
||||||
|
return $this->path.'/'.$relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the full path of a file in a theme dir based on its relative name
|
||||||
|
*
|
||||||
|
* @param string $relative relative path within the theme directory
|
||||||
|
* @param string $name name of the theme; defaults to current theme
|
||||||
|
*
|
||||||
|
* @return string File path to the theme file
|
||||||
|
*/
|
||||||
|
|
||||||
|
static function file($relative, $name=null)
|
||||||
|
{
|
||||||
|
$theme = new Theme($name);
|
||||||
|
return $theme->getFile($relative);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the full URL of a file in a theme dir based on its relative name
|
||||||
|
*
|
||||||
|
* @param string $relative relative path within the theme directory
|
||||||
|
* @param string $name name of the theme; defaults to current theme
|
||||||
|
*
|
||||||
|
* @return string URL of the file
|
||||||
|
*/
|
||||||
|
|
||||||
|
static function path($relative, $name=null)
|
||||||
|
{
|
||||||
|
$theme = new Theme($name);
|
||||||
|
return $theme->getPath($relative);
|
||||||
}
|
}
|
||||||
return $dir.'/'.$theme.'/'.$relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the full URL of a file in a theme dir based on its relative name
|
|
||||||
*
|
|
||||||
* @param string $relative relative path within the theme directory
|
|
||||||
* @param string $theme name of the theme; defaults to current theme
|
|
||||||
*
|
|
||||||
* @return string URL of the file
|
|
||||||
*/
|
|
||||||
|
|
||||||
function theme_path($relative, $theme=null)
|
|
||||||
{
|
|
||||||
if (empty($theme)) {
|
|
||||||
$theme = common_config('site', 'theme');
|
|
||||||
}
|
|
||||||
|
|
||||||
$path = common_config('theme', 'path');
|
|
||||||
|
|
||||||
if (empty($path)) {
|
|
||||||
$path = common_config('site', 'path') . '/theme/';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($path[strlen($path)-1] != '/') {
|
|
||||||
$path .= '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($path[0] != '/') {
|
|
||||||
$path = '/'.$path;
|
|
||||||
}
|
|
||||||
|
|
||||||
$server = common_config('theme', 'server');
|
|
||||||
|
|
||||||
if (empty($server)) {
|
|
||||||
$server = common_config('site', 'server');
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX: protocol
|
|
||||||
|
|
||||||
return 'http://'.$server.$path.$theme.'/'.$relative;
|
|
||||||
}
|
}
|
||||||
|
85
scripts/userrole.php
Normal file
85
scripts/userrole.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* StatusNet - a distributed open-source microblogging tool
|
||||||
|
* Copyright (C) 2008, 2009, StatusNet, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
|
||||||
|
|
||||||
|
$shortoptions = 'i:n:r:d';
|
||||||
|
$longoptions = array('id=', 'nickname=', 'role=', 'delete');
|
||||||
|
|
||||||
|
$helptext = <<<END_OF_USERROLE_HELP
|
||||||
|
userrole.php [options]
|
||||||
|
modifies a role for the given user
|
||||||
|
|
||||||
|
-d --delete delete the role
|
||||||
|
-i --id ID of the user
|
||||||
|
-n --nickname nickname of the user
|
||||||
|
-r --role role to add (or delete)
|
||||||
|
|
||||||
|
END_OF_USERROLE_HELP;
|
||||||
|
|
||||||
|
require_once INSTALLDIR.'/scripts/commandline.inc';
|
||||||
|
|
||||||
|
if (have_option('i', 'id')) {
|
||||||
|
$id = get_option_value('i', 'id');
|
||||||
|
$user = User::staticGet('id', $id);
|
||||||
|
if (empty($user)) {
|
||||||
|
print "Can't find user with ID $id\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
} else if (have_option('n', 'nickname')) {
|
||||||
|
$nickname = get_option_value('n', 'nickname');
|
||||||
|
$user = User::staticGet('nickname', $nickname);
|
||||||
|
if (empty($user)) {
|
||||||
|
print "Can't find user with nickname '$nickname'\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print "You must provide either an ID or a nickname.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$role = get_option_value('r', 'role');
|
||||||
|
|
||||||
|
if (empty($role)) {
|
||||||
|
print "You must provide a role.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (have_option('d', 'delete')) {
|
||||||
|
print "Revoking role '$role' from user '$user->nickname' ($user->id)...";
|
||||||
|
try {
|
||||||
|
$user->revokeRole($role);
|
||||||
|
print "OK\n";
|
||||||
|
} catch (Exception $e) {
|
||||||
|
print "FAIL\n";
|
||||||
|
print $e->getMessage();
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print "Granting role '$role' to user '$user->nickname' ($user->id)...";
|
||||||
|
try {
|
||||||
|
$user->grantRole($role);
|
||||||
|
print "OK\n";
|
||||||
|
} catch (Exception $e) {
|
||||||
|
print "FAIL\n";
|
||||||
|
print $e->getMessage();
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user