Skip to content

Commit

Permalink
Added support for label group show order and i18n names
Browse files Browse the repository at this point in the history
  • Loading branch information
dtdesign committed May 27, 2014
1 parent 0fff259 commit e76c454
Show file tree
Hide file tree
Showing 16 changed files with 174 additions and 30 deletions.
2 changes: 1 addition & 1 deletion wcfsetup/install/files/acp/templates/labelAdd.tpl
Expand Up @@ -49,7 +49,7 @@
<select id="groupID" name="groupID">
<option value="0">{lang}wcf.global.noSelection{/lang}</option>
{foreach from=$labelGroupList item=group}
<option value="{@$group->groupID}"{if $group->groupID == $groupID} selected="selected"{/if}>{$group->groupName}</option>
<option value="{@$group->groupID}"{if $group->groupID == $groupID} selected="selected"{/if}>{$group}</option>
{/foreach}
</select>
{if $errorField == 'groupID'}
Expand Down
16 changes: 13 additions & 3 deletions wcfsetup/install/files/acp/templates/labelGroupAdd.tpl
Expand Up @@ -18,6 +18,8 @@
{include file='aclPermissionJavaScript' containerID='groupPermissions' objectID=$groupID}
{/if}

{assign var=labelForceSelection value=$forceSelection}

<header class="boxHeadline">
<h1>{lang}wcf.acp.label.group.{$action}{/lang}</h1>
</header>
Expand Down Expand Up @@ -54,7 +56,7 @@
<dl{if $errorField == 'groupName'} class="formError"{/if}>
<dt><label for="groupName">{lang}wcf.acp.label.group.groupName{/lang}</label></dt>
<dd>
<input type="text" id="groupName" name="groupName" value="{$groupName}" autofocus="autofocus" class="long" />
<input type="text" id="groupName" name="groupName" value="{$i18nPlainValues['groupName']}" autofocus="autofocus" class="long" />
{if $errorField == 'groupName'}
<small class="innerError">
{if $errorType == 'empty'}
Expand All @@ -64,12 +66,20 @@
{/if}
</small>
{/if}
{include file='multipleLanguageInputJavascript' elementIdentifier='groupName' forceSelection=false}
</dd>
</dl>

<dl>
<dt><label for="showOrder">{lang}wcf.acp.label.group.showOrder{/lang}</label></dt>
<dd>
<input type="number" min="0" id="showOrder" name="showOrder" class="tiny" value="{if $showOrder}{@$showOrder}{/if}" />
</dd>
</dl>

<dl>
<dt class="reversed"><label for="forceSelection">{lang}wcf.acp.label.group.forceSelection{/lang}</label></dt>
<dd><input type="checkbox" name="forceSelection" id="forceSelection" value="1"{if $forceSelection} checked="checked"{/if} /></dd>
<dt></dt>
<dd><label><input type="checkbox" name="forceSelection" id="forceSelection" value="1"{if $labelForceSelection} checked="checked"{/if} /> {lang}wcf.acp.label.group.forceSelection{/lang}</label></dd>
</dl>

<dl id="groupPermissions">
Expand Down
4 changes: 3 additions & 1 deletion wcfsetup/install/files/acp/templates/labelGroupList.tpl
Expand Up @@ -47,6 +47,7 @@
<tr>
<th class="columnID columnLabelGroupID{if $sortField == 'groupID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='LabelGroupList'}pageNo={@$pageNo}&sortField=groupID&sortOrder={if $sortField == 'groupID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
<th class="columnTitle columnGroupName{if $sortField == 'groupName'} active {@$sortOrder}{/if}"><a href="{link controller='LabelGroupList'}pageNo={@$pageNo}&sortField=groupName&sortOrder={if $sortField == 'groupName' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.label.group.groupName{/lang}</a></th>
<th class="columnDigits columnShowOrder{if $sortField == 'showOrder'} active {@$sortOrder}{/if}"><a href="{link controller='LabelGroupList'}pageNo={@$pageNo}&sortField=showOrder&sortOrder={if $sortField == 'showOrder' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.label.group.showOrder{/lang}</a></th>

