Page 1 of 1

Redirect error with dashboard

PostPosted: Fri Apr 08, 2011 8:06 am
by rlevin
I am getting this message "The page isn't redirecting properly".

I have a directory in the main called Dashboard. In this directory I have my actions.ini, conf.ini, and index.php

actions.ini:
[mydashboard]
permission=view
--------------------------
conf.ini:
[_database]
all my login info here

[_tables]
dashboard = "Dashboard"
myTable = "test"
---------------------------
In this Dashboard folder I have folder called actions with a file named dashboard.php

dashboard.php:
Code: Select all
<?php
class actions_dashboard {
    function handle(&$params){
        $bib= df_get_records_array('myTable', array());
        df_display(array('myTable'=>$bib), 'dashboard.html');
    }
}
?>


In this Dashboard folder I have folder called conf with a file named ApplicationDelegate.php

ApplicationDelegate.php:
Code: Select all
<?php
/**
* A delegate class for the entire application to handle custom handling of
* some functions such as permissions and preferences.
*/
class conf_ApplicationDelegate {
    /**
     * Returns permissions array.  This method is called every time an action is
     * performed to make sure that the user has permission to perform the action.
     * @param record A Dataface_Record object (may be null) against which we check
     *               permissions.
     * @see Dataface_PermissionsTool
     * @see Dataface_AuthenticationTool
     */
     function getPermissions(&$record){
         $auth =& Dataface_AuthenticationTool::getInstance();
         $user =& $auth->getLoggedInUser();
         if ( !isset($user) ) return Dataface_PermissionsTool::NO_ACCESS();
             // if the user is null then nobody is logged in... no access.
             // This will force a login prompt.
         $role = $user->val('role');
         return Dataface_PermissionsTool::getRolePermissions($role);
             // Returns all of the permissions for the user's current role.
      }
     
     function beforeHandleRequest(){
        $app =& Dataface_Application::getInstance();
        $query =& $app->getQuery();
        if ( $query['-table'] == 'dashboard' and ($query['-action'] == 'browse' or $query['-action'] == 'list') ){
           $query['-action'] = 'dashboard';
           }
      }
     
}
?>


In this Dashboard folder I have folder called tables with 2 other folders inside called dashboard and myTable. This includes my class delegate files.
In this Dashboard folder I have another folder called templates with file called dashboard.html

dashboard.html:
Code: Select all
{use_macro file="Dataface_Main_Template.html"}
    {fill_slot name="main_column"}
        <h1>My Management System (RCMS)</h1>
       
        <p>This system allows you to manage your publications and publish
        them on the web.  Some common actions you may perform with this system
        include:
            <ul>
                <li><img src="{$ENV.DATAFACE_URL}/images/add_icon.gif"/>
                    <a href="{$ENV.DATAFACE_SITE_HREF}?-table=myTable&-action=new">
                       Do Something</a>
                </li>
                <li><img src="{$ENV.DATAFACE_URL}/images/edit.gif"/>
                   Edit existing bibliography:
                   <select onchange="window.location.href=this.options[this.selectedIndex].value">
                    <option value="">Select ...</option>
                    {foreach from=$myTable item=bibliography}
                        <option value="{$bibliography->getURL('-action=edit')}">
                            {$bibliography->getTitle()}
                        </option>
                   
                    {/foreach}
                </select>
                </li>
                <li><img src="{$ENV.DATAFACE_URL}/images/file.gif"/>
                    Embed your bibliography in a webpage:
                    <select onchange="window.location.href=this.options[this.selectedIndex].value">
                    <option value="">Select ...</option>
                    {foreach from=$myTable item=bibliography}
                        <option value="{$bibliography->getURL('-action=view')}#embed">
                            {$bibliography->getTitle()}
                        </option>
                   
                {/foreach}
                </select>
                </li>
               
            </ul>
    {/fill_slot}
{/use_macro}


Whats causing the redirect error?

Re: Redirect error with dashboard

PostPosted: Fri Apr 08, 2011 8:09 am
by rlevin
heres the index.php:
Code: Select all
<?php

