Merge remote branch 'statusnet/0.9.x' into 0.9.x

This commit is contained in:
Brion Vibber 2009-11-10 06:44:53 -08:00
commit 333c376c95
12 changed files with 187 additions and 74 deletions

View File

@ -191,6 +191,12 @@ StartPersonalGroupNav: beginning of personal group nav menu
EndPersonalGroupNav: end of personal group nav menu (good place to add a menu item) EndPersonalGroupNav: end of personal group nav menu (good place to add a menu item)
- $action: action object being shown - $action: action object being shown
StartGroupGroupNav: Showing the group nav menu
- $action: the current action
EndGroupGroupNav: At the end of the group nav menu
- $action: the current action
StartEndHTML: just before the </html> tag StartEndHTML: just before the </html> tag
- $action: action object being shown - $action: action object being shown
@ -489,6 +495,10 @@ ChangePassword: Handle a password change request
- $newpassword: the desired new password - $newpassword: the desired new password
- &$errormsg: set this to an error message if the password could not be changed. If the password was changed, leave this as false - &$errormsg: set this to an error message if the password could not be changed. If the password was changed, leave this as false
CanUserChangeField: Determines if a user is allowed to change a specific profile field
- $nickname: nickname of the user who would like to know which of their profile fields are mutable
- $field: name of the field the user wants to change (nickname, fullname, password, avatar, etc)
UserDeleteRelated: Specify additional tables to delete entries from when deleting users UserDeleteRelated: Specify additional tables to delete entries from when deleting users
- $user: User object - $user: User object
- &$related: array of DB_DataObject class names to delete entries on matching user_id. - &$related: array of DB_DataObject class names to delete entries on matching user_id.

View File

@ -146,8 +146,8 @@ class BlockAction extends Action
$this->hidden($k, $v); $this->hidden($k, $v);
} }
} }
$this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user from this group")); $this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user"));
$this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Block this user from this group')); $this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Block this user'));
$this->elementEnd('fieldset'); $this->elementEnd('fieldset');
$this->elementEnd('form'); $this->elementEnd('form');
} }

View File

@ -151,17 +151,19 @@ class GroupblockAction extends Action
function areYouSureForm() function areYouSureForm()
{ {
$id = $this->profile->id; $id = $this->profile->id;
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'form_settings form_entity_block',
'action' => common_local_url('groupblock')));
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->element('legend', _('Block user'));
$this->element('p', null, $this->element('p', null,
sprintf(_('Are you sure you want to block user "%s" from the group "%s"? '. sprintf(_('Are you sure you want to block user "%s" from the group "%s"? '.
'They will be removed from the group, unable to post, and '. 'They will be removed from the group, unable to post, and '.
'unable to subscribe to the group in the future.'), 'unable to subscribe to the group in the future.'),
$this->profile->getBestName(), $this->profile->getBestName(),
$this->group->getBestName())); $this->group->getBestName()));
$this->elementStart('form', array('id' => 'block-' . $id,
'method' => 'post',
'class' => 'block',
'action' => common_local_url('groupblock')));
$this->hidden('token', common_session_token());
$this->hidden('blockto-' . $this->profile->id, $this->hidden('blockto-' . $this->profile->id,
$this->profile->id, $this->profile->id,
'blockto'); 'blockto');
@ -173,8 +175,9 @@ class GroupblockAction extends Action
$this->hidden($k, $v); $this->hidden($k, $v);
} }
} }
$this->submit('no', _('No')); $this->submit('form_action-no', _('No'), 'submit form_action-primary', 'no', _("Do not block this user from this group"));
$this->submit('yes', _('Yes')); $this->submit('form_action-yes', _('Yes'), 'submit form_action-secondary', 'yes', _('Block this user from this group'));
$this->elementEnd('fieldset');
$this->elementEnd('form'); $this->elementEnd('form');
} }

View File

