User Onboarding

User Onboarding [Paid] 2.0.3

No permission to buy ($35.00)
I'm also interested in optional tasks. I just converted to XF from vB and would like to use this addon as a way of walking my existing members through a few new features.

But I don't want this to annoy long time members. For example, if they don't want to add a signature, I don't want to force them to forever look at an unfinished task list.

So I would love the ability for tasks to be optional. Or even a way of dismissing or hiding the task list all together. (without completing all tasks}
 
Can the "forums" selection and "category selection" be multi select? So that it's if they posted in certain categories or forums?
 
I'm also interested in optional tasks. I just converted to XF from vB and would like to use this addon as a way of walking my existing members through a few new features.

But I don't want this to annoy long time members. For example, if they don't want to add a signature, I don't want to force them to forever look at an unfinished task list.

So I would love the ability for tasks to be optional. Or even a way of dismissing or hiding the task list all together. (without completing all tasks}
Indeed, optional tasks would be a good addition and is something that will likely be added. A license holder is funding @TickTackk's development of this feature and is kindly open to contributing it back to the main add-on.
Can the "forums" selection and "category selection" be multi select? So that it's if they posted in certain categories or forums?
Yeah, I can look in to that for the next version.
 
Hey, nice add-on. I have a question, will be possible add permission hide this widget for specific group? For example on portal is admin who doesn't have avatar, but he still see widget and it is little annoying watch it all the time. :p :)
 
Hey, nice add-on. I have a question, will be possible add permission hide this widget for specific group? For example on portal is admin who doesn't have avatar, but he still see widget and it is little annoying watch it all the time. :p :)
Yes, you can put a standard display condition in the widget settings.

!$xf.visitor.is_admin
 
Works, thank you. And if there is more groups for disable? How to write it? !$xf.visitor.isMemberOf(36...) I try this !$xf.visitor.isMemberOf([35,36]) and it works, it is correct?
 
Last edited:
The total percentage of all tasks is more than 100%. This may cause confusion amongst users so it is advised to bring the total percentage back down to 100%.

Really? Hahaha. You may want to add a small button [FIX IT!]

User needs to add a thread in forum_id ...

When using this for something like a "present yourself", this is nice.
But when you just want to show people, what they can do in a forum, it makes sense to have something like:

Add a thread in any forum and/or in these forums.



People love my english. So in short:

1. Please offer an automatic calculation for the tasks.
2. Please offer a task: add a thread anywhere
3. Please offer a task: add a thread in one of these forums.
4. Please offer things to do and let them (have a thread in forum x)
5. Please offer things to do but dont care what happens with the result (create a thread in forum x that can be deleted or moved or ...)
 
Last edited:
BTW: Because of missing features i would like to force them doing a thread in a special forum, where threads are automatically deleted after some days. So - what happens if the thread for this task is deleted?
 
And i really miss the task: Please visit this url!
Is it really not here? Maybe i have not seen it?
This is maybe the most important part to lead people to FAQ and other pages, just to let them know that these pages are existing.
 
NixFifty updated User Onboarding with a new update entry:

Version 2.0.0

User Onboarding 2.0.0 is now available for all licensed customers to download. This update was funded by @Forsaken.
  • Improve performance when batch processing existing task completions.
  • Add advanced task type to allow tasks to use the standard user criteria for tasks.
  • Add support for optional tasks and allow them to be dismissed.
  • Users can view their onboarding tasks from within their account area.
  • Allow tasks to be organised by groups.
  • Allow tasks and task groups to have custom icons associated with...

Read the rest of this update entry...
 
This didn't come up in testing, but am getting it now:

Code:
LogicException: Class does not exist src/XF/Container.php:273

#0 src/addons/NF/UserOnboarding/Listener.php(102): XF\Container->createObject('', Array)
#1 src/XF/Container.php(234): NF\UserOnboarding\Listener::NF\UserOnboarding\{closure}('', Array, Object(XF\Container))
#2 src/XF/App.php(2377): XF\Container->create('nf_onboarding_t...', '', Array)
#3 src/addons/NF/UserOnboarding/UserOnboarding.php(16): XF\App->create('nf_onboarding_t...', '')
#4 src/addons/NF/UserOnboarding/Job/RetrospectiveTaskCompletion.php(36): NF\UserOnboarding\UserOnboarding::condition('')
#5 src/XF/Job/Manager.php(260): NF\UserOnboarding\Job\RetrospectiveTaskCompletion->run(8)
#6 src/addons/Hampel/JobRunner/XF/Job/Manager.php(87): XF\Job\Manager->runJobInternal(Array, 8)
#7 src/XF/Job/Manager.php(202): Hampel\JobRunner\XF\Job\Manager->runJobInternal(Array, 8)
#8 src/addons/Hampel/JobRunner/XF/Job/Manager.php(80): XF\Job\Manager->runJobEntry(Array, 8)
#9 src/XF/Job/Manager.php(86): Hampel\JobRunner\XF\Job\Manager->runJobEntry(Array, 8)
#10 src/addons/Hampel/JobRunner/XF/Job/Manager.php(24): XF\Job\Manager->runQueue(false, 8)
#11 job.php(43): Hampel\JobRunner\XF\Job\Manager->runQueue(false, 8)
#12 {main}