require_once '/xataface/dataface-public-api.php';

df_init(__FILE__, '/xataface');

$app =& Dataface_Application::getInstance();

$app->display();
?>

Re: Redirect error with dashboard

PostPosted: Fri Apr 08, 2011 12:10 pm
by shannah
This is likely an issue with permissions. Probably your user doesn't have permission to access your dashboard action, so it redirects to the login page, but you keep on changing the action back to dashboard.... hence endless loop of redirects.

By your samples here I'm a little puzzled, why is your actions.ini entry called [mydashboard] but everywhere else you reference it as "dashboard"?

-Steve

Re: Redirect error with dashboard

PostPosted: Mon Apr 11, 2011 6:07 am
by rlevin
The [mydashboard] was a typo. Its actually [dashboard].

I have a permissions.ini file:
[ADMIN]
DataGrid:view_grid=1
DataGrid:update=1
----------------------------------
Heres my dashboard delegate file:
Code: Select all
<?php
class tables_dashboard {
    function getPermissions(&$record){
        if ( getUser() ){
            return Dataface_PermissionsTool::ALL();
        }
        return null;
    }
}

?>


I see what your saying about the endless redirects to the dashboard. I simply copied and pasted your code from the Creating_a_Dashboard page. I made those changes above to the permissions yet I still receive the error. I am stumped.

Re: Redirect error with dashboard

PostPosted: Tue Apr 12, 2011 12:02 pm
by shannah
Question: Do you want to require users to log in to see your dashboard?

What is happening right now is that your [dashboard] action requires the "view" permission to access it. Currently you are giving anonymous users "NO ACCESS", which doesn't include the "view" permission. So when an anonymous user tries to access your site with any action, say "list", your beforeHandleRequest() method is changing this action to "dashboard" (correctly), but when xataface then discovers that the user doesn't have access to the "dashboard" action, it redirects the user to the "login_prompt" action. But when loading the the "login_prompt" action, your beforeHandleRequest method again preprocesses the request and switches the action to "dashboard", which brings us full circle in an infinite loop.

Solutions:

1. Give anonymous users access to the dashboard action
2. In your beforeHandleRequest method, don't change the action to "dashboard" if the action is "login_prompt"

-Steve

Re: Redirect error with dashboard

PostPosted: Tue Apr 12, 2011 12:41 pm
by rlevin
Yes, I want users to log in to see the dashboard.

Thank you for logically explaining it. I'll try it tomorrow morning.

Re: Redirect error with dashboard

PostPosted: Wed Apr 13, 2011 7:48 am
by rlevin
Code: Select all
<?php
class conf_ApplicationDelegate {
   

     function getPermissions(&$record){
         $auth =& Dataface_AuthenticationTool::getInstance();
         $user =& $auth->getLoggedInUser();
         if ( !isset($user) ) return Dataface_PermissionsTool::NO_ACCESS();
             // if the user is null then nobody is logged in... no access.
             // This will force a login prompt.
         $role = $user->val('role');
         return Dataface_PermissionsTool::getRolePermissions($role);
             // Returns all of the permissions for the user's current role.
      }
     
    function beforeHandleRequest(){
     
        $app =& Dataface_Application::getInstance();
    $query =& $app->getQuery();
    if ( $query['-table'] == 'dashboard' and ($query['-action'] == 'browse' or $query['-action'] == 'list') ){
       if($query['-action'] = 'login_prompt')
       {

       }
       else
       {
        $query['-action'] = 'dashboard';
      }
    }
       
       
    }
?>


I just added the if $query['-action'] = 'login_prompt' statement. Now I get an empty page.

Re: Redirect error with dashboard

PostPosted: Wed Apr 13, 2011 8:00 am
by shannah
Check your error log.

Re: Redirect error with dashboard

PostPosted: Wed Apr 13, 2011 8:20 am
by rlevin
Just tells me its returning a 500, which is pretty general...

Re: Redirect error with dashboard

PostPosted: Wed Apr 13, 2011 9:05 am
by shannah
500 just means there was an error. It must say more than that in the error log.

It could be a syntax error, or just about anything else.