{event name='columnHeads'}
</tr>
Expand All @@ -62,7 +63,8 @@
{event name='rowButtons'}
</td>
<td class="columnID">{@$group->groupID}</td>
<td class="columnTitle columnGroupName"><a href="{link controller='LabelGroupEdit' object=$group}{/link}">{$group->groupName}</a></td>
<td class="columnTitle columnGroupName"><a href="{link controller='LabelGroupEdit' object=$group}{/link}">{$group}</a></td>
<td class="columnDigits columnShowOrder">{@$group->showOrder}</td>

{event name='columns'}
</tr>
Expand Down
2 changes: 1 addition & 1 deletion wcfsetup/install/files/acp/templates/labelList.tpl
Expand Up @@ -64,7 +64,7 @@
</td>
<td class="columnID">{@$label->labelID}</td>
<td class="columnTitle columnLabel"><a href="{link controller='LabelEdit' object=$label}{/link}" title="{$label}" class="badge label{if $label->getClassNames()} {$label->getClassNames()}{/if}">{$label}</a></td>
<td class="columnText columnGroup">{$label->groupName}</td>
<td class="columnText columnGroup">{lang}{$label->groupName}{/lang}</td>

{event name='columns'}
</tr>
Expand Down
52 changes: 46 additions & 6 deletions wcfsetup/install/files/lib/acp/form/LabelGroupAddForm.class.php
Expand Up @@ -5,8 +5,10 @@
use wcf\form\AbstractForm;
use wcf\system\acl\ACLHandler;
use wcf\system\exception\UserInputException;
use wcf\system\language\I18nHandler;
use wcf\system\WCF;
use wcf\util\StringUtil;
use wcf\data\label\group\LabelGroupEditor;

/**
* Shows the label group add form.
Expand Down Expand Up @@ -65,13 +67,21 @@ class LabelGroupAddForm extends AbstractForm {
*/
public $objectTypeID = 0;

/**
* show order
* @var integer
*/
public $showOrder = 0;

/**
* @see \wcf\page\AbstractPage::readParameters()
*/
public function readParameters() {
parent::readParameters();

$this->objectTypeID = ACLHandler::getInstance()->getObjectTypeID('com.woltlab.wcf.label');

I18nHandler::getInstance()->register('groupName');
}