Happens when editing an existing task.
 
Code:
TypeError: NF\UserOnboarding\Repository\UserOnboarding::getUserTotalProfileCompletion(): Argument #1 ($tasks) must be of type XF\Mvc\Entity\AbstractCollection, SV\DailyStatistics\XF\Entity\User given, called in /data/web/virtuals/165777/virtual/www/src/addons/NF/UserOnboarding/XF/Entity/User.php on line 59 src/addons/NF/UserOnboarding/Repository/UserOnboarding.php:39
Generated by: xxxx 25 Únor 2022 v 07:36

Stack trace
#0 src/addons/NF/UserOnboarding/XF/Entity/User.php(59): NF\UserOnboarding\Repository\UserOnboarding->getUserTotalProfileCompletion(Object(SV\DailyStatistics\XF\Entity\User), NULL)
#1 src/addons/NF/UserOnboarding/Listener.php(184): NF\UserOnboarding\XF\Entity\User->getTaskCompletionPercentage()
#2 src/XF/Extension.php(69): NF\UserOnboarding\Listener::criteriaUser('nf_useronboardi...', Array, Object(SV\DailyStatistics\XF\Entity\User), false)
#3 src/XF/App.php(2853): XF\Extension->fire('criteria_user', Array, NULL)
#4 src/XF/Criteria/User.php(66): XF\App->fire('criteria_user', Array)
#5 src/XF/Criteria/AbstractCriteria.php(65): XF\Criteria\User->isUnknownMatched('nf_useronboardi...', Array, Object(SV\DailyStatistics\XF\Entity\User))
#6 src/XF/Repository/UserGroupPromotion.php(111): XF\Criteria\AbstractCriteria->isMatched(Object(SV\DailyStatistics\XF\Entity\User))
#7 src/XF/Pub/App.php(245): XF\Repository\UserGroupPromotion->updatePromotionsForUser(Object(SV\DailyStatistics\XF\Entity\User))
#8 src/XF/Pub/App.php(198): XF\Pub\App->updateUserCaches()
#9 src/XF/App.php(2347): XF\Pub\App->start(true)
#10 src/XF.php(517): XF\App->run()
#11 index.php(20): XF::runApp('XF\\Pub\\App')
#12 {main}

