getVarFiltersListing('cmd', 'users_ordering', 'id');
$data['orderingSortOrder'] = $this->getVarFiltersListing('cmd', 'users_ordering_sort_order', 'desc');
$data['pagination'] = new PaginationHelper();
$this->prepareSegmentField($data);
$this->prepareListingFilters($data);
$this->prepareUsersListing($data);
$this->prepareUsersSubscriptions($data);
$this->prepareUsersFields($data);
$this->prepareToolbar($data);
parent::display($data);
}
protected function prepareSegmentField(array &$data): void
{
$segmentClass = new SegmentClass();
$segments = $segmentClass->getAllForSelect();
$data['segments'] = [];
foreach ($segments as $id => $name) {
if (empty($id)) $id = 0;
$data['segments'][$id] = $name;
}
}
protected function prepareToolbar(array &$data): void
{
$toolbarHelper = new ToolbarHelper();
$toolbarHelper->addSearchBar($data['search'], 'users_search');
$toolbarHelper->addOptionSelect(
acym_translation('ACYM_SEGMENT'),
acym_select($data['segments'], 'segment', $data['segment'], ['class' => 'acym__select'])
);
$toolbarHelper->addOptionSelect(
acym_translation('ACYM_LIST'),
acym_select(
$data['lists'],
'users_list',
$data['list'],
['class' => 'acym__select']
)
);
$toolbarHelper->addOptionSelect(
acym_translation('ACYM_SUBSCRIPTION_STATUS'),
acym_select($data['list_statuses'], 'list_status', $data['list_status'], ['class' => 'acym__select'])
);
$toolbarHelper->addButton(
'ACYM_ACYCHECKER_CLEAN_USERS',
[
'data-task' => 'clean',
'type' => 'submit',
],
'user-check'
);
$exportButton = acym_translation('ACYM_EXPORT');
$exportButton .= ' (';
$exportButton .= acym_strtolower(acym_translation('ACYM_ALL'));
$exportButton .= ')';
$toolbarHelper->addButton(
$exportButton,
['data-task' => 'export', 'type' => 'submit'],
'download'
);
$toolbarHelper->addButton(acym_translation('ACYM_IMPORT'), ['data-task' => 'import'], 'upload');
$entityHelper = new EntitySelectHelper();
$toolbarHelper->addModalButton(
[
'button' => ''.esc_html(
acym_translation('ACYM_SUBSCRIBE')
).' (0)',
'modalContent' => $entityHelper->entitySelect(
[
'entity' => 'list',
'columnsToDisplay' => $entityHelper->getColumnsForList(),
'buttonSubmit' => [
'text' => acym_translation('ACYM_SUBSCRIBE_USERS_TO_THESE_LISTS'),
'action' => 'addToList',
],
]
),
'attributesButton' => [
'class' => 'button button-secondary disabled cell medium-6 large-shrink',
'id' => 'acym__users__listing__button--add-to-list',
],
]
);
$toolbarHelper->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'edit'], 'user-plus', true);
$data['toolbar'] = $toolbarHelper;
}
protected function prepareListingFilters(array &$data): void
{
$data['status'] = $this->getVarFiltersListing('string', 'users_status', '');
$data['search'] = $this->getVarFiltersListing('string', 'users_search', '');
$data['list'] = $this->getVarFiltersListing('int', 'users_list', 0);
$data['list_status'] = $this->getVarFiltersListing('string', 'list_status', 'sub');
$data['segment'] = $this->getVarFiltersListing('int', 'segment', 0);
$followupClass = new FollowupClass();
$listClass = new ListClass();
$lists = $listClass->getAll('id');
uasort(
$lists,
function ($a, $b) {
return strtolower($a->name) > strtolower($b->name) ? 1 : -1;
}
);
// This keeps keys
$data['lists'] = [0 => acym_translation('ACYM_SELECT_A_LIST')];
foreach ($lists as $oneList) {
if ($oneList->type === ListClass::LIST_TYPE_FRONT) continue;
if ($oneList->type === ListClass::LIST_TYPE_FOLLOWUP) {
$followup = $followupClass->getOneByListId($oneList->id);
if (empty($followup)) continue;
$oneList->name = $followup->display_name;
}
$data['lists'][$oneList->id] = $oneList->name;
}
$data['list_statuses'] = [
'sub' => acym_translation('ACYM_SUBSCRIBED'),
'unsub' => acym_translation('ACYM_UNSUBSCRIBED'),
'none' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'),
];
$data['status_toolbar'] = [];
if (!empty($data['list'])) {
$data['status_toolbar'] = [
'users_list' => $data['list'],
'list_status' => $data['list_status'],
];
}
if (!empty($data['segment'])) {
$data['status_toolbar'][] = $data['segment'];
}
}
protected function prepareUsersListing(array &$data): void
{
// Prepare the pagination
$usersPerPage = $data['pagination']->getListLimit();
$page = $this->getVarFiltersListing('int', 'users_pagination_page', 1);
$matchingUsers = $this->getMatchingElementsFromData(
[
'search' => $data['search'],
'elementsPerPage' => $usersPerPage,
'offset' => ($page - 1) * $usersPerPage,
'status' => $data['status'],
'ordering' => $data['ordering'],
'ordering_sort_order' => $data['orderingSortOrder'],
'list' => $data['list'],
'segment' => $data['segment'],
'list_status' => $data['list_status'],
'cms_username' => true,
],
$data['status'],
$page
);
// Prepare the pagination
$data['pagination']->setStatus($matchingUsers['total']->total, $page, $usersPerPage);
$data['allUsers'] = $matchingUsers['elements'];
$data['userNumberPerStatus'] = $matchingUsers['status'];
}
protected function prepareUsersSubscriptions(array &$data): void
{
$usersId = [];
foreach ($data['allUsers'] as $oneUser) {
$usersId[] = $oneUser->id;
}
$subscriptions = [];
if (!empty($usersId)) {
$userClass = new UserClass();
$subscriptionsArray = $userClass->getUsersSubscriptionsByIds($usersId);
foreach ($subscriptionsArray as $oneSubscription) {
$subscriptions[$oneSubscription->user_id][$oneSubscription->id] = $oneSubscription;
}
}
$data['usersSubscriptions'] = $subscriptions;
}
protected function prepareUsersFields(array &$data): void
{
$data['fields'] = [];
if (empty($data['allUsers'])) return;
$fieldClass = new FieldClass();
$fieldsToDisplay = $fieldClass->getAllFieldsBackendListing();
if (empty($fieldsToDisplay['ids'])) return;
$userIds = [];
foreach ($data['allUsers'] as $user) {
$userIds[] = $user->id;
}
$fieldValue = $fieldClass->getAllFieldsListingByUserIds($userIds, $fieldsToDisplay['ids'], 'field.backend_listing = 1');
$languages = acym_getLanguages();
$languageFieldId = $fieldClass->getLanguageFieldId();
foreach ($data['allUsers'] as &$user) {
$user->fields = [];
foreach ($fieldsToDisplay['ids'] as $fieldId) {
if ($fieldId == $languageFieldId) {
$user->fields[$fieldId] = empty($languages[$user->language]) ? $user->language : $languages[$user->language]->name;
} else {
$user->fields[$fieldId] = !isset($fieldValue[$fieldId.'-'.$user->id]) ? '' : $fieldValue[$fieldId.'-'.$user->id];
}
}
}
$data['fields'] = $fieldsToDisplay['names'];
}
public function addToList(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$listsSelected = json_decode(acym_getVar('string', 'acym__entity_select__selected', '[]'), true);
if (empty($listsSelected)) {
$listsSelected = [];
}
$selectedUserIds = acym_getVar('array', 'elements_checked', []);
$userClass = new UserClass();
$userClass->onlyManageableUsers($selectedUserIds);
$userClass->subscribe($selectedUserIds, $listsSelected);
$this->listing();
}
}