Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pkp/pkp-lib#9914 editorial history #9941

Merged
merged 10 commits into from
Jun 11, 2024
29 changes: 15 additions & 14 deletions classes/components/forms/context/PKPMastheadForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,32 +89,33 @@ public function __construct($action, $locales, $context, $imageUploadUrl)
'value' => $context ? $context->getData('country') : null,
]))
->addGroup([
'id' => 'keyInfo',
'label' => __('manager.setup.keyInfo'),
'description' => __('manager.setup.keyInfo.description'),
'id' => 'editorialMasthead',
'label' => __('common.editorialMasthead'),
])
->addField(new FieldRichTextarea('description', [
'label' => __('manager.setup.contextSummary'),
->addField(new FieldRichTextarea('editorialHistory', [
'label' => __('common.editorialHistory'),
'description' => __('manager.setup.editorialMasthead.description'),
'isMultilingual' => true,
'groupId' => 'keyInfo',
'value' => $context->getData('description'),
]))
->addField(new FieldRichTextarea('editorialTeam', [
'label' => __('manager.setup.editorialTeam'),
'isMultilingual' => true,
'groupId' => 'keyInfo',
'groupId' => 'editorialMasthead',
'toolbar' => 'bold italic superscript subscript | link | blockquote bullist numlist | image | code',
'plugins' => 'paste,link,lists,image,code',
'uploadUrl' => $imageUploadUrl,
'value' => $context->getData('editorialTeam'),
'value' => $context->getData('editorialHistory'),
]))
->addGroup([
'id' => 'about',
'label' => __('common.description'),
'description' => __('manager.setup.contextAbout.description'),
])
->addField(new FieldRichTextarea('description', [
'label' => __('manager.setup.contextSummary'),
'description' => __('manager.setup.contextSummary.description'),
'isMultilingual' => true,
'groupId' => 'about',
'value' => $context->getData('description'),
]))
->addField(new FieldRichTextarea('about', [
'label' => __('manager.setup.contextAbout'),
'description' => __('manager.setup.contextAbout.description'),
'isMultilingual' => true,
'size' => 'large',
'groupId' => 'about',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

/**
* @file classes/migration/upgrade/v3_5_0/I9937_EditorialTeamToEditorialHistory.php
*
* Copyright (c) 2024 Simon Fraser University
* Copyright (c) 2024 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class I9937_EditorialTeamToEditorialHistory
*
* @brief Migrate/rename editorialTeam to editorialHistory context setting and remove Editorial Team navigation menu item.
*/

namespace PKP\migration\upgrade\v3_5_0;

use Illuminate\Support\Facades\DB;
use PKP\install\DowngradeNotSupportedException;
use PKP\migration\Migration;

abstract class I9937_EditorialTeamToEditorialHistory extends Migration
{
abstract protected function getContextSettingsTable(): string;

/**
* Run the migration.
*/
public function up(): void
{
DB::table($this->getContextSettingsTable())
->where('setting_name', '=', 'editorialTeam')
->update(['setting_name' => 'editorialHistory']);

// Because of the foreign keys constrains it is enough to
// only remove the entries from the table navigation_menu_items.
DB::table('navigation_menu_items')
->where('type', 'NMI_TYPE_EDITORIAL_TEAM')
->delete();
}

/**
* Reverse the migration
*/
public function down(): void
{
throw new DowngradeNotSupportedException();
}
}
2 changes: 0 additions & 2 deletions classes/navigationMenu/NavigationMenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class NavigationMenuItem extends \PKP\core\DataObject
public const NMI_TYPE_ABOUT = 'NMI_TYPE_ABOUT';
public const NMI_TYPE_SUBMISSIONS = 'NMI_TYPE_SUBMISSIONS';
public const NMI_TYPE_MASTHEAD = 'NMI_TYPE_MASTHEAD';
public const NMI_TYPE_EDITORIAL_TEAM = 'NMI_TYPE_EDITORIAL_TEAM';
public const NMI_TYPE_CONTACT = 'NMI_TYPE_CONTACT';
public const NMI_TYPE_ANNOUNCEMENTS = 'NMI_TYPE_ANNOUNCEMENTS';
public const NMI_TYPE_CUSTOM = 'NMI_TYPE_CUSTOM';
Expand Down Expand Up @@ -313,7 +312,6 @@ class_alias('\PKP\navigationMenu\NavigationMenuItem', '\NavigationMenuItem');
'NMI_TYPE_ABOUT',
'NMI_TYPE_SUBMISSIONS',
'NMI_TYPE_MASTHEAD',
'NMI_TYPE_EDITORIAL_TEAM',
'NMI_TYPE_CONTACT',
'NMI_TYPE_ANNOUNCEMENTS',
'NMI_TYPE_CUSTOM',
Expand Down
18 changes: 0 additions & 18 deletions classes/services/PKPNavigationMenuService.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,6 @@ public function getMenuItemTypes()
'title' => __('common.editorialMasthead'),
'description' => __('manager.navigationMenus.editorialMasthead.description'),
],
NavigationMenuItem::NMI_TYPE_EDITORIAL_TEAM => [
'title' => __('about.editorialTeam'),
'description' => __('manager.navigationMenus.editorialTeam.description'),
'conditionalWarning' => __('manager.navigationMenus.editorialTeam.conditionalWarning'),
],
NavigationMenuItem::NMI_TYPE_SUBMISSIONS => [
'title' => __('about.submissions'),
'description' => __('manager.navigationMenus.submissions.description'),
Expand Down Expand Up @@ -181,9 +176,6 @@ public function getDisplayStatus(&$navigationMenuItem, &$navigationMenu)
|| (!$context && $request->getSite()->getData('enableAnnouncements'))
);
break;
case NavigationMenuItem::NMI_TYPE_EDITORIAL_TEAM:
$navigationMenuItem->setIsDisplayed($context && $context->getLocalizedData('editorialTeam'));
break;
case NavigationMenuItem::NMI_TYPE_CONTACT:
$navigationMenuItem->setIsDisplayed($context && ($context->getData('mailingAddress') || $context->getData('contactName')));
break;
Expand Down Expand Up @@ -266,16 +258,6 @@ public function getDisplayStatus(&$navigationMenuItem, &$navigationMenu)
null
));
break;
case NavigationMenuItem::NMI_TYPE_EDITORIAL_TEAM:
$navigationMenuItem->setUrl($dispatcher->url(
$request,
PKPApplication::ROUTE_PAGE,
null,
'about',
'editorialTeam',
null
));
break;
case NavigationMenuItem::NMI_TYPE_CONTACT:
$navigationMenuItem->setUrl($dispatcher->url(
$request,
Expand Down
29 changes: 28 additions & 1 deletion classes/user/Collector.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class Collector implements CollectorInterface
public DAO $dao;

public string $orderBy = self::ORDERBY_ID;
public array $orderByUserGroupIds = [];
public string $orderDirection = 'ASC';
public ?array $orderLocales = null;
public ?array $userGroupIds = null;
Expand Down Expand Up @@ -206,7 +207,6 @@ public function filterByWorkflowStageIds(?array $workflowStageIds): self
return $this;
}


/**
* Limit results to users with user groups in these context IDs
*/
Expand Down Expand Up @@ -380,6 +380,17 @@ public function orderBy(string $sorter, string $direction = self::ORDER_DIR_DESC
return $this;
}

/**
* Order the results additionally by user group ID
*
* @param array $userGroupIds The IDs in the order the user query result should be ordered by
*/
public function orderByUserGroupIds(array $userGroupIds): self
{
$this->orderByUserGroupIds = $userGroupIds;
return $this;
}

/**
* Limit the number of objects retrieved
*/
Expand Down Expand Up @@ -732,6 +743,22 @@ protected function buildSearchFilter(Builder $query): self
*/
protected function buildOrderBy(Builder $query): self
{
if (!empty($this->orderByUserGroupIds)) {
$query->addSelect('uugob.user_group_id')
->leftJoin('user_user_groups AS uugob', 'uugob.user_id', '=', 'u.user_id');
switch (DB::getDriverName()) {
case 'mysql':
$userGroupOrderBy = implode(', ', $this->orderByUserGroupIds);
$query->orderByRaw("FIELD(uugob.user_group_id, {$userGroupOrderBy}) ASC");
break;
case 'pgsql':
$userGroupOrderBy = array_map(fn ($item) => 'uugob.user_group_id=' . $item, $this->orderByUserGroupIds);
$userGroupOrderBy = implode(', ', $userGroupOrderBy);
$query->orderByRaw("({$userGroupOrderBy}) ASC");
break;
}
}

$orderByFields = [self::ORDERBY_ID => 'u.user_id'];
if ($orderByField = $orderByFields[$this->orderBy] ?? null) {
$query->orderBy($orderByField, $this->orderDirection);
Expand Down
3 changes: 2 additions & 1 deletion classes/user/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,8 @@ public function mergeUsers(int $oldUserId, int $newUserId)
$userGroups = Repo::userGroup()->userUserGroups($oldUserId);
foreach ($userGroups as $userGroup) {
if (!Repo::userGroup()->userInGroup($newUserId, $userGroup->getId())) {
Repo::userGroup()->assignUserToGroup($newUserId, $userGroup->getId());
$mastheadStatus = Repo::userGroup()->getUserUserGroupMastheadStatus($oldUserId, $userGroup->getId());
Repo::userGroup()->assignUserToGroup($newUserId, $userGroup->getId(), null, null, $mastheadStatus);
}
}

Expand Down
Loading