Resource icon

[OzzModz] XFRM Last Online Sort 1.0.0 Patch Level 3

No permission to download

Robert9

Well-known member
Dont no why, but the filter doesn't work for me anymore.
But the code looks correct.
 
Last edited:

Robert9

Well-known member
Every sort is shown in the filterbar, but i dont see last_update or last_activity if i choose them.
Checked the template (Downloads was commented, set back)
 

Robert9

Well-known member
Now i remember. The default is never shown, what makes no sense.
It should be shown like all others. If i change asc/desc of the default it is shown in the filer_bar.
But the last_activity is not there, no asc/desc.
I will try to go back to the last version, but ...

1.0 2
Code:
        $sorts = parent::getAvailableResourceSorts();

        if (\XF::visitor()->hasPermission('resource', 'pb_xfrmlos_canUse'))
        {
            $sorts['last_activity'] = 'User.last_activity';
            return $sorts;
        }

        return $sorts;

and
1.0; dont know where i have the 1.0 1
Code:
        $sorts = parent::getAvailableResourceSorts();

        return $sorts + [
            'last_activity' => 'User.last_activity',
        ];
 

Robert9

Well-known member
Hmm, have rebuild everything, now it seems to be ok.
Is this possible?

1. But there is still nothing shown in the filter_bar.
2. I muss the option to use it as default in acp.

I will look for both now.
 

Robert9

Well-known member
When i try this:

Code:
        $sorts = parent::getAvailableResourceSorts();

        if (\XF::visitor()->hasPermission('resource', 'pb_xfrmlos_canUse'))
        {
            $sorts['last_activity'] = 'User.last_activity';
        }

        $visitor = \XF::visitor();
        if ($visitor->user_id == 1)
        {
            echo "<pre>";
            print_r($sorts);
            echo "</pre>";
        }


        return $sorts;
    }

I get four(!) times this:

Code:
Array
(
    [last_update] => last_update
    [resource_date] => resource_date
    [rating_weighted] => rating_weighted
    [download_count] => download_count
    [title] => title
    [last_activity] => User.last_activity
)

Why this is called four times?
Because other classes are used four times and every time we do again our function here?



Is there any reason to have the return twice times instead one time?

Code:
        $sorts = parent::getAvailableResourceSorts();

        if (\XF::visitor()->hasPermission('resource', 'pb_xfrmlos_canUse'))
        {
            $sorts['last_activity'] = 'User.last_activity';
           // =>  return $sorts; <=
        }

        return $sorts;
 
Last edited:

Robert9

Well-known member
{{dump($filters.order)}} => last_activity
{{dump($sortOrders)}} => no last_activity

filter00.png


Without $sortOrders, we dont have the text in the filterbar.
 
Last edited:

Robert9

Well-known member
Found it!

xfrm_overview_macros

needs a template_mod to have:

Code:
<xf:macro name="list_filter_bar" arg-filters="!" arg-baseLinkPath="!" arg-category="{{ null }}" arg-creatorFilter="{{ null }}">
    <xf:set var="$sortOrders" value="{{ {
        'last_update': phrase('xfrm_last_update'),
        'resource_date': phrase('xfrm_submission_date'),
        'rating_weighted': phrase('rating'),
        'download_count': phrase('xfrm_downloads'),
        'title': phrase('title'),
        'last_activity': phrase('last_activity')                         
    } }}" />

Code:
  <modification type="public" template="xfrm_overview_macros" modification_key="pb_xfrmlos_overview_macros" execution_order="10" enabled="1" action="str_replace">
    <find><![CDATA['title': phrase('title')]]></find>
    <replace><![CDATA[$0,
        'last_activity': phrase('last_activity')]]></replace>
  </modification>


watcher.png
 
Last edited:

Robert9

Well-known member
Now there is still the problem with last_update DESC (not the fault of this addon)

{{dump($filters.order)}} is NULL for last_update DESC

While in xfrm/cp/overview we have
Code:
        $defaultOrder = $this->options()->xfrmListDefaultOrder ?: 'last_update';
        $defaultDir = $defaultOrder == 'title' ? 'asc' : 'desc';

        if (empty($filters['order']))
        {
            $filters['order'] = $defaultOrder;
        }
        if (empty($filters['direction']))
        {
            $filters['direction'] = $defaultDir;
        }

is checked

Code:
Array
(
    [order] => last_update
    [direction] => desc
)


there is still {{dump($filters.order)}} is NULL for last_update DESC

So it seems that we loose that on the way to the template?
 

Robert9

Well-known member
But how this is possible? If $filters is empty, we fill it.

Code:
        if (empty($filters['order']))
        {
            $filters['order'] = $defaultOrder;
        }
        if (empty($filters['direction']))
        {
            $filters['direction'] = $defaultDir;
        }

        $viewParams = [
            'category' => $category,
            'prefixesGrouped' => $prefixes->groupBy('prefix_group_id'),
            'filters' => $filters,
            'creatorFilter' => $creatorFilter,
            'showTypeFilters' => $showTypeFilters
        ];
        return $this->view('XFRM:Filters', 'xfrm_filters', $viewParams);
 

Robert9

Well-known member
The problem must be in

xfrm/cp/overview
public function getResourceFilterInput()

at the end $filters is empty, when last_update, desc
and not empty for last_update, asc and all others

Ok, found it:

Code:
            //if ($input['order'] != $defaultOrder || $input['direction'] != $defaultDir)
            if (1==1)
            {
                $filters['order'] = $input['order'];
                $filters['direction'] = $input['direction'];
            }

When filters == default and dir = default, we dont give filters back.
But why XF should do this? We we give infos about every filter, but not about the default one?
Makes no sense to me.
 
Top