User sortable list of articles
authorAlexander Ebert <ebert@woltlab.com>
Sat, 17 Nov 2018 23:31:13 +0000 (00:31 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Sat, 17 Nov 2018 23:31:13 +0000 (00:31 +0100)
Closes #2603

com.woltlab.wcf/templates/articleList.tpl
wcfsetup/install/files/lib/page/ArticleListPage.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 452b398d38c481db7d3cc9fc8ffbc155cd8444bd..8480e577b7cf918cc23f4e8d76c51ff2d1c46922 100644 (file)
        {/if}
 {/capture}
 
-{if $__wcf->getSession()->getPermission('admin.content.article.canManageArticle') || $__wcf->getSession()->getPermission('admin.content.article.canContributeArticle')}
-       {capture assign='contentHeaderNavigation'}
+{capture assign='contentHeaderNavigation'}
+       <li class="dropdown jsOnly">
+               <a href="#" class="button dropdownToggle"><span class="icon icon16 fa-sort-amount-asc"></span> <span>{lang}wcf.article.button.sort{/lang}</span></a>
+               <ul class="dropdownMenu">
+                       <li><a href="{link controller='ArticleList'}pageNo={@$pageNo}&sortField=title&sortOrder={if $sortField == 'title' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.title{/lang}{if $sortField == 'title'} <span class="icon icon16 fa-caret-{if $sortOrder == 'ASC'}up{else}down{/if}"></span>{/if}</a></li>
+                       <li><a href="{link controller='ArticleList'}pageNo={@$pageNo}&sortField=time&sortOrder={if $sortField == 'time' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.date{/lang}{if $sortField == 'time'} <span class="icon icon16 fa-caret-{if $sortOrder == 'ASC'}up{else}down{/if}"></span>{/if}</a></li>
+                       
+                       {event name='sortOptions'}
+               </ul>
+       </li>
+       
+       {if $__wcf->getSession()->getPermission('admin.content.article.canManageArticle') || $__wcf->getSession()->getPermission('admin.content.article.canContributeArticle')}
                <li><a href="{link controller='ArticleAdd' isACP=true}{/link}" class="button"><span class="icon icon16 fa-pencil"></span> <span>{lang}wcf.acp.article.add{/lang}</span></a></li>
-       {/capture}
-{/if}
+       {/if}
+{/capture}
 
 {capture assign='sidebarRight'}
        {if !$labelGroups|empty}
index 8911063f0d0b556797c0cc5c361d5198fe2163f3..48f438f2a5190897c638067e2179e25a7f244c19 100644 (file)
@@ -20,7 +20,7 @@ use wcf\util\HeaderUtil;
  * @package    WoltLabSuite\Core\Page
  * @since      3.0
  */
-class ArticleListPage extends MultipleLinkPage {
+class ArticleListPage extends SortablePage {
        /**
         * @inheritDoc
         */
@@ -76,6 +76,21 @@ class ArticleListPage extends MultipleLinkPage {
         */
        public $user;
        
+       /**
+        * @inheritDoc
+        */
+       public $defaultSortField = 'time';
+       
+       /**
+        * @inheritDoc
+        */
+       public $defaultSortOrder = 'DESC';
+       
+       /**
+        * @inheritDoc
+        */
+       public $validSortFields = ['title', 'time'];
+       
        /**
         * @inheritDoc
         */
@@ -134,6 +149,10 @@ class ArticleListPage extends MultipleLinkPage {
                parent::initObjectList();
                
                $this->applyFilters();
+               
+               if ($this->sortField === 'title') {
+                       $this->objectList->sqlSelects = "(SELECT title FROM wcf".WCF_N."_article_content WHERE articleID = article.articleID AND (languageID IS NULL OR languageID = ".WCF::getLanguage()->languageID.") LIMIT 1) AS title";
+               }
        }
        
        protected function applyFilters() {
index 2195b1454b661b7da890faf2f6c57724bbf53979..a0c7bb3d718d5ad99dbede2e7d7c8033582c0c06 100644 (file)
@@ -2452,6 +2452,7 @@ Benutzerkontos nun in vollem Umfang nutzen.]]></item>
                <item name="wcf.article.markAllAsRead"><![CDATA[Alle Artikel als gelesen markieren]]></item>
                <item name="wcf.article.showArticlesWritten"><![CDATA[Artikel von {$user->username}]]></item>
                <item name="wcf.article.recentActivity"><![CDATA[Hat den Artikel <a href="{$article->getLink()}">{$article->getTitle()}</a> verfasst.]]></item>
+               <item name="wcf.article.button.sort"><![CDATA[Sortieren]]></item>
        </category>
        <category name="wcf.attachment">
                <item name="wcf.attachment.file.info"><![CDATA[({@$attachment->filesize|filesize}, <b>{#$attachment->downloads}</b> Mal heruntergeladen{if $attachment->downloads > 0}, zuletzt: {@$attachment->lastDownloadTime|time}{/if})]]></item>
index 41655660d24d110be858ec3730bd6aa0210f4813..ecda00c69c3df0528c53bbe9d3ff4479f2ee3189 100644 (file)
@@ -2799,6 +2799,7 @@ full extend.]]></item>
                <item name="wcf.article.markAllAsRead"><![CDATA[Mark All Articles as Read]]></item>
                <item name="wcf.article.showArticlesWritten"><![CDATA[Articles by {$user->username}]]></item>
                <item name="wcf.article.recentActivity"><![CDATA[Wrote the article <a href="{$article->getLink()}">{$article->getTitle()}</a>.]]></item>
+               <item name="wcf.article.button.sort"><![CDATA[Sort]]></item>
        </category>
        <category name="wcf.attachment">
                <item name="wcf.attachment.file.info"><![CDATA[({@$attachment->filesize|filesize}, downloaded <b>{#$attachment->downloads}</b> times{if $attachment->downloads > 0}, last: {@$attachment->lastDownloadTime|time}{/if})]]></item>