@ -58,6 +58,19 @@ class PasswordsettingsAction extends AccountSettingsAction
return _('Change password'); return _('Change password');
} }
function prepare($args){
parent::prepare($args);
$user = common_current_user();
Event::handle('CanUserChangeField', array($user->nickname, 'password'));
if(! $fields['password']){
//user is not allowed to change his password
$this->clientError(_('You are not allowed to change your password'));
}
}
/** /**
* Instructions for use * Instructions for use
* *
@ -86,6 +99,7 @@ class PasswordsettingsAction extends AccountSettingsAction
function showContent() function showContent()
{ {
$user = common_current_user(); $user = common_current_user();
$this->elementStart('form', array('method' => 'POST', $this->elementStart('form', array('method' => 'POST',
'id' => 'form_password', 'id' => 'form_password',
'class' => 'form_settings', 'class' => 'form_settings',

View File

@ -102,26 +102,31 @@ class AccountSettingsNav extends Widget
$this->action->elementStart('ul', array('class' => 'nav')); $this->action->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartAccountSettingsNav', array(&$this->action))) { if (Event::handle('StartAccountSettingsNav', array(&$this->action))) {
$user = common_current_user();
$menu = $menu = array();
array('profilesettings' => $menu['profilesettings'] =
array(_('Profile'), array(_('Profile'),
_('Change your profile settings')), _('Change your profile settings'));
'avatarsettings' => if(Event::handle('CanUserChangeField', array($user->nickname, 'avatar'))){
array(_('Avatar'), $menu['avatarsettings'] =
_('Upload an avatar')), array(_('Avatar'),
'passwordsettings' => _('Upload an avatar'));
array(_('Password'), }
_('Change your password')), if(Event::handle('CanUserChangeField', array($user->nickname, 'password'))){
'emailsettings' => $menu['passwordsettings'] =
array(_('Password'),
_('Change your password'));
}
$menu['emailsettings'] =
array(_('Email'), array(_('Email'),
_('Change email handling')), _('Change email handling'));
'userdesignsettings' => $menu['userdesignsettings'] =
array(_('Design'), array(_('Design'),
_('Design your profile')), _('Design your profile'));
'othersettings' => $menu['othersettings'] =
array(_('Other'), array(_('Other'),
_('Other options'))); _('Other options'));
foreach ($menu as $menuaction => $menudesc) { foreach ($menu as $menuaction => $menudesc) {
$this->action->menuItem(common_local_url($menuaction), $this->action->menuItem(common_local_url($menuaction),

View File

@ -38,6 +38,8 @@ define('FOREIGN_NOTICE_SEND_REPLY', 4);
define('FOREIGN_FRIEND_SEND', 1); define('FOREIGN_FRIEND_SEND', 1);
define('FOREIGN_FRIEND_RECV', 2); define('FOREIGN_FRIEND_RECV', 2);
if ( $_REQUEST['p'] == 'check-fancy') { exit; } //exit with 200 response, if this is checking fancy from the installer
define_syslog_variables(); define_syslog_variables();
# append our extlib dir as the last-resort place to find libs # append our extlib dir as the last-resort place to find libs

View File

@ -79,46 +79,49 @@ class GroupNav extends Widget
$nickname = $this->group->nickname; $nickname = $this->group->nickname;
$this->out->elementStart('ul', array('class' => 'nav')); $this->out->elementStart('ul', array('class' => 'nav'));
$this->out->menuItem(common_local_url('showgroup', array('nickname' => if (Event::handle('StartGroupGroupNav', array($this))) {
$nickname)), $this->out->menuItem(common_local_url('showgroup', array('nickname' =>
_('Group'),
sprintf(_('%s group'), $nickname),
$action_name == 'showgroup',
'nav_group_group');
$this->out->menuItem(common_local_url('groupmembers', array('nickname' =>
$nickname)),
_('Members'),
sprintf(_('%s group members'), $nickname),
$action_name == 'groupmembers',
'nav_group_members');
$cur = common_current_user();
if ($cur && $cur->isAdmin($this->group)) {
$this->out->menuItem(common_local_url('blockedfromgroup', array('nickname' =>
$nickname)),
_('Blocked'),
sprintf(_('%s blocked users'), $nickname),
$action_name == 'blockedfromgroup',
'nav_group_blocked');
$this->out->menuItem(common_local_url('editgroup', array('nickname' =>
$nickname)), $nickname)),
_('Admin'), _('Group'),
sprintf(_('Edit %s group properties'), $nickname), sprintf(_('%s group'), $nickname),
$action_name == 'editgroup', $action_name == 'showgroup',
'nav_group_admin'); 'nav_group_group');
$this->out->menuItem(common_local_url('grouplogo', array('nickname' => $this->out->menuItem(common_local_url('groupmembers', array('nickname' =>
$nickname)), $nickname)),
_('Logo'), _('Members'),
sprintf(_('Add or edit %s logo'), $nickname), sprintf(_('%s group members'), $nickname),
$action_name == 'grouplogo', $action_name == 'groupmembers',
'nav_group_logo'); 'nav_group_members');
$this->out->menuItem(common_local_url('groupdesignsettings', array('nickname' =>
$nickname)), $cur = common_current_user();
_('Design'),
sprintf(_('Add or edit %s design'), $nickname), if ($cur && $cur->isAdmin($this->group)) {
$action_name == 'groupdesignsettings', $this->out->menuItem(common_local_url('blockedfromgroup', array('nickname' =>
'nav_group_design'); $nickname)),
_('Blocked'),
sprintf(_('%s blocked users'), $nickname),
$action_name == 'blockedfromgroup',
'nav_group_blocked');
$this->out->menuItem(common_local_url('editgroup', array('nickname' =>
$nickname)),
_('Admin'),
sprintf(_('Edit %s group properties'), $nickname),
$action_name == 'editgroup',
'nav_group_admin');
$this->out->menuItem(common_local_url('grouplogo', array('nickname' =>
$nickname)),
_('Logo'),
sprintf(_('Add or edit %s logo'), $nickname),
$action_name == 'grouplogo',
'nav_group_logo');
$this->out->menuItem(common_local_url('groupdesignsettings', array('nickname' =>
$nickname)),
_('Design'),
sprintf(_('Add or edit %s design'), $nickname),
$action_name == 'groupdesignsettings',
'nav_group_design');
}
Event::handle('EndGroupGroupNav', array($this));
} }
$this->out->elementEnd('ul'); $this->out->elementEnd('ul');
} }

View File

@ -70,7 +70,7 @@ class Theme
// Check to see if it's in the local dir // Check to see if it's in the local dir
$localroot = INSTALLDIR.'/local/theme'; $localroot = self::localRoot();
$fulldir = $localroot.'/'.$name; $fulldir = $localroot.'/'.$name;
@ -82,11 +82,7 @@ class Theme
// Check to see if it's in the distribution dir // Check to see if it's in the distribution dir
$instroot = common_config('theme', 'dir'); $instroot = self::installRoot();
if (empty($instroot)) {
$instroot = INSTALLDIR.'/theme';
}
$fulldir = $instroot.'/'.$name; $fulldir = $instroot.'/'.$name;
@ -175,4 +171,77 @@ class Theme
$theme = new Theme($name); $theme = new Theme($name);
return $theme->getPath($relative); return $theme->getPath($relative);
} }
/**
* list available theme names
*
* @return array list of available theme names
*/
static function listAvailable()
{
$local = self::subdirsOf(self::localRoot());
$install = self::subdirsOf(self::installRoot());
$i = array_search('base', $install);
unset($install[$i]);
return array_merge($local, $install);
}
/**
* Utility for getting subdirs of a directory
*
* @param string $dir full path to directory to check
*
* @return array relative filenames of subdirs, or empty array
*/
protected static function subdirsOf($dir)
{
$subdirs = array();
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($filename = readdir($dh)) !== false) {
if ($filename != '..' && $filename !== '.' &&
is_dir($dir.'/'.$filename)) {
$subdirs[] = $filename;
}
}
closedir($dh);
}
}
return $subdirs;
}
/**
* Local root dir for themes
*
* @return string local root dir for themes
*/
protected static function localRoot()
{
return INSTALLDIR.'/local/theme';
}
/**
* Root dir for themes that are shipped with StatusNet
*
* @return string root dir for StatusNet themes
*/
protected static function installRoot()
{
$instroot = common_config('theme', 'dir');
if (empty($instroot)) {
$instroot = INSTALLDIR.'/theme';
}
return $instroot;
}
} }