/**
Expand All @@ -80,9 +90,13 @@ public function readParameters() {
public function readFormParameters() {
parent::readFormParameters();

I18nHandler::getInstance()->readValues();

if (I18nHandler::getInstance()->isPlainValue('groupName')) $this->groupName = I18nHandler::getInstance()->getValue('groupName');

if (isset($_POST['forceSelection'])) $this->forceSelection = true;
if (isset($_POST['groupName'])) $this->groupName = StringUtil::trim($_POST['groupName']);
if (isset($_POST['objectTypes']) && is_array($_POST['objectTypes'])) $this->objectTypes = $_POST['objectTypes'];
if (isset($_POST['showOrder'])) $this->showOrder = intval($_POST['showOrder']);
}

/**
Expand Down Expand Up @@ -112,9 +126,19 @@ public function readData() {
public function validate() {
parent::validate();

// validate class name
if (empty($this->groupName)) {
throw new UserInputException('groupName');
// validate group name
try {
if (!I18nHandler::getInstance()->validateValue('groupName')) {
if (I18nHandler::getInstance()->isPlainValue('groupName')) {
throw new UserInputException('groupName');
}
else {
throw new UserInputException('groupName', 'multilingual');
}
}
}
catch (UserInputException $e) {
$this->errorType[$e->getField()] = $e->getType();
}

// validate object type relations
Expand All @@ -134,10 +158,21 @@ public function save() {
// save label
$this->objectAction = new LabelGroupAction(array(), 'create', array('data' => array_merge($this->additionalFields, array(
'forceSelection' => ($this->forceSelection ? 1 : 0),
'groupName' => $this->groupName
'groupName' => $this->groupName,
'showOrder' => $this->showOrder
))));
$returnValues = $this->objectAction->executeAction();

if (!I18nHandler::getInstance()->isPlainValue('groupName')) {
I18nHandler::getInstance()->save('groupName', 'wcf.acp.label.group'.$returnValues['returnValues']->groupID, 'wcf.acp.label', 1);

// update group name
$groupEditor = new LabelGroupEditor($returnValues['returnValues']);
$groupEditor->update(array(
'groupName' => 'wcf.acp.label.group'.$returnValues['returnValues']->groupID
));
}

// save acl
ACLHandler::getInstance()->save($returnValues['returnValues']->groupID, $this->objectTypeID);
ACLHandler::getInstance()->disableAssignVariables();
Expand All @@ -155,12 +190,15 @@ public function save() {
$this->forceSelection = false;
$this->groupName = '';
$this->objectTypes = array();
$this->showOrder = 0;
$this->setObjectTypeRelations();

// show success
WCF::getTPL()->assign(array(
'success' => true
));

I18nHandler::getInstance()->reset();
}

/**
Expand All @@ -170,13 +208,15 @@ public function assignVariables() {
parent::assignVariables();

ACLHandler::getInstance()->assignVariables($this->objectTypeID);
I18nHandler::getInstance()->assignVariables();

WCF::getTPL()->assign(array(
'action' => 'add',
'forceSelection' => $this->forceSelection,
'groupName' => $this->groupName,
'labelObjectTypeContainers' => $this->labelObjectTypeContainers,
'objectTypeID' => $this->objectTypeID
'objectTypeID' => $this->objectTypeID,
'showOrder' => $this->showOrder
));
}

Expand Down
18 changes: 17 additions & 1 deletion wcfsetup/install/files/lib/acp/form/LabelGroupEditForm.class.php
Expand Up @@ -5,6 +5,7 @@
use wcf\form\AbstractForm;
use wcf\system\acl\ACLHandler;
use wcf\system\exception\IllegalLinkException;
use wcf\system\language\I18nHandler;
use wcf\system\WCF;

/**
Expand Down Expand Up @@ -59,10 +60,20 @@ public function readParameters() {
public function save() {
AbstractForm::save();

$this->groupName = 'wcf.acp.label.group'.$this->group->groupID;
if (I18nHandler::getInstance()->isPlainValue('groupName')) {
I18nHandler::getInstance()->remove($this->groupName);
$this->groupName = I18nHandler::getInstance()->getValue('groupName');
}
else {
I18nHandler::getInstance()->save('groupName', $this->groupName, 'wcf.acp.label', 1);
}

// update label
$this->objectAction = new LabelGroupAction(array($this->groupID), 'update', array('data' => array_merge($this->additionalFields, array(
'forceSelection' => ($this->forceSelection ? 1 : 0),
'groupName' => $this->groupName
'groupName' => $this->groupName,
'showOrder' => $this->showOrder
))));
$this->objectAction->executeAction();

Expand Down Expand Up @@ -92,8 +103,11 @@ public function readData() {
parent::readData();

if (empty($_POST)) {
I18nHandler::getInstance()->setOptions('groupName', 1, $this->group->groupName, 'wcf.acp.label.group\d+');

$this->forceSelection = ($this->group->forceSelection ? true : false);
$this->groupName = $this->group->groupName;
$this->showOrder = $this->group->showOrder;
}
}

Expand All @@ -103,6 +117,8 @@ public function readData() {
public function assignVariables() {
parent::assignVariables();

I18nHandler::getInstance()->assignVariables(!empty($_POST));

WCF::getTPL()->assign(array(
'action' => 'edit',
'groupID' => $this->groupID,
Expand Down
Expand Up @@ -21,12 +21,12 @@ class LabelGroupListPage extends SortablePage {
/**
* @see \wcf\page\SortablePage::$defaultSortField
*/
public $defaultSortField = 'groupName';
public $defaultSortField = 'showOrder';

