• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

Password Protected Nodes 1.2.9

No permission to download
Protected your nodes with more than permissions!

Liam W

Well-known member
#1
Liam W submitted a new resource:

Password Protected Nodes - Password protect forums and pages!

This addon was paid for as a custom (paid) development request, however the requester has allowed it to be released to the public :)

This addon will allow you to add a password to page and forum nodes, which will have to be entered when the node is accessed.

The password is stored in a cookie (encrypted), so that it doesn't have to be entered all the time the node is accessed.
Read more about this resource...
 

xf_phantom

Well-known member
#3
Great, just another addon overwriting the complete method and breaking all other addons extending the same class...:p

You should really avoid to do this, pls:)

PHP:
<?php

class PasswordProtectedForums_Extend_ControllerAdmin_Page extends XFCP_PasswordProtectedForums_Extend_ControllerAdmin_Page
{
   /* (non-PHPdoc)
    * @see XenForo_ControllerAdmin_Page::actionSave()
    */
   public function actionSave()
   {
     // TODO Auto-generated method stub
     $this->_assertPostOnly();

     if ($this->_input->filterSingle('delete', XenForo_Input::STRING))
     {
       return $this->responseReroute('XenForo_ControllerAdmin_Page', 'deleteConfirm');
     }

     $pageData = $this->_input->filter(array(
       'title' => XenForo_Input::STRING,
       'description' => XenForo_Input::STRING,
       'node_name' => XenForo_Input::STRING,
       'node_type_id' => XenForo_Input::BINARY,
       'parent_node_id' => XenForo_Input::UINT,
       'display_order' => XenForo_Input::UINT,
       'display_in_list' => XenForo_Input::UINT,
       'style_id' => XenForo_Input::UINT,
       'log_visits' => XenForo_Input::UINT,
       'list_siblings' => XenForo_Input::UINT,
       'list_children' => XenForo_Input::UINT,
       'callback_class' => XenForo_Input::STRING,
       'callback_method' => XenForo_Input::STRING,
       'node_password' => XenForo_Input::STRING,
     ));

     if (!$this->_input->filterSingle('style_override', XenForo_Input::UINT))
     {
       $pageData['style_id'] = 0;
     }

     $nodeId = $this->_input->filterSingle('node_id', XenForo_Input::UINT);

     $pageData['modified_date'] = XenForo_Application::$time;

     $nodeId = $this->_getPageModel()->savePage(
       $pageData,
       $this->_input->filterSingle('template', XenForo_Input::STRING),
       $nodeId,
       $this->_input->filterSingle('template_id', XenForo_Input::UINT)
     );

     return $this->responseRedirect(
       XenForo_ControllerResponse_Redirect::SUCCESS,
       XenForo_Link::buildAdminLink('nodes') . $this->getLastHash($nodeId)
     );
   }

}

//class XFCP_PasswordProtectedForums_Extend_ControllerAdmin_Page extends XenForo_ControllerAdmin_Page {}
 
Last edited:

Liam W

Well-known member
#4
Great, just another addon overwriting the complete method and breaking all other addons extending the same class...:p

You should really avoid to do this, pls:)

PHP:
<?php

class PasswordProtectedForums_Extend_ControllerAdmin_Page extends XFCP_PasswordProtectedForums_Extend_ControllerAdmin_Page
{
   /* (non-PHPdoc)
    * @see XenForo_ControllerAdmin_Page::actionSave()
    */
   public function actionSave()
   {
     // TODO Auto-generated method stub
     $this->_assertPostOnly();

     if ($this->_input->filterSingle('delete', XenForo_Input::STRING))
     {
       return $this->responseReroute('XenForo_ControllerAdmin_Page', 'deleteConfirm');
     }

     $pageData = $this->_input->filter(array(
       'title' => XenForo_Input::STRING,
       'description' => XenForo_Input::STRING,
       'node_name' => XenForo_Input::STRING,
       'node_type_id' => XenForo_Input::BINARY,
       'parent_node_id' => XenForo_Input::UINT,
       'display_order' => XenForo_Input::UINT,
       'display_in_list' => XenForo_Input::UINT,
       'style_id' => XenForo_Input::UINT,
       'log_visits' => XenForo_Input::UINT,
       'list_siblings' => XenForo_Input::UINT,
       'list_children' => XenForo_Input::UINT,
       'callback_class' => XenForo_Input::STRING,
       'callback_method' => XenForo_Input::STRING,
       'node_password' => XenForo_Input::STRING,
     ));

     if (!$this->_input->filterSingle('style_override', XenForo_Input::UINT))
     {
       $pageData['style_id'] = 0;
     }

     $nodeId = $this->_input->filterSingle('node_id', XenForo_Input::UINT);

     $pageData['modified_date'] = XenForo_Application::$time;

     $nodeId = $this->_getPageModel()->savePage(
       $pageData,
       $this->_input->filterSingle('template', XenForo_Input::STRING),
       $nodeId,
       $this->_input->filterSingle('template_id', XenForo_Input::UINT)
     );

     return $this->responseRedirect(
       XenForo_ControllerResponse_Redirect::SUCCESS,
       XenForo_Link::buildAdminLink('nodes') . $this->getLastHash($nodeId)
     );
   }

}

//class XFCP_PasswordProtectedForums_Extend_ControllerAdmin_Page extends XenForo_ControllerAdmin_Page {}
Actually, i did. But I couldn't for the life of me think of a way to.make it work when calling parent, as it would result in duplicated entried or errors.

I did try!

If you have any ideas, I'm all ears!
 

Liam W

Well-known member
#6
What's the problem? I'm not a dev so I'm unable to fully understand what's the point...
When using the class proxy feature, xenForo doesn't use the default class - it uses classes from addons, that extend each other, finally extending the main xenForo class.

If one of those addon classes don't call the parent function/class (the class it's extending) the the chain is broken, and other addons code won't be run.

It's a bad thing to do, and I try to avoid it as much as possible, but sometimes I just can't figure out a way to make it work without not calling the parent.

Make sense?

Liam