View File

@ -102,4 +102,15 @@ class LdapPlugin extends Plugin
//return false, indicating that the event has been handled //return false, indicating that the event has been handled
return false; return false;
} }
function onCanUserChangeField($nickname, $field)
{
switch($field)
{
case 'password':
case 'nickname':
case 'email':
return false;
}
}
} }

View File

@ -102,8 +102,7 @@ class UserFlagPlugin extends Plugin
$action->elementStart('li', 'entity_flag'); $action->elementStart('li', 'entity_flag');
if (User_flag_profile::exists($profile->id, $user->id)) { if (User_flag_profile::exists($profile->id, $user->id)) {
$action->element('p', array(), $action->element('p', 'flagged', _('Flagged'));
_('Flagged for review'));
} else { } else {
$form = new FlagProfileForm($action, $profile, $form = new FlagProfileForm($action, $profile,
array('action' => 'showstream', array('action' => 'showstream',

BIN
plugins/UserFlag/flag.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

View File

@ -27,11 +27,8 @@ padding:0 4px;
} }
.notice-options input.submit { .notice-options input.submit {
font-size:0; font-size:0;
margin-top:3px;
height:16px;
text-align:right; text-align:right;
text-indent:0; text-indent:0;
width:24px;
} }
.notice div.entry-content .timestamp a { .notice div.entry-content .timestamp a {
margin-right:4px; margin-right:4px;