/**
* @see \wcf\page\SortablePage::$validSortFields
*/
public $validSortFields = array('groupID', 'groupName');
public $validSortFields = array('groupID', 'groupName', 'showOrder');

/**
* @see \wcf\page\AbstractPage::$neededPermissions
Expand Down
27 changes: 26 additions & 1 deletion wcfsetup/install/files/lib/data/label/group/LabelGroup.class.php
Expand Up @@ -2,6 +2,7 @@
namespace wcf\data\label\group;
use wcf\data\DatabaseObject;
use wcf\system\request\IRouteController;
use wcf\system\WCF;

/**
* Represents a label group.
Expand All @@ -28,6 +29,30 @@ class LabelGroup extends DatabaseObject implements IRouteController {
* @see \wcf\data\ITitledObject::getTitle()
*/
public function getTitle() {
return $this->groupName;
return WCF::getLanguage()->get($this->groupName);
}

/**
* Returns label group title.
*
* @return string
*/
public function __toString() {
return $this->getTitle();
}

/**
* Callback for uasort() to sort label groups by show order and (if equal) group id.
*
* @param \wcf\data\DatabaseObject $groupA
* @param \wcf\data\DatabaseObject $groupB
* @return integer
*/
public static function sortLabelGroups(DatabaseObject $groupA, DatabaseObject $groupB) {
if ($groupA->showOrder == $groupB->showOrder) {
return ($groupA->groupID > $groupB->groupID) ? 1 : -1;
}

return ($groupA->showOrder > $groupB->showOrder) ? 1 : -1;
}
}
Expand Up @@ -17,4 +17,9 @@ class LabelGroupList extends DatabaseObjectList {
* @see \wcf\data\DatabaseObjectList::$className
*/
public $className = 'wcf\data\label\group\LabelGroup';

/**
* @see \wcf\data\DatabaseObjectList::$sqlOrderBy
*/
public $sqlOrderBy = 'label_group.showOrder ASC, label_group.groupID';
}
Expand Up @@ -27,7 +27,6 @@ protected function rebuild(array $parameters) {

// get label groups
$groupList = new LabelGroupList();
$groupList->sqlOrderBy = 'groupName';
$groupList->readObjects();
$groups = $groupList->getObjects();
foreach ($groups as &$group) {
Expand Down
24 changes: 24 additions & 0 deletions wcfsetup/install/files/lib/system/label/LabelHandler.class.php
Expand Up @@ -248,6 +248,22 @@ public function getAssignedLabels($objectTypeID, array $objectIDs, $validatePerm
}
}

// order label ids by label group
$labelGroups =& $this->labelGroups;
foreach ($data as &$labels) {
usort($labels, function($a, $b) use($labelGroups) {
$groupA = $labelGroups['groups'][$a->groupID];
$groupB = $labelGroups['groups'][$b->groupID];

if ($groupA->showOrder == $groupB->showOrder) {
return ($groupA->groupID > $groupB->groupID) ? 1 : -1;
}

return ($groupA->showOrder > $groupB->showOrder) ? 1 : -1;
});
}
unset($labels);

return $data;
}

Expand Down Expand Up @@ -298,6 +314,14 @@ public function getLabelGroups(array $groupIDs = array(), $validatePermissions =
$data[$groupID] = $this->labelGroups['groups'][$groupID];
}

uasort($data, function($a, $b) {
if ($a->showOrder == $b->showOrder) {

This comment has been minimized.

Copy link
@TimWolla

TimWolla May 27, 2014

Member

Can't you use LabelGroup::sortLabelGroups() here?

This comment has been minimized.

Copy link
@dtdesign

dtdesign May 27, 2014

Author Member

I can and I should. In fact I've added the method above way later and forgot about this one :)

return ($a->groupID > $b->groupID) ? 1 : -1;
}

return ($a->showOrder > $b->showOrder) ? 1 : -1;
});

return $data;
}

Expand Down

0 comments on commit e76c454

Please sign in to comment.