Problemes sur les évenemts associés aux buoutons

Signaler
-
Bjr à tous ,
Dans ce projet, je construis un webmail, permettant aux
utilisateurs de :
se connecter à leurs comptes POP3 ou IMAP ;
lire leur courrier ;
envoyer du courrier ;
répondre au courrier ;
faire suivre leur courrier ;
supprimer des messages de leurs boîtes aux lettres.
l’application n’utilise qu’un seul script
pour tout contrôler. Ce script s’appelle index.php
Le script index.php utilise une approche événementielle.
Il sait quelle fonction appeler
pour chaque événement. Ici, les événements sont déclenchés lorsque l’utilisateur clique
sur les différents boutons du site, chacun étant associé à une action. La plupart de ces
boutons sont produits par la fonction display button(), sauf les boutons de soumission,
qui sont pris en charge par la fonction display form button(). Ces deux fonctions
sont définies dans le fichier output_fns.php et toutes les deux ramènent
l’utilisateur à des URL de la forme :
index.php?action= log-out
C’est la valeur de la variable action lors de l’appel de index.php qui détermine le
gestionnaire d’événement à activer.
Ce script peut être découpé en quatre sections :
1. On effectue les traitements qui doivent avoir lieu avant d’envoyer l’en-tête de page
au navigateur. C’est notamment dans cette section que l’on démarre la session, que
l’on exécute tous les prétraitements pour l’action choisie et que l’on décide de
l’aspect des en-têtes.
2. On traite et on envoie les en-têtes et la barre de menu appropriés à l’action choisie
par l’utilisateur.
3. On choisit le corps du script à exécuter en fonction de l’action choisie. Les différentes
actions déclenchent des appels de fonctions distincts.
4. On envoie le pied de page
Pour économiser le travail de personnalisation de l’interface utilisateur, on se sert d’un
tableau pour contrôler les boutons qui apparaissent dans la barre d’outils. On
commence par déclarer un tableau vide :
$buttons = array();
Puis on crée les boutons que l’on souhaite voir apparaître sur la page :
$buttons[0] = ’view-mailbox’;
$buttons[1] = ’new-message’;
$buttons[2] = ’account-setup’;
Si l’utilisateur se connecte en tant qu’administrateur, on ajoutera plus de boutons à ce
tableau.
Pour l’étape des en-têtes, on affiche un en-tête classique :
do_html_header($_SESSION[’auth_user’],
$_SESSION[’selected_account’]);
...
display_toolbar($buttons);
Ce code affiche le titre et la barre d’en-tête, puis la barre des boutons . Ces fonctions sont définies dans le fichier output_fns.php
Je donne une ebauche structure de index.php et output_fns.php
Index.php
…………………………………………………………………..
………………………………………………………………………..
……………………………………………………………………….
$action = null;
if($action == 'log-out') {
session_destroy();
unset($action);
$_SESSION=array();
}

//need to process choose, delete or store account before drawing header
$action = null;
switch ($action) {
case 'delete-account':
delete_account($_SESSION['auth_user'], $account);
break;

case 'store-settings':
store_account_settings($_SESSION['auth_user'], $_POST);
break;

case 'select-account':
// if have chosen a valid account, store it as a session variable
if(($account) && (account_exists($_SESSION['auth_user'], $account))) {
$_SESSION['selected_account'] = $account;
}
break;
}

// set the buttons that will be on the tool bar
$button[1] = 'view-mailbox';
$button[2] = 'new-message';
$button[3] = 'account-setup';
$button[4] = '';
//only offer a log out button if logged in
if(check_auth_user()) {
$button[1] = 'view-mailbox';
$button[2] = 'new-message';
$button[3] = 'account-setup';
//$button[3] = '';
$button[4] = 'log-out';
}

if($action) {
// display header with application name and description of page or action
do_html_header($_SESSION['auth_user'], "Warm Mail - ".
format_action($action),
$_SESSION['selected_account']);
} else {
// display header with just application name
if (isset($_SESSION['auth_user'])&& isset($_SESSION['selected_account']))
do_html_header($_SESSION['auth_user'], "Warm Mail", $_SESSION['selected_account']);
}

display_toolbar($button);

echo $status;

if(!check_auth_user()) {
echo "You need to log in";

if(($action) && ($action!='log-out')) {
echo " to go to ".format_action($action);
}
echo ".

";
display_login_form($action);
} else {
switch ($action) {
// if we have chosen to setup a new account, or have just added or
// deleted an account, show account setup page
case 'store-settings':

case 'account-setup':
//display_account_setup($_SESSION['auth_user']);
case 'delete-account':
display_account_setup($_SESSION['auth_user']);
break;

case 'send-message':
if(send_message($to, $cc, $subject, $message)) {
echo "Message sent.

";
} else {
echo "Could not send message.

";
}
break;

case 'delete':
delete_message($_SESSION['auth_user'],
$_SESSION['selected_account'], $messageid);
//note deliberately no 'break' - we will continue to the next case

case 'select-account':

case 'view-mailbox':
// if mailbox just chosen, or view mailbox chosen, show mailbox
display_list($_SESSION['auth_user'],
$_SESSION['selected_account']);
break;

case 'show-headers':
case 'hide-headers':
case 'view-message':
// if we have just picked a message from the list, or were looking at
// a message and chose to hide or view headers, load a message
$fullheaders ($action 'show-headers');
display_message($_SESSION['auth_user'],
$_SESSION['selected_account'],
$messageid, $fullheaders);
break;

case 'reply-all':
//set cc as old cc line
if(!$imap) {
$imap = open_mailbox($_SESSION['auth_user'],
$_SESSION['selected_account']);
}

if($imap) {
$header = imap_header($imap, $messageid);

if($header->reply_toaddress) {
$to = $header->reply_toaddress;
} else {
$to = $header->fromaddress;
}

$cc = $header->ccaddress;
$subject = "Re: ".$header->subject;
$body = add_quoting(stripslashes(imap_body($imap, $messageid)));
imap_close($imap);

display_new_message_form($_SESSION['auth_user'],
$to, $cc, $subject, $body);
}

break;

case 'reply':
//set to address as reply-to or from of the current message
if(!$imap) {
$imap = open_mailbox($_SESSION['auth_user'],
$_SESSION['selected_account']);
}

if($imap) {
$header = imap_header($imap, $messageid);
if($header->reply_toaddress) {
$to = $header->reply_toaddress;
} else {
$to = $header->fromaddress;
}
$subject = "Re: ".$header->subject;
$body = add_quoting(stripslashes(imap_body($imap, $messageid)));
imap_close($imap);

display_new_message_form($_SESSION['auth_user'],
$to, $cc, $subject, $body);
}

break;

case 'forward':
//set message as quoted body of current message
if(!$imap) {
$imap = open_mailbox($_SESSION['auth_user'],
$_SESSION['selected_account']);
}

if($imap) {
$header = imap_header($imap, $messageid);
$body = add_quoting(stripslashes(imap_body($imap, $messageid)));
$subject = "Fwd: ".$header->subject;
imap_close($imap);

display_new_message_form($_SESSION['auth_user'],
$to, $cc, $subject, $body);
}
break;

case 'new-message':
display_new_message_form($_SESSION['auth_user'],
$to, $cc, $subject, $body);
break;
}
}

do_html_footer();
?>

Output_fns.php
…………………………………..
…………………………………
……………………………………..
………………………………………
function display_account_select($auth_user, $selected_account) {
// show the dropdown box for the user to select from their accounts

$list = get_account_list($auth_user);
$accounts = sizeof($list);

if($accounts>1) {
echo "<select onchange="window.location=this.options[selectedIndex].value name=account">";
if($selected_account=='') {
echo "<option value="0" selected>Choose Account";
}

for($i = 0; $i<$accounts; $i++) {
$account = get_account_settings($auth_user, $list[$i]);
echo "<option value="index.php?action=select-account&account=".$list[$i].""";
if($list[$i]==$selected_account) {
echo " selected";
}
echo ">".$account['server']."</option>";
}
echo "</select>";
}
}

function display_account_setup($auth_user) {
//display empty 'new account' form

display_account_form($auth_user);
$list = get_accounts($auth_user);
$accounts = sizeof($list);

foreach($list as $key => $account) {
// display form for each accounts details.
// note that we are going to send the password for all accounts in the HTML
// this is not really a very good idea
display_account_form($auth_user, $account['accountid'], $account['server'], $account['remoteuser'],$account['remotepassword'], $account['type'],$account['port']);
}
}

function display_account_form($auth_user, $accountid=0, $server='',
$remoteuser='', $remotepassword='',
$type='IMAP', $port=143) {


if($server) {
$title = $server;
} else {
$title = 'New Account';
}
?>


<form method="post" action="index.php?action=store-settings">
<?php echo $title;?> |

----

Server Name:,
">,

----

Port Number:,
">,

----

Server Type:,
<?php
echo \"<select name =\"type\"><option value=\"IMAP\"";
if ($type == 'IMAP') {
echo " selected";
}
echo ">IMAP</option><option value=\"POP3\"";
if ($type == 'POP3') {
echo " selected";
}
echo ">POP3</option></select>, \";
?>

----

User Name:,
">,

----

Password:,
">,

\">
----

<?php
if($accountid>0){
echo \"";
display_form_button('save-changes');
echo ",
</form>
<form action=\\"index.php?action=delete-account\\" method=\\"post\\">

";
display_form_button('delete-account');
echo ",
</form>
\";
} else {
echo \"";
display_form_button('save-changes');
echo ", </form>\";
}
?>





<?php
}
………………………….
……………………
………………………..

La difficulté que j’ai maintenant est que lorsque j’appui sur un des buttons aucune action s’effectue
j'attends vos idées avec impatience
merci