groupFilter($conditions); $this->courseFilter($conditions); } public function onAcymProcessCondition_learndash_group(&$query, $options, $num, &$conditionNotValid): void { $this->processConditionFilter_learndash_group($query, $options, $num); $affectedRows = $query->count(); if (empty($affectedRows)) { $conditionNotValid++; } } public function onAcymProcessCondition_learndash_course(&$query, $options, $num, &$conditionNotValid): void { $this->processConditionFilter_learndash_course($query, $options, $num); $affectedRows = $query->count(); if (empty($affectedRows)) { $conditionNotValid++; } } public function onAcymDeclareSummary_conditions(&$automationCondition): void { $this->summaryConditionFilters($automationCondition); } private function groupFilter(&$conditions): void { $allGroups = acym_loadObjectList( 'SELECT post.post_title AS `text`, post.`ID` AS `value` FROM #__posts AS post WHERE post.`post_type` = "groups" AND post.`post_status` = "publish" ORDER BY post.post_title ASC' ); if (empty($allGroups)) { return; } $conditions['user'][self::FILTER_GROUP] = new stdClass(); $conditions['user'][self::FILTER_GROUP]->name = acym_translationSprintf('ACYM_COMBINED_TRANSLATIONS', 'Learndash', acym_translation('ACYM_GROUP')); $conditions['user'][self::FILTER_GROUP]->option = '
'; $operatorIn = new OperatorinType(); $conditions['user'][self::FILTER_GROUP]->option .= '
'; $conditions['user'][self::FILTER_GROUP]->option .= $operatorIn->display( 'acym_condition[conditions][__numor__][__numand__]['.self::FILTER_GROUP.']['.self::FILTER_GROUP_FIELD_IN.']' ); $conditions['user'][self::FILTER_GROUP]->option .= '
'; $conditions['user'][self::FILTER_GROUP]->option .= '
'; $conditions['user'][self::FILTER_GROUP]->option .= acym_selectMultiple( $allGroups, 'acym_condition[conditions][__numor__][__numand__]['.self::FILTER_GROUP.']['.self::FILTER_GROUP_FIELD_GROUP.']', [], [ 'class' => 'acym__select', 'data-placeholder' => acym_translation('ACYM_ANY_GROUP'), ] ); $conditions['user'][self::FILTER_GROUP]->option .= '
'; $conditions['user'][self::FILTER_GROUP]->option .= '
'; } private function courseFilter(&$conditions): void { $allCourses = acym_loadObjectList( 'SELECT post.post_title AS `text`, post.`ID` AS `value` FROM #__posts AS post WHERE post.`post_type` = "sfwd-courses" AND post.`post_status` = "publish" ORDER BY post.post_title ASC' ); if (empty($allCourses)) { return; } $conditions['user'][self::FILTER_COURSE] = new stdClass(); $conditions['user'][self::FILTER_COURSE]->name = acym_translationSprintf('ACYM_COMBINED_TRANSLATIONS', 'Learndash', 'Course'); $conditions['user'][self::FILTER_COURSE]->option = '
'; $operatorIn = new OperatorinType(); $conditions['user'][self::FILTER_COURSE]->option .= '
'; $conditions['user'][self::FILTER_COURSE]->option .= $operatorIn->display( 'acym_condition[conditions][__numor__][__numand__]['.self::FILTER_COURSE.']['.self::FILTER_COURSE_FIELD_IN.']' ); $conditions['user'][self::FILTER_COURSE]->option .= '
'; $conditions['user'][self::FILTER_COURSE]->option .= '
'; $conditions['user'][self::FILTER_COURSE]->option .= acym_selectMultiple( $allCourses, 'acym_condition[conditions][__numor__][__numand__]['.self::FILTER_COURSE.']['.self::FILTER_COURSE_FIELD_COURSE.']', [], [ 'class' => 'acym__select', 'data-placeholder' => acym_translation('ACYM_ANY'), ] ); $conditions['user'][self::FILTER_COURSE]->option .= '
'; $statuses = [ 'any' => acym_translation('ACYM_ANY_STATUS'), 'started' => acym_translation('ACYM_STARTED'), 'finished' => acym_translation('ACYM_FINISHED'), ]; $conditions['user'][self::FILTER_COURSE]->option .= '
'; $conditions['user'][self::FILTER_COURSE]->option .= acym_select( $statuses, 'acym_condition[conditions][__numor__][__numand__]['.self::FILTER_COURSE.']['.self::FILTER_COURSE_FIELD_STATUS.']', 'any', ['class' => 'acym__select'] ); $conditions['user'][self::FILTER_COURSE]->option .= '
'; $conditions['user'][self::FILTER_COURSE]->option .= '
'; } private function processConditionFilter_learndash_group(&$query, $options, $num): void { $metaGroupTable = self::FILTER_GROUP.$num; $joinMetaGroup = '#__usermeta AS '.$metaGroupTable.' ON '.$metaGroupTable.'.user_id = user.cms_id AND user.`cms_id` > 0 AND '.$metaGroupTable.'.`meta_key` LIKE "learndash_group_users_%" '; if (!empty($options[self::FILTER_GROUP_FIELD_GROUP])) { acym_arrayToInteger($options[self::FILTER_GROUP_FIELD_GROUP]); $joinMetaGroup .= ' AND '.$metaGroupTable.'.`meta_value` IN ('.implode(', ', $options[self::FILTER_GROUP_FIELD_GROUP]).') '; } if (empty($options[self::FILTER_GROUP_FIELD_IN]) || $options[self::FILTER_GROUP_FIELD_IN] === 'in') { $query->join[$metaGroupTable] = $joinMetaGroup; } else { $query->leftjoin[$metaGroupTable] = $joinMetaGroup; $query->where[] = $metaGroupTable.'.user_id IS NULL'; } } private function processConditionFilter_learndash_course(&$query, $options, $num): void { $activityCourseTable = '`'.self::FILTER_COURSE.$num.'`'; $userTable = '`'.self::FILTER_COURSE.'_user'.$num.'`'; $joinUser = '#__users AS '.$userTable.' ON '.$userTable.'.user_email = `user`.`email` COLLATE utf8mb4_unicode_520_ci AND `user`.`cms_id` > 0'; $joinActivityCourse = '#__learndash_user_activity AS '.$activityCourseTable.' ON '.$activityCourseTable.'.`user_id` = '.$userTable.'.`ID` AND '.$activityCourseTable.'.`activity_type` = "course" '; if (!empty($options[self::FILTER_COURSE_FIELD_COURSE])) { acym_arrayToInteger($options[self::FILTER_COURSE_FIELD_COURSE]); $joinActivityCourse .= ' AND '.$activityCourseTable.'.`course_id` IN ('.implode(', ', $options[self::FILTER_COURSE_FIELD_COURSE]).') '; } if (!empty($options[self::FILTER_COURSE_FIELD_STATUS]) && $options[self::FILTER_COURSE_FIELD_STATUS] !== 'any') { if ($options[self::FILTER_COURSE_FIELD_STATUS] === 'started') { $joinActivityCourse .= ' AND '.$activityCourseTable.'.`activity_status` = 0 '; } else { $joinActivityCourse .= ' AND '.$activityCourseTable.'.`activity_status` = 1 '; } } if (empty($options[self::FILTER_COURSE_FIELD_IN]) || $options[self::FILTER_COURSE_FIELD_IN] === 'in') { $query->join[$userTable] = $joinUser; $query->join[$activityCourseTable] = $joinActivityCourse; } else { $query->leftjoin[$userTable] = $joinUser; $query->leftjoin[$activityCourseTable] = $joinActivityCourse; $query->where[] = $activityCourseTable.'.`user_id` IS NULL'; } } private function summaryConditionFilters(&$automationCondition): void { $this->summaryGroup($automationCondition); $this->summaryCourse($automationCondition); } private function summaryGroup(&$automation): void { if (empty($automation[self::FILTER_GROUP])) { return; } if (empty($automation[self::FILTER_GROUP][self::FILTER_GROUP_FIELD_GROUP])) { $groups = acym_translation('ACYM_ANY_GROUP'); } else { acym_arrayToInteger($automation[self::FILTER_GROUP][self::FILTER_GROUP_FIELD_GROUP]); $groups = acym_loadResultArray( 'SELECT `post_title` FROM #__posts WHERE `ID` IN ('.implode(', ', $automation[self::FILTER_GROUP][self::FILTER_GROUP_FIELD_GROUP]).')' ); $groups = empty($groups) ? acym_translation('ACYM_UNKNOWN_GROUP') : implode(', ', $groups); } $finalText = acym_translationSprintf( 'ACYM_FILTER_ACY_GROUP_SUMMARY', acym_translation($automation[self::FILTER_GROUP][self::FILTER_GROUP_FIELD_IN] === 'in' ? 'ACYM_IN' : 'ACYM_NOT_IN'), $groups ); $automation = $finalText; } private function summaryCourse(&$automation): void { if (empty($automation[self::FILTER_COURSE])) { return; } if (empty($automation[self::FILTER_COURSE][self::FILTER_COURSE_FIELD_COURSE])) { $courses = acym_translation('ACYM_ANY'); } else { acym_arrayToInteger($automation[self::FILTER_COURSE][self::FILTER_COURSE_FIELD_COURSE]); $courses = acym_loadResultArray( 'SELECT `post_title` FROM #__posts WHERE `ID` IN ('.implode(', ', $automation[self::FILTER_COURSE][self::FILTER_COURSE_FIELD_COURSE]).')' ); $courses = empty($courses) ? acym_translation('ACYM_UNKNOWN') : implode(', ', $courses); } $finalText = acym_translationSprintf( 'ACYM_FILTER_ACY_GROUP_SUMMARY', acym_translation($automation[self::FILTER_COURSE][self::FILTER_COURSE_FIELD_IN] === 'in' ? 'ACYM_IN' : 'ACYM_NOT_IN'), $courses ); $automation = $finalText; } }