bug fixes
This commit is contained in:
parent
c7c2c8d178
commit
736d341312
10 changed files with 148 additions and 132 deletions
|
|
@ -7,6 +7,13 @@
|
|||
- fix [ 1160034 ] 6.5.0 - newly added posts do not appear
|
||||
- fix [ 1027992 ] pagination in forum doesn't take you to correct page
|
||||
- fix [ 1149585 ] visitor as admin
|
||||
- Fixed a bug where the wrong toolbar was displayed for AssetProxied
|
||||
Navigation assets.
|
||||
- fix [ 1165010 ] Navigation Display title gets reset
|
||||
- fix [ 1159992 ] Integer value zero not returned in form fields
|
||||
- fix [ 1165425 ] View Userprofile - Style is missing for non-public profiles
|
||||
- fix [ 1165434 ] View Userprofile - Perm. denied page not parsed for macros
|
||||
- fix [ 1138654 ] 6.3 CVS - raw form parameter not processed
|
||||
|
||||
|
||||
6.5.2
|
||||
|
|
|
|||
|
|
@ -480,7 +480,7 @@ sub duplicate {
|
|||
my $self = shift;
|
||||
my $assetToDuplicate = shift || $self;
|
||||
my $newAsset = $self->addChild($assetToDuplicate->get);
|
||||
my $sth = WebGUI::SQL->read("select * from metaData_values where assetId = ".quote($self->getId));
|
||||
my $sth = WebGUI::SQL->read("select * from metaData_values where assetId = ".quote($assetToDuplicate->getId));
|
||||
while( my $h = $sth->hashRef) {
|
||||
WebGUI::SQL->write("insert into metaData_values (fieldId, assetId, value) values (".
|
||||
quote($h->{fieldId}).",".quote($newAsset->getId).",".quote($h->{value}).")");
|
||||
|
|
@ -1527,7 +1527,6 @@ Returns a toolbar with a set of icons that hyperlink to functions that delete, e
|
|||
|
||||
sub getToolbar {
|
||||
my $self = shift;
|
||||
return undef if ($self->{_toolbarOff});
|
||||
my $toolbar = deleteIcon('func=delete',$self->get("url"),WebGUI::International::get(43,"Asset"))
|
||||
.editIcon('func=edit',$self->get("url"))
|
||||
.moveUpIcon('func=promote',$self->get("url"))
|
||||
|
|
@ -1540,6 +1539,20 @@ sub getToolbar {
|
|||
return '<img src="'.$self->getIcon(1).'" border="0" title="'.$self->getName.'" alt="'.$self->getName.'" align="absmiddle">'.$toolbar;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getToolbarState ( )
|
||||
|
||||
Returns 0 if the state is normal, and 1 if the toolbar state has been toggled. See toggleToolbar() for details.
|
||||
|
||||
=cut
|
||||
|
||||
sub getToolbarState {
|
||||
my $self = shift;
|
||||
return $self->{_toolbarState};
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getUiLevel ( )
|
||||
|
|
@ -1602,7 +1615,10 @@ sub getValue {
|
|||
}
|
||||
$self->{_propertyDefinitions} = \%properties;
|
||||
}
|
||||
return $session{form}{$key} || $self->get($key) || $self->{_propertyDefinitions}{$key}{defaultValue};
|
||||
return $session{form}{$key} if (exists $session{form}{$key});
|
||||
my $storedValue = $self->get($key);
|
||||
return $storedValue if (defined $storedValue);
|
||||
return $self->{_propertyDefinitions}{$key}{defaultValue};
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
|
@ -2152,16 +2168,16 @@ sub trash {
|
|||
|
||||
=head2 toggleToolbar ( )
|
||||
|
||||
Toggles whether to render a toolbar in an asset. This is mostly useful for macros that wish to proxy an asset but not display the toolbar.
|
||||
Toggles a toolbar to a special state so that custom toolbars can be rendered under special circumstances. This is mostly useful for macros that wish to proxy an asset but not display the toolbar.
|
||||
|
||||
=cut
|
||||
|
||||
sub toggleToolbar {
|
||||
my $self = shift;
|
||||
if ($self->{_toolbarOff}) {
|
||||
$self->{_toolbarOff} = 0;
|
||||
if ($self->{_toolbarState}) {
|
||||
$self->{_toolbarState} = 0;
|
||||
} else {
|
||||
$self->{_toolbarOff} = 1;
|
||||
$self->{_toolbarState} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ package WebGUI::Asset::Event;
|
|||
use strict;
|
||||
use Tie::CPHash;
|
||||
use WebGUI::DateTime;
|
||||
use WebGUI::Form;
|
||||
use WebGUI::Grouping;
|
||||
use WebGUI::HTML;
|
||||
use WebGUI::HTMLForm;
|
||||
|
|
@ -160,7 +161,6 @@ sub definition {
|
|||
#-------------------------------------------------------------------
|
||||
sub getEditForm {
|
||||
my $self = shift;
|
||||
|
||||
my $tabform = $self->SUPER::getEditForm();
|
||||
#return $tabform;
|
||||
$tabform->getTab("properties")->HTMLArea(
|
||||
|
|
@ -253,14 +253,21 @@ sub getEditForm {
|
|||
'month'=>WebGUI::International::get(702,"EventsCalendar"),
|
||||
'year'=>WebGUI::International::get(703,"EventsCalendar"),
|
||||
);
|
||||
$tabform->getTab("properties")->raw(
|
||||
'<tr><td class="formdescription" valign="top">'.WebGUI::International::get(8,"EventsCalendar").'</td><td class="tableData">'
|
||||
);
|
||||
$tabform->getTab("properties")->integer("interval","",1,"","","",3);
|
||||
$tabform->getTab("properties")->selectList("recursEvery",\%recursEvery);
|
||||
$tabform->getTab("properties")->raw('<tr><td class="formdescription" valign="top">'.WebGUI::International::get(9,"EventsCalendar").'</td><td class="tableData">');
|
||||
$tabform->getTab("properties")->date("until");
|
||||
$tabform->getTab("properties")->raw("</td><tr>");
|
||||
$tabform->getTab("properties")->readOnly(
|
||||
-label=>WebGUI::International::get(8,"EventsCalendar"),
|
||||
-value=>WebGUI::Form::integer({
|
||||
name=>"interval",
|
||||
defaultValue=>1
|
||||
})
|
||||
.WebGUI::Form::selectList({
|
||||
name=>"recursEvery",
|
||||
options=>\%recursEvery
|
||||
})
|
||||
.' '.WebGUI::International::get(9,"EventsCalendar").' '
|
||||
.WebGUI::Form::date({
|
||||
name=>"until"
|
||||
})
|
||||
);
|
||||
}
|
||||
# $tabform->getTab("display")->template(
|
||||
# -name=>"confirmationTemplateId",
|
||||
|
|
@ -322,6 +329,47 @@ sub getName {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub processPropertiesFromFormPost {
|
||||
my $self = shift;
|
||||
$self->SUPER::processPropertiesFromFormPost;
|
||||
if ($session{form}{assetId} eq "new") {
|
||||
$self->update({eventEndDate=>$self->get("eventStartDate")}) unless ($self->get("eventEndDate") >= $self->get("eventStartDate"));
|
||||
if ($session{form}{recursEvery} ne "never") {
|
||||
my $until = WebGUI::DateTime::setToEpoch($session{form}{until});
|
||||
$until = $self->get("eventEndDate") unless ($until >= $self->get("eventEndDate"));
|
||||
my $interval = ($session{form}{interval} < 1) ? 1 : $session{form}{interval};
|
||||
my $recurringEventId = WebGUI::Id::generate();
|
||||
$self->update({EventsCalendar_recurringId=>$recurringEventId});
|
||||
my $start = $self->get("eventStartDate");
|
||||
my $end = $self->get("eventEndDate");
|
||||
my $i = 0;
|
||||
while ($start < $until) {
|
||||
$i++;
|
||||
if ($session{form}{recursEvery} eq "day") {
|
||||
$start = WebGUI::DateTime::addToDate($self->get("eventStartDate"),0,0,($i*$interval));
|
||||
$end = WebGUI::DateTime::addToDate($self->get("eventEndDate"),0,0,($i*$interval));
|
||||
} elsif ($session{form}{recursEvery} eq "week") {
|
||||
$start = WebGUI::DateTime::addToDate($self->get("eventStartDate"),0,0,(7*$i*$interval));
|
||||
$end = WebGUI::DateTime::addToDate($self->get("eventEndDate"),0,0,(7*$i*$interval));
|
||||
} elsif ($session{form}{recursEvery} eq "month") {
|
||||
$start = WebGUI::DateTime::addToDate($self->get("eventStartDate"),0,($i*$interval),0);
|
||||
$end = WebGUI::DateTime::addToDate($self->get("eventEndDate"),0,($i*$interval),0);
|
||||
} elsif ($session{form}{recursEvery} eq "year") {
|
||||
$start = WebGUI::DateTime::addToDate($self->get("eventStartDate"),($i*$interval),0,0);
|
||||
$end = WebGUI::DateTime::addToDate($self->get("eventEndDate"),($i*$interval),0,0);
|
||||
}
|
||||
my $newEvent = $self->getParent->duplicate($self);
|
||||
$newEvent->update({
|
||||
eventStartDate=>$start,
|
||||
eventEndDate=>$end
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub view {
|
||||
my $self = shift;
|
||||
|
|
@ -414,108 +462,6 @@ sub www_edit {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 www_editSave ( )
|
||||
|
||||
Saves the event or a new (series of) event(s).
|
||||
|
||||
=cut
|
||||
|
||||
sub www_editSave {
|
||||
my $self = shift;
|
||||
my $object = $self;
|
||||
# Somebody please help me debug this... it was adding recurring events just fine; then
|
||||
# I changed something and it stopped working... :( I suspect it has something to do
|
||||
# with processPropertiesFromFormPost. It's as if $session{form}{recursEvery} always equals never.
|
||||
|
||||
if ($session{form}{assetId} eq "new") {
|
||||
$self = $self->getParent() if ($self->getValue("className") eq "WebGUI::Asset::Event");
|
||||
return WebGUI::Privilege::insufficient() unless ($self->canEdit);
|
||||
my (@startDate, @endDate, @regStartDate, @regEndDate, @reminderStartDate,
|
||||
@reminderEndDate, $until, @eventId, $i, $recurringEventId);
|
||||
$startDate[0] = WebGUI::DateTime::setToEpoch($session{form}{eventStartDate});
|
||||
$startDate[0] = time() unless ($startDate[0] > 0);
|
||||
$endDate[0] = WebGUI::DateTime::setToEpoch($session{form}{eventEndDate});
|
||||
$endDate[0] = $startDate[0] unless ($endDate[0] >= $startDate[0]);
|
||||
# $regStartDate[0] = WebGUI::DateTime::setToEpoch($session{form}{regStartDate});
|
||||
# $regEndDate[0] = WebGUI::DateTime::setToEpoch($session{form}{regStartDate});
|
||||
# $regEndDate[0] = $regStartDate[0] unless ($regEndDate[0] >= $regStartDate[0]);
|
||||
# $reminderStartDate[0] = WebGUI::DateTime::setToEpoch($session{form}{reminderStartDate});
|
||||
# $reminderEndDate[0] = WebGUI::DateTime::setToEpoch($session{form}{reminderStartDate});
|
||||
# $reminderEndDate[0] = $reminderStartDate[0] unless ($reminderEndDate[0] >= $reminderStartDate[0]);
|
||||
$session{form}{title} = $session{form}{title} || WebGUI::International::get(557,"EventsCalendar");
|
||||
$until = WebGUI::DateTime::setToEpoch($session{form}{until});
|
||||
$until = $endDate[0] unless ($until >= $endDate[0]);
|
||||
$eventId[0] = WebGUI::Id::generate();
|
||||
$session{form}{interval} = 1 if ($session{form}{interval} < 1);
|
||||
if ($session{form}{recursEvery} eq "never") {
|
||||
$recurringEventId = 0;
|
||||
my $newEvent = $self->addChild({
|
||||
className=>"WebGUI::Asset::Event",
|
||||
title=>$session{form}{title},
|
||||
description=>$session{form}{description},
|
||||
EventsCalendar_recurringId=>$recurringEventId
|
||||
});
|
||||
$newEvent->processPropertiesFromFormPost;
|
||||
$newEvent->updateHistory("edited");
|
||||
$newEvent->{_parent} = $self;
|
||||
} else {
|
||||
$recurringEventId = WebGUI::Id::generate();
|
||||
my $firstEvent = $self->addChild({
|
||||
className=>"WebGUI::Asset::Event",
|
||||
title=>$session{form}{title},
|
||||
eventStartDate=>$startDate[0],
|
||||
eventEndDate=>$endDate[0],
|
||||
description=>$session{form}{description},
|
||||
EventsCalendar_recurringId=>$recurringEventId,
|
||||
eventLocation=>$session{form}{description},
|
||||
templateId=>$self->getValue("eventTemplateId")
|
||||
});
|
||||
$firstEvent->processPropertiesFromFormPost;
|
||||
$firstEvent->updateHistory("edited");
|
||||
$firstEvent->{_parent} = $self;
|
||||
while ($startDate[$i] < $until) {
|
||||
$i++;
|
||||
$eventId[$i] = WebGUI::Id::generate();
|
||||
if ($session{form}{recursEvery} eq "day") {
|
||||
$startDate[$i] = addToDate($startDate[0],0,0,($i*$session{form}{interval}));
|
||||
$endDate[$i] = addToDate($endDate[0],0,0,($i*$session{form}{interval}));
|
||||
} elsif ($session{form}{recursEvery} eq "week") {
|
||||
$startDate[$i] = addToDate($startDate[0],0,0,(7*$i*$session{form}{interval}));
|
||||
$endDate[$i] = addToDate($endDate[0],0,0,(7*$i*$session{form}{interval}));
|
||||
} elsif ($session{form}{recursEvery} eq "month") {
|
||||
$startDate[$i] = addToDate($startDate[0],0,($i*$session{form}{interval}),0);
|
||||
$endDate[$i] = addToDate($endDate[0],0,($i*$session{form}{interval}),0);
|
||||
} elsif ($session{form}{recursEvery} eq "year") {
|
||||
$startDate[$i] = addToDate($startDate[0],($i*$session{form}{interval}),0,0);
|
||||
$endDate[$i] = addToDate($endDate[0],($i*$session{form}{interval}),0,0);
|
||||
}
|
||||
my $newEvent = $self->duplicate($firstEvent);
|
||||
$newEvent->update({
|
||||
eventStartDate=>$startDate[$i],
|
||||
eventEndDate=>$endDate[$i]
|
||||
});
|
||||
print "\n$i\n";
|
||||
$newEvent->fixUrl;
|
||||
$newEvent->updateHistory("edited");
|
||||
$newEvent->{_parent} = $self;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return $self->getAdminConsole->render(WebGUI::Privilege::insufficient()) unless ($self->canEdit);
|
||||
$self->processPropertiesFromFormPost;
|
||||
$self->updateHistory("edited");
|
||||
}
|
||||
return $self->www_manageAssets if ($session{form}{proceed} eq "manageAssets" && $session{form}{assetId} eq "new");
|
||||
if ($session{form}{proceed} ne "") {
|
||||
my $method = "www_".$session{form}{proceed};
|
||||
$session{asset} = $object;
|
||||
return $object->$method();
|
||||
}
|
||||
return (($self->getParent)->getContainer)->www_view;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -182,6 +182,19 @@ sub getThumbnailUrl {
|
|||
return $self->getStorageLocation->getThumbnailUrl($self->get("filename"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getToolbar ( )
|
||||
|
||||
Returns a toolbar with a set of icons that hyperlink to functions that delete, edit, promote, demote, cut, and copy.
|
||||
|
||||
=cut
|
||||
|
||||
sub getToolbar {
|
||||
my $self = shift;
|
||||
return undef if ($self->getToolbarState);
|
||||
return $self->SUPER::getToolbar();
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub processPropertiesFromFormPost {
|
||||
|
|
|
|||
|
|
@ -104,6 +104,21 @@ sub getIcon {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getToolbar ( )
|
||||
|
||||
Returns a toolbar with a set of icons that hyperlink to functions that delete, edit, promote, demote, cut, and copy.
|
||||
|
||||
=cut
|
||||
|
||||
sub getToolbar {
|
||||
my $self = shift;
|
||||
return undef if ($self->getToolbarState);
|
||||
return $self->SUPER::getToolbar();
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getUiLevel ()
|
||||
|
|
|
|||
|
|
@ -88,13 +88,6 @@ sub definition {
|
|||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub duplicate {
|
||||
my $self = shift;
|
||||
return $self->getParent->duplicateTree($self);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getEditForm {
|
||||
|
|
@ -308,8 +301,8 @@ sub view {
|
|||
|
||||
foreach my $event (@{$children}) {
|
||||
if (ref $event eq "WebGUI::Asset::Event") {
|
||||
my $eventStartDate = $event->getValue("eventStartDate");
|
||||
my $eventEndDate = $event->getValue("eventEndDate");
|
||||
my $eventStartDate = $event->get("eventStartDate");
|
||||
my $eventEndDate = $event->get("eventEndDate");
|
||||
if ($eventStartDate > $eventEndDate) {
|
||||
#Fix bad data. Everything that has a beginning must have an end [no earlier than its beginning].
|
||||
$event->update({ "eventEndDate"=>$eventStartDate });
|
||||
|
|
@ -348,8 +341,8 @@ sub view {
|
|||
#Now also test to see if we're at the maxDate yet and after the minDate.
|
||||
if (($date[1] == $thisMonthDate[1]) && (WebGUI::DateTime::addToDate($eventStartDate,0,0,$i) <= ($maxDate + 2678400))){
|
||||
push(@{$events{$date[2]}}, {
|
||||
description=>$event->getValue("description"),
|
||||
name=>$event->getValue("title"),
|
||||
description=>$event->get("description"),
|
||||
name=>$event->get("title"),
|
||||
'start.date.human'=>$startDate,
|
||||
'start.time.human'=>$startTime." ".$startAmPm,
|
||||
'start.date.epoch'=>$eventStartDate,
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ use Tie::IxHash;
|
|||
use WebGUI::Asset::Wobject;
|
||||
use WebGUI::ErrorHandler;
|
||||
use WebGUI::Form;
|
||||
use WebGUI::Icon;
|
||||
use WebGUI::International;
|
||||
use WebGUI::Privilege;
|
||||
use WebGUI::Session;
|
||||
|
|
@ -27,6 +28,7 @@ our @ISA = qw(WebGUI::Asset::Wobject);
|
|||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub definition {
|
||||
my $class = shift;
|
||||
my $definition = shift;
|
||||
|
|
@ -71,6 +73,7 @@ sub definition {
|
|||
return $class->SUPER::definition($definition);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getEditForm {
|
||||
my $self = shift;
|
||||
my $tabform = $self->SUPER::getEditForm;
|
||||
|
|
@ -211,6 +214,7 @@ sub getEditForm {
|
|||
return $tabform;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getIcon {
|
||||
my $self = shift;
|
||||
my $small = shift;
|
||||
|
|
@ -218,11 +222,32 @@ sub getIcon {
|
|||
return $session{config}{extrasURL}.'/assets/navigation.gif';
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub getName {
|
||||
return WebGUI::International::get("navigation","Navigation");
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getToolbar ( )
|
||||
|
||||
Returns a toolbar with a set of icons that hyperlink to functions that delete, edit, promote, demote, cut, and copy.
|
||||
|
||||
=cut
|
||||
|
||||
sub getToolbar {
|
||||
my $self = shift;
|
||||
if ($self->getToolbarState) {
|
||||
my $toolbar = editIcon('func=edit',$self->get("url"));
|
||||
return '<img src="'.$self->getIcon(1).'" border="0" title="'.$self->getName.'" alt="'.$self->getName.'" align="absmiddle">'.$toolbar;
|
||||
}
|
||||
return $self->SUPER::getToolbar();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub view {
|
||||
my $self = shift;
|
||||
# we've got to determine what our start point is based upon user conditions
|
||||
|
|
@ -354,6 +379,7 @@ sub view {
|
|||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
sub www_edit {
|
||||
my $self = shift;
|
||||
return WebGUI::Privilege::insufficient() unless $self->canEdit;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ sub process {
|
|||
my ($url) = WebGUI::Macro::getParams(shift);
|
||||
my $asset = WebGUI::Asset->newByUrl($url);
|
||||
if (defined $asset) {
|
||||
$asset->toggleToolbar if ($asset->get("className") =~ /WebGUI::Asset::File/ || $asset->get("className") =~ /WebGUI::Asset::Snippet/ );
|
||||
$asset->toggleToolbar;
|
||||
return $asset->canView ? $asset->view : undef;
|
||||
} else {
|
||||
return "Invalid Asset URL";
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ sub www_viewProfile {
|
|||
$u = WebGUI::User->new($session{form}{uid});
|
||||
$vars->{displayTitle} = '<h1>'.WebGUI::International::get(347).' '.$u->username.'</h1>';
|
||||
return WebGUI::Privilege::notMember() if($u->username eq "");
|
||||
return $vars->{displayTitle}.WebGUI::International::get(862) if($u->profileField("publicProfile") < 1 && ($session{user}{userId} ne $session{form}{uid} || WebGUI::Grouping::isInGroup(3)));
|
||||
return WebGUI::Operation::Shared::userStyle($vars->{displayTitle}.WebGUI::International::get(862)) if($u->profileField("publicProfile") < 1 && ($session{user}{userId} ne $session{form}{uid} || WebGUI::Grouping::isInGroup(3)));
|
||||
return WebGUI::Privilege::insufficient() if(!WebGUI::Grouping::isInGroup(2));
|
||||
$a = WebGUI::SQL->read("select * from userProfileField,userProfileCategory where userProfileField.profileCategoryId=userProfileCategory.profileCategoryId
|
||||
and userProfileCategory.visible=1 and userProfileField.visible=1 order by userProfileCategory.sequenceNumber,
|
||||
|
|
|
|||
|
|
@ -4288,7 +4288,7 @@ A randomly generated number. This is often used on images (such as banner ads) t
|
|||
},
|
||||
|
||||
'38' => {
|
||||
message => q|You do not have sufficient privileges to perform this operation. Please ^a(log in with an account); that has sufficient privileges before attempting this operation.|,
|
||||
message => q|You do not have sufficient privileges to perform this operation. Please ^a(log in with an account); that has sufficient privileges before attempting this operation.|,
|
||||
lastUpdated => 1031514049
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue