// }}}
// {{{ function handler_admin() : index of admin mode
- function handler_admin(&$page)
+ function handler_admin(&$page, $id = -1)
{
require_once dirname(__FILE__).'/survey/survey.inc.php';
- $page->changeTpl('survey/admin.tpl');
- $page->assign('survey_waiting', SurveyDB::retrieveList('w'));
- $page->assign('survey_current', SurveyDB::retrieveList('c'));
- $page->assign('survey_old', SurveyDB::retrieveList('o'));
+ $this->clear_session();
+ if ($id == -1) {
+ $page->changeTpl('survey/admin.tpl');
+ $page->assign('survey_waiting', SurveyDB::retrieveList('w'));
+ $page->assign('survey_current', SurveyDB::retrieveList('c'));
+ $page->assign('survey_old', SurveyDB::retrieveList('o'));
+ } else {
+ $survey = SurveyDB::retrieveSurvey($id); // retrieves all survey object structure
+ if ($survey == null) {
+ $this->show_error($page, "Sondage ".$id." introuvable.", 'admin');
+ }
+ //$this->store_session($survey, $id);
+ $page->assign('survey_adminmode', true);
+ $page->assign('survey_id', $id);
+ $this->show_survey($page, $survey);
+ }
}
// }}}
// {{{ function handler_adminEdit() : edits a survey in admin mode
- function handler_adminEdit(&$page, $id)
+ function handler_adminEdit(&$page, $id = -1)
{
+ if ($id == -1) {
+ return $this->show_error($page, "Un identifiant de sondage doit être précisé.", 'admin');
+ }
require_once dirname(__FILE__).'/survey/survey.inc.php';
$survey = SurveyDB::retrieveSurvey($id); // retrieves the survey in database
- S::kill('survey'); // cleans session (in case there would have been a problem before)
- S::kill('survey_id');
- if ($survey->isValid()) {
+ $this->clear_session(); // cleans session (in case there would have been a problem before)
+ /*if ($survey->isValid()) {
return $this->show_error($page, "Il est impossible de modifier un sondage déjà validé", 'admin');
- }
- $_SESSION['survey'] = serialize($survey);
- $_SESSION['survey_id'] = $id;
+ }*/
+ $this->store_session($survey, $id);
$this->handler_edit($page, 'show'); // calls handler_edit, but in admin mode since 'survey_id' is in session
}
// }}}
// {{{ function handler_adminValidate() : validates a survey (admin mode)
function handler_adminValidate(&$page, $id = -1)
{
+ $id = Post::v('survey_id', $id);
if (Post::has('survey_cancel')) { // if the admin cancels the validation, returns to the admin index
- return $this->handler_admin(&$page);
+ $this->clear_session();
+ return $this->handler_admin(&$page, $id);
}
- $id = Post::v('survey_id', $id);
if ($id == -1) {
return $this->show_error($page, "Un identifiant de sondage doit être précisé.", 'admin');
}
$this->show_confirm($page, "Êtes-vous certain de vouloir valider le sondage \"".$surveyInfo['title']."\" ? "
."Les votes seront immédiatement ouverts.", 'admin/valid', array('id' => $id));
}
+ /*
+ if ($id == -1 && !(S::has('survey') && S::has('survey_id'))) {
+ return $this->show_error($page, "Un identifiant de sondage doit être précisé.", 'admin');
+ }
+ require_once dirname(__FILE__).'/survey/survey.inc.php';
+ if ($id == -1) { // the survey and survey_id are in session, performs the validation
+ $survey = unserialize(S::v('survey'));
+ $surveyInfo = $survey->storeArray();
+ if (Post::has('survey_submit')) { // needs a confirmation before validation
+ if (SurveyDB::validateSurvey(S::v('survey_id'))) { // validates the survey (in the database)
+ $this->show_success($page, "Le sondage \"".$surveyInfo['question']."\" a bien été validé, les votes sont maintenant ouverts.", 'admin');
+ } else {
+ $this->show_error($page, '', 'admin');
+ }
+ } else { // asks for a confirmation
+ $this->show_confirm($page, "Êtes-vous certain de vouloir valider le sondage \"".$surveyInfo['question']."\" ? "
+ ."Les votes seront immédiatement ouverts.", 'admin/valid');
+ }
+ } else { // a survey id is given, loads this survey for validation
+ $this->clear_session();
+ $survey = SurveyDB::retrieveSurvey($id); // retrieves all survey object structure
+ if ($survey == null) {
+ $this->show_error($page, "Sondage ".$id." introuvable.", 'admin');
+ }
+ $this->store_session($survey, $id);
+ $page->assign('survey_validmode', true);
+ $this->show_survey($page, $survey);
+ }
+ */
}
// }}}
// {{{ function handler_adminDelete() : deletes a survey (admin mode)
function handler_adminDelete(&$page, $id = -1)
{
+ $id = Post::v('survey_id', $id);
if (Post::has('survey_cancel')) { // if the admin cancels the suppression, returns to the admin index
- return $this->handler_admin(&$page);
+ return $this->handler_admin(&$page, $id);
}
- $id = Post::v('survey_id', $id);
if ($id == -1) {
return $this->show_error($page, "Un identifiant de sondage doit être précisé.", 'admin');
}
$this->show_error($page, '', 'admin');
}
} else { // asks for a confirmation
- $this->show_confirm($page, "Êtes-vous certain de vouloir supprimer le sondage \"".$surveyInfo['title']."\" ?", 'admin/delete', array('id' => $id));
+ $this->show_confirm($page, "Êtes-vous certain de vouloir supprimer le sondage \"".$surveyInfo['title']."\" ?", 'admin/del', array('id' => $id));
}
}
// }}}
return $this->handler_index($page);
}
}
+ $page->assign('survey_editmode', true);
if (S::has('survey_id')) { // if 'survey_id' is in session, it means we are modifying a survey in admin mode
- $page->assign('survey_adminmode', true);
+ $page->assign('survey_updatemode', true);
}
if ($action == 'show' && !S::has('survey')) {
$action = 'new';
return $this->show_error($page, '', 'edit');
}
$this->show_survey($page, $survey);
- $_SESSION['survey'] = serialize($survey);
+ $this->store_session($survey);
} else { // if a form has not been submitted, shows modification form
$survey = unserialize(S::v('survey'));
$current = $survey->searchToArray($qid); // gets the current parameters of the question
} // }}}
} elseif ($action == 'new') { // {{{ create a new survey : actually store the root question
if (Post::has('survey_submit')) { // if the form has been submitted, creates the survey
- S::kill('survey');
- S::kill('survey_id');
+ $this->clear_session();
$survey = new SurveyRoot(Post::v('survey_question')); // creates the object structure
$this->show_survey($page, $survey);
- $_SESSION['survey'] = serialize($survey);
+ $this->store_session($survey);
} else {
- S::kill('survey');
- S::kill('survey_id');
+ $this->clear_session();
$this->show_form($page, $action, 0, 'root');
} // }}}
} elseif ($action == 'nested' || $action == 'after') { // {{{ adds a new question, nested in the current node, or on the same level after it
}
}
$this->show_survey($page, $survey);
- $_SESSION['survey'] = serialize($survey);
+ $this->store_session($survey);
} else {
$this->show_form($page, $action, $qid);
} // }}}
return $this->show_error($page, '', 'edit');
}
$this->show_survey($page, $survey);
- $_SESSION['survey'] = serialize($survey);
+ $this->store_session($survey);
} else { // if user has not confirmed, shows a confirmation form
$survey = unserialize(S::v('survey'));
$current = $survey->searchToArray($qid); // needed to get the title of the question to delete (more user-friendly than an id)
$this->show_error($page);
}
}
- S::kill('survey'); // cleans session
- S::kill('survey_id');
+ $this->clear_session();
} else { // asks for a confirmation if it has not been sent
$survey = unserialize(S::v('survey'));
$errors = $survey->checkSyntax();
} // }}}
} elseif ($action == 'cancel') { // {{{ cancels the creation/modification of a survey
if (Post::has('survey_submit')) { // needs a confirmation
- S::kill('survey'); // cleans session
if (S::has('survey_id')) { // only possible when modifying a survey in admin mode, still this should be considered again,
- S::kill('survey_id'); // maybe some name with "admin" in it, "survey_adminid" or anything that might not be confusing.
+ $this->clear_session(); // maybe some name with "admin" in it, "survey_adminid" or anything that might not be confusing.
return $this->handler_admin($page); // in this case, shows the admin index
} else {
+ $this->clear_session(); // cleans session
return $this->handler_index($page); // else shows the 'normal' index
}
} else { // asks for a confirmation if it has not been sent
}
// }}}
+ // {{{ function clear_session() : clears the data stored in session
+ function clear_session()
+ {
+ S::kill('survey');
+ S::kill('survey_id');
+ }
+ // }}}
+
+ // {{{ function store_session() : serializes and stores survey (and survey_id) in session
+ function store_session($survey, $survey_id = -1)
+ {
+ $_SESSION['survey'] = serialize($survey);
+ if ($survey_id != -1) {
+ $_SESSION['survey_id'] = $survey_id;
+ }
+ }
+ // }}}
+
// {{{ function show_survey() : calls the template to display a survey, for editing, voting, or consulting the results
function show_survey(&$page, $survey)
{
- $page->changeTpl('survey/show_survey.tpl');
- $page->assign('survey_mode', 'edit'); // for now, only editing has been completely implemented
+ $page->changeTpl('survey/show_root.tpl');
$page->assign('survey', $survey->toArray());
}
// }}}
// }}}
// {{{ function show_confirm() : calls the template to display a confirm form
- function show_confirm(&$page, $message, $formaction, $formhidden)
+ function show_confirm(&$page, $message, $formaction, $formhidden = null)
{
$page->changeTpl('survey/confirm.tpl');
$page->assign('survey_message', $message);
{* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *}
{* *}
{**************************************************************************}
-{if $survey.type == 'root'}
-<h1>Sondage : {$survey.question}</h1>
- {if $survey.comment != ''}
- {$survey.comment}
- {/if}
-<br/>Fin du sondage :
- {if $survey.end eq "#"}
- erreur
- {else}
- {$survey.end|date_format:"%x"}
- {/if}
-<br/>Réservé aux promotions :
- {if $survey.promos eq "#"}
- erreur
- {elseif $survey.promos eq ""}
- aucune restriction
- {else}
- {$survey.promos}
- {/if}
-<br/>
-<a href='./survey/edit/question/{$survey.id}'>Modifier la racine</a> |
-<a href='./survey/edit/nested/{$survey.id}'>Ajouter une question au début</a>
- {if is_array($survey.children)}
- {foreach from=$survey.children item=child}
- {include file='survey/show_survey.tpl' survey=$child recursive=true}
- {/foreach}
- {/if}
-<br/><br/>
-<a href='./survey/edit/valid'>{if $survey_adminmode}Enregistrer les modifications{else}Proposer ce sondage{/if}</a> |
-<a href='./survey/edit/cancel'>Annuler {if $survey_adminmode}les modifications{else}totalement la création de ce sondage{/if}</a>
-{else}
<div>
<h2>{$survey.question}</h2>
- {if $survey.comment != ''}
- {$survey.comment}<br/>
- {/if}
- {assign var='survey_type' value=$survey.type}
- {include file="survey/show_$survey_type.tpl"}
+{if $survey.comment != ''}
+ {$survey.comment}<br/>
+{/if}
+{assign var='survey_type' value=$survey.type}
+{include file="survey/show_$survey_type.tpl"}
<br/>
+{if $survey_editmode}
<a href='./survey/edit/question/{$survey.id}'>Modifier cette question</a> |
<a href='./survey/edit/del/{$survey.id}'>Supprimer cette question</a> |
- {if is_array($survey.children)}
- <a href='./survey/edit/nested/{$survey.id}'>Ajouter une question imbriquée</a>
+{/if}
+{if is_array($survey.children)}
+ {if $survey_editmode}<a href='./survey/edit/nested/{$survey.id}'>Ajouter une question imbriquée</a>{/if}
<div style="padding-left:20px">
- {foreach from=$survey.children item=child}
- {include file='survey/show_survey.tpl' survey=$child recursive=true}
- {/foreach}
+ {foreach from=$survey.children item=child}
+ {include file='survey/show_question.tpl' survey=$child recursive=true}
+ {/foreach}
</div>
- {/if}
+{/if}
+{if $survey_editmode}
<a href='./survey/edit/after/{$survey.id}'>Ajouter une question après</a>
-</div>
{/if}
+</div>
{* vim:set et sw=2 sts=2 ts=8 enc=utf-8: *}
--- /dev/null
+{**************************************************************************}
+{* *}
+{* Copyright (C) 2003-2007 Polytechnique.org *}
+{* http://opensource.polytechnique.org/ *}
+{* *}
+{* This program is free software; you can redistribute it and/or modify *}
+{* it under the terms of the GNU General Public License as published by *}
+{* the Free Software Foundation; either version 2 of the License, or *}
+{* (at your option) any later version. *}
+{* *}
+{* This program is distributed in the hope that it will be useful, *}
+{* but WITHOUT ANY WARRANTY; without even the implied warranty of *}
+{* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *}
+{* GNU General Public License for more details. *}
+{* *}
+{* You should have received a copy of the GNU General Public License *}
+{* along with this program; if not, write to the Free Software *}
+{* Foundation, Inc., *}
+{* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *}
+{* *}
+{**************************************************************************}
+
+<h1>Sondage : {$survey.question}</h1>
+{if $survey.comment != ''}
+ {$survey.comment}
+{/if}
+<br/>Fin du sondage :
+{if $survey.end eq "#"}
+ erreur
+{else}
+ {$survey.end|date_format:"%x"}
+{/if}
+<br/>Réservé aux promotions :
+{if $survey.promos eq "#"}
+ erreur
+{elseif $survey.promos eq ""}
+ aucune restriction
+{else}
+ {$survey.promos}
+{/if}
+<br/>
+{if $survey_editmode}
+ {assign var="survey_rooteditmode" value=true}
+ {if $survey.valid}
+ {assign var="survey_editmode" value=false}
+ {/if}
+{/if}
+{if $survey_rooteditmode}<a href='./survey/edit/question/{$survey.id}'>Modifier la racine</a>{/if}
+{if $survey_editmode} | <a href='./survey/edit/nested/{$survey.id}'>Ajouter une question au début</a>{/if}
+{if is_array($survey.children)}
+ {foreach from=$survey.children item=child}
+ {include file='survey/show_question.tpl' survey=$child recursive=true}
+ {foreachelse}
+ <br/>
+ {/foreach}
+{/if}
+{if $survey_rooteditmode}
+<br/>
+<a href='./survey/edit/valid'>{if $survey_updatemode}Enregistrer les modifications{else}Proposer ce sondage{/if}</a> |
+<a href='./survey/edit/cancel'>Annuler {if $survey_updatemode}les modifications{else}totalement la création de ce sondage{/if}</a>
+{elseif $survey_adminmode}
+<br/>
+{if !$survey.valid}<a href="./survey/admin/valid/{$survey_id}">Valider ce sondage</a> | {/if}
+<a href="./survey/admin/edit/{$survey_id}">Modifier ce sondage</a> |
+<a href="./survey/admin/del/{$survey_id}">Supprimer ce sondage</a> |
+<a href="./survey/admin">Retour</a>
+{/if}
+
+{* vim:set et sw=2 sts=2 ts=8 enc=utf-8: *}