Redirect error with dashboard
Archived from the Xataface Developers forum.
rlevin — Fri Apr 08, 2011 8:06 am
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?
rlevin — Fri Apr 08, 2011 8:09 am
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();
?>`
shannah — Fri Apr 08, 2011 12:10 pm
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
rlevin — Mon Apr 11, 2011 6:07 am
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.
shannah — Tue Apr 12, 2011 12:02 pm
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:
- Give anonymous users access to the dashboard action
- In your beforeHandleRequest method, don’t change the action to “dashboard” if the action is “login_prompt”
-Steve
rlevin — Tue Apr 12, 2011 12:41 pm
Yes, I want users to log in to see the dashboard.
Thank you for logically explaining it. I’ll try it tomorrow morning.
rlevin — Wed Apr 13, 2011 7:48 am
- 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.
shannah — Wed Apr 13, 2011 8:00 am
Check your error log.
rlevin — Wed Apr 13, 2011 8:20 am
Just tells me its returning a 500, which is pretty general…
shannah — Wed Apr 13, 2011 9:05 am
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.