Get this error almost each minute... And it looks, users can`t log in (disable/enable addo-on and looks fine) , interesting... :D
 
Last edited:
@AscalonCZ If you're comfortable with getting your hands dirty, replace
PHP:
    public function getTaskCompletionPercentage(?AbstractCollection $tasks = null)
    {
        return $this->getNfTaskOnboardingRepo()->getUserTotalProfileCompletion($this, $tasks);
    }
with
PHP:
    public function getTaskCompletionPercentage(?AbstractCollection $tasks = null)
    {
        if ($tasks === null)
        {
            $tasks = $this->getNfTaskRepo()->findTasksForList()->withCompletionRelation($this)->withDismissedRelation($this)->fetch();
        }

        return $this->getNfTaskOnboardingRepo()->getUserTotalProfileCompletion($tasks, $this);
    }
in <path to xf root>/src/addons/NF/UserOnboarding/XF/Entity/User.php file.

This didn't come up in testing, but am getting it now:

Code:
LogicException: Class does not exist src/XF/Container.php:273

#0 src/addons/NF/UserOnboarding/Listener.php(102): XF\Container->createObject('', Array)
#1 src/XF/Container.php(234): NF\UserOnboarding\Listener::NF\UserOnboarding\{closure}('', Array, Object(XF\Container))
#2 src/XF/App.php(2377): XF\Container->create('nf_onboarding_t...', '', Array)
#3 src/addons/NF/UserOnboarding/UserOnboarding.php(16): XF\App->create('nf_onboarding_t...', '')
#4 src/addons/NF/UserOnboarding/Job/RetrospectiveTaskCompletion.php(36): NF\UserOnboarding\UserOnboarding::condition('')
#5 src/XF/Job/Manager.php(260): NF\UserOnboarding\Job\RetrospectiveTaskCompletion->run(8)
#6 src/addons/Hampel/JobRunner/XF/Job/Manager.php(87): XF\Job\Manager->runJobInternal(Array, 8)
#7 src/XF/Job/Manager.php(202): Hampel\JobRunner\XF\Job\Manager->runJobInternal(Array, 8)
#8 src/addons/Hampel/JobRunner/XF/Job/Manager.php(80): XF\Job\Manager->runJobEntry(Array, 8)
#9 src/XF/Job/Manager.php(86): Hampel\JobRunner\XF\Job\Manager->runJobEntry(Array, 8)
#10 src/addons/Hampel/JobRunner/XF/Job/Manager.php(24): XF\Job\Manager->runQueue(false, 8)
#11 job.php(43): Hampel\JobRunner\XF\Job\Manager->runQueue(false, 8)
#12 {main}

Happens when editing an existing task.
The temp fix is to run this query:
SQL:
update `xf_nf_useronboarding_task`
set `condition` = '{"handler":"NF\\\\UserOnboarding:AdvanceTask","options":[]}'
where task_type = 'advanced'
 
Last edited:
@AscalonCZ If you're comfortable with getting your hands dirty, replace
PHP:
public function getTaskCompletionPercentage(?AbstractCollection $tasks = null)
{
return $this->getNfTaskOnboardingRepo()->getUserTotalProfileCompletion($this, $tasks);
}
with
PHP:
public function getTaskCompletionPercentage(?AbstractCollection $tasks = null)
{
return $this->getNfTaskOnboardingRepo()->getUserTotalProfileCompletion($tasks, $this);
}
in <path to xf root>/src/addons/NF/UserOnboarding/XF/Entity/User.php file.

Nothing change :(
 
Hmm:

Code:
ErrorException: here src/XF/Error.php:77
Generated by: xxx 25 Únor 2022 v 09:45

Stack trace
#0 src/XF.php(218): XF\Error->logError('here', false)
#1 src/addons/NF/UserOnboarding/Condition/ContentReaction.php(79): XF::logError('here')
#2 src/XF/Extension.php(52): NF\UserOnboarding\Condition\ContentReaction->NF\UserOnboarding\Condition\{closure}(Object(XF\Entity\ReactionContent))
#3 src/XF.php(959): XF\Extension->fire('entity_post_sav...', Array, 'XF\\Entity\\React...')
#4 src/XF/Mvc/Entity/Entity.php(1276): XF::fire('entity_post_sav...', Array, 'XF\\Entity\\React...')
#5 src/XF/Repository/Reaction.php(191): XF\Mvc\Entity\Entity->save()
#6 src/XF/Repository/Reaction.php(144): XF\Repository\Reaction->insertReaction(1, 'post', 52837, Object(SV\DailyStatistics\XF\Entity\User), true, false)
#7 src/XF/ControllerPlugin/Reaction.php(67): XF\Repository\Reaction->reactToContent(1, 'post', 52837, Object(SV\DailyStatistics\XF\Entity\User), true)
#8 src/XF/ControllerPlugin/Reaction.php(21): XF\ControllerPlugin\Reaction->actionToggleReaction(Object(SV\ReportImprovements\XF\Entity\Post), 'posts/reactions', 'posts')
#9 src/XF/ControllerPlugin/Reaction.php(14): XF\ControllerPlugin\Reaction->actionReact(Object(SV\ReportImprovements\XF\Entity\Post), 'posts', 'posts/react', 'posts/reactions')
#10 src/XF/Pub/Controller/Post.php(381): XF\ControllerPlugin\Reaction->actionReactSimple(Object(SV\ReportImprovements\XF\Entity\Post), 'posts')
#11 src/XF/Mvc/Dispatcher.php(352): XF\Pub\Controller\Post->actionReact(Object(XF\Mvc\ParameterBag))
#12 src/XF/Mvc/Dispatcher.php(259): XF\Mvc\Dispatcher->dispatchClass('XF:Post', 'React', Object(XF\Mvc\RouteMatch), Object(TickTackk\ChangeContentOwner\XF\Pub\Controller\Post), NULL)
#13 src/XF/Mvc/Dispatcher.php(115): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(TickTackk\ChangeContentOwner\XF\Pub\Controller\Post), NULL)
#14 src/XF/Mvc/Dispatcher.php(57): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#15 src/XF/App.php(2351): XF\Mvc\Dispatcher->run()
#16 src/XF.php(517): XF\App->run()
#17 index.php(20): XF::runApp('XF\\Pub\\App')
#18 {main}
 
Top Bottom