use wcf\data\AbstractDatabaseObjectAction;
use wcf\system\clipboard\ClipboardHandler;
use wcf\system\comment\CommentHandler;
+use wcf\system\exception\PermissionDeniedException;
use wcf\system\exception\UserInputException;
use wcf\system\language\LanguageFactory;
use wcf\system\like\LikeHandler;
UserStorageHandler::getInstance()->resetAll('unreadArticles');
}
+ if ($article->publicationStatus == Article::PUBLISHED) {
+ ArticleEditor::updateArticleCounter([$article->userID => 1]);
+ }
+
return $article;
}
if (ARTICLE_ENABLE_VISIT_TRACKING) {
UserStorageHandler::getInstance()->resetAll('unreadArticles');
}
+
+ $publicationStatus = (isset($this->parameters['data']['publicationStatus'])) ? $this->parameters['data']['publicationStatus'] : null;
+ if ($publicationStatus !== null) {
+ $usersToArticles = [];
+ /** @var ArticleEditor $articleEditor */
+ foreach ($this->objects as $articleEditor) {
+ if ($publicationStatus != $articleEditor->publicationStatus) {
+ // The article was published before or was now published.
+ if ($publicationStatus == Article::PUBLISHED || $articleEditor->publicationStatus == Article::PUBLISHED) {
+ if (!isset($usersToArticles[$articleEditor->userID])) {
+ $usersToArticles[$articleEditor->userID] = 0;
+ }
+
+ $usersToArticles[$articleEditor->userID] += ($publicationStatus == Article::PUBLISHED) ? 1 : -1;
+ }
+ }
+ }
+
+ if (!empty($usersToArticles)) {
+ ArticleEditor::updateArticleCounter($usersToArticles);
+ }
+ }
}
/**
* @throws UserInputException
*/
public function validateDelete() {
- WCF::getSession()->checkPermissions(['admin.content.article.canManageArticle']);
-
if (empty($this->objects)) {
$this->readObjects();
}
foreach ($this->getObjects() as $article) {
+ if (!$article->canDelete()) {
+ throw new PermissionDeniedException();
+ }
+
if (!$article->isDeleted) {
throw new UserInputException('objectIDs');
}
* @throws UserInputException
*/
public function validateTrash() {
- WCF::getSession()->checkPermissions(['admin.content.article.canManageArticle']);
-
if (empty($this->objects)) {
$this->readObjects();
}
foreach ($this->getObjects() as $article) {
+ if (!$article->canDelete()) {
+ throw new PermissionDeniedException();
+ }
+
if ($article->isDeleted) {
throw new UserInputException('objectIDs');
}
* @throws UserInputException
*/
public function validatePublish() {
- WCF::getSession()->checkPermissions(['admin.content.article.canManageArticle']);
-
if (empty($this->objects)) {
$this->readObjects();
}
foreach ($this->getObjects() as $article) {
+ if (!$article->canPublish()) {
+ throw new PermissionDeniedException();
+ }
+
if ($article->publicationStatus == Article::PUBLISHED) {
throw new UserInputException('objectIDs');
}
* Publishes articles.
*/
public function publish() {
+ $usersToArticles = [];
foreach ($this->getObjects() as $articleEditor) {
$articleEditor->update([
'time' => TIME_NOW,
'publicationStatus' => Article::PUBLISHED,
'publicationDate' => 0
]);
+
+ if (!isset($usersToArticles[$articleEditor->userID])) {
+ $usersToArticles[$articleEditor->userID] = 0;
+ }
+
+ $usersToArticles[$articleEditor->userID]++;
}
+ ArticleEditor::updateArticleCounter($usersToArticles);
+
$this->unmarkItems();
}
* @throws UserInputException
*/
public function validateUnpublish() {
- WCF::getSession()->checkPermissions(['admin.content.article.canManageArticle']);
-
if (empty($this->objects)) {
$this->readObjects();
}
foreach ($this->getObjects() as $article) {
+ if (!$article->canPublish()) {
+ throw new PermissionDeniedException();
+ }
+
if ($article->publicationStatus != Article::PUBLISHED) {
throw new UserInputException('objectIDs');
}
* Unpublishes articles.
*/
public function unpublish() {
+ $usersToArticles = [];
foreach ($this->getObjects() as $articleEditor) {
$articleEditor->update(['publicationStatus' => Article::UNPUBLISHED]);
+
+ if (!isset($usersToArticles[$articleEditor->userID])) {
+ $usersToArticles[$articleEditor->userID] = 0;
+ }
+
+ $usersToArticles[$articleEditor->userID]--;
}
+ ArticleEditor::updateArticleCounter($usersToArticles);
+
$this->unmarkItems();
}