1

Topic: Cancel Account page with feedback form before cancelation

Ok u need 2 files for this
lib.cancel.php  put it inside /includes/lib/
crate it and add this code to it:

<?php
//------------------------------------------------
// Includes
//------------------------------------------------
include SYS_PATH . 'includes/languages/' . SYS_LANG . '/lang.lib.contactus.php';
include SYS_PATH . 'includes/core/core.email.php';
include SYS_PATH . 'includes/fns/fns.validate.php';


//------------------------------------------------
// Check if user has access to this page
//------------------------------------------------
if (!$PREFS->conf['enable_feedback'])
{
    $TEMPLATE->set_message("error", ($LANG['core']['no_access']), 0, 0);
    redirect(VIR_PATH . ($PREFS->conf['fancy_urls'] ? "account/home/" : "index.php?m=account_home"));
}


//------------------------------------------------
// Show contact form
//------------------------------------------------
show_contactus();


//------------------------------------------------
// Show contact form
//------------------------------------------------
function show_contactus()
{
    global $DB, $LANG, $TEMPLATE, $SESSION, $PREFS;


    //------------------------------------------------
    // Set template file
    //------------------------------------------------
    $TEMPLATE->set_template("cancel.tpl");


    //------------------------------------------------
    // Assign page title
    //------------------------------------------------
    $TEMPLATE->assign("app_page", ($LANG['core']['menu_cancel']));


    //------------------------------------------------
    // Check if user has access to this page
    //------------------------------------------------
    if (!$SESSION->auth  &&  !$SESSION->conf['can_send_feedback'])
    {
        $TEMPLATE->set_message("error", ($LANG['core']['not_loggedin']), 0, 0);
        redirect(VIR_PATH . ($PREFS->conf['fancy_urls'] ? "account/login/" : "index.php?m=account_login"), 1);
    }


    //------------------------------------------------
    // Get fields
    //------------------------------------------------
    $from = isset($_POST['from']) ? $DB->strip_slashes(trim($_POST['from'])) : '';
    $subj = isset($_POST['subject']) ? $DB->strip_slashes(trim($_POST['subject'])) : '';
    $body = isset($_POST['body']) ? $DB->strip_slashes(trim($_POST['body'])) : '';
    $captcha = isset($_POST['captcha']) && $_POST['captcha'] ? $DB->strip_slashes(trim($_POST['captcha'])) : "";


    //------------------------------------------------
    // Check if the user has clicked on Submit
    //------------------------------------------------
    if (isset($_POST['iscancel'])  &&  $_POST['iscancel']) {
        if (send_feedback($from, $subj, $body, $captcha)) $body = "";
    }
    $_SESSION['captcha'] = random_string(5);

    //------------------------------------------------
    // Assign page title
    //------------------------------------------------
    $TEMPLATE->assign("from", htmlentities2utf8($from));
    $TEMPLATE->assign("body", htmlentities2utf8($body));
    $TEMPLATE->assign("subj", $subj);

    return 1;
}
// End Function


//------------------------------------------------
// Send feedback
//------------------------------------------------
function send_feedback($from, $subj, $body, $captcha)
{
    global $DB, $LANG, $TEMPLATE, $SESSION, $PREFS;


    // *system demo admin label* //
    //------------------------------------------------
    // Validate email
    //------------------------------------------------
    $valid_email =  validate_email($from);
    if ($from == "")
    {
        $TEMPLATE->set_message("error", ($LANG['contactus']['empty_email']), 0, 0);
        return 0;
    }
    elseif ($valid_email  == 1)
    {
        $TEMPLATE->set_message("error", str_replace("%1%", 4, ($LANG['contactus']['email_too_long'])), 0, 0);
        return 0;
    }
    elseif ($valid_email == 2)
    {
        $TEMPLATE->set_message("error", ($LANG['contactus']['invalid_email']), 0, 0);
        return 0;
    }


    //------------------------------------------------
    // Validate body
    //------------------------------------------------
    if ($body == "")
    {
        $TEMPLATE->set_message("error", ($LANG['contactus']['empty_body']), 0, 0);
        return 0;
    }


    //------------------------------------------------
    // Check if captcha is available and accepted
    //------------------------------------------------
    if ($PREFS->conf['feedback_captcha'] != 0  &&  strcasecmp($_SESSION['captcha'], $captcha) != 0  &&  extension_loaded('gd'))
    {
        //------------------------------------------------
        // Set the message
        //------------------------------------------------
        $TEMPLATE->set_message("error", ($LANG['contactus']['invalid_catcha']), 0, 0);
        return 0;
    }


    //------------------------------------------------
    // Create email class
    //------------------------------------------------
    $EMAIL = new Email();


    //------------------------------------------------
    // Send out an email to the member
    //------------------------------------------------
    $EMAIL->send($from, $PREFS->conf['return_email_name'], $PREFS->conf['feedback_email'], $subj, $body."\n\nSender IP:".$SESSION->get_ip());


    //------------------------------------------------
    // Set message and redirect to the default page
    //------------------------------------------------
    redirect(VIR_PATH . ($PREFS->conf['fancy_urls'] ? "account/privacy/cancel/" : "index.php?m=account_privacy&p=cancel"));
    return 1;
}
// End Function
?>

create a file called
cancel.tpl and put it inside /temlplates/your template/

put this code in it:

<!-- INCLUDE header.tpl -->
<div class="header_wrap">
    <div class="location_wrap">
        <div class="location">
            <h1>Account Cancelation Form</h1>
        </div>
        <div class="clear"></div>
    </div>
    <div class="options_wrap">
        <div class="title">
            <h1>Account Cancelation Form</h1>
        </div>
        <div class="clear"></div>
    </div>
    <div class="clear"></div>
</div>
<!-- INCLUDE message.tpl -->
<!-- IF hide_content != "1" -->
    <div class="outter page_contactus">
        <div class="typepage">
            <div class="dataitem single">
                <div class="form">
                    <form name="edit" method="post" action="">
                        <div class="fieldset">
                            <dl class="fieldset">
                                <dt></dt>
                                <dd><input type="hidden" class="text" size="40" id="field_from" name="from" value="{session.email}" /></dd>
                                <dt><label for="field_subject">{lang:"contactus","subject"}</label></dt>
                                <dd><input type="text" class="text" size="40" id="subject" name="subject" value="Account Cancelation Form" /></dd>
                                <dt><label for="field_body">Why do you cancel your account and feedback.</label></dt>
                                <dd><textarea class="textarea textarea_full" id="field_body" name="body">{body}</textarea></dd>
                                <!-- IF settings.feedback_captcha -->
                                    <dt><label for="field_captcha">{lang:"contactus","verify_number"}</label></dt>
                                    <dd>
                                        <input type="text" id="field_captcha" class="text captcha" name="captcha" maxlength="5" />
                                        <img src="{virtual_path}includes/fns/fns.captcha.php" border="0" alt="" />
                                    </dd>
                                <!-- ENDIF -->
                                <dd class="submit"><input class="submit" name="submit" value="{lang:"contactus","submit"}" type="submit" /></dd>
                            </dl>
                        </div>
                        <input type="hidden" name="iscancel" value="1" />
                    </form>
                </div>
                <div class="clear"></div>
            </div>
        </div>
        <div class="clear"></div>
    </div>
<!-- ENDIF -->
<!-- INCLUDE footer.tpl -->

go to your language files:
/includes/languages/english/lang.core.php
add a line:
"menu_cancel" =>
"Cancel Account",

then open header.tpl file
and add this line where you want to show the cancel link in the menus

<li class="blocked">{anchor:url1="cancel/",url2="index.php?m=cancel",name="custom|cancel_account"}</li>

after they access the page they will seea form to enter feedback and acptcha and after clicking submit tyhey wil be redirected to the cancel page and u get an email with the forms details

2

Re: Cancel Account page with feedback form before cancelation

Hey thanks - I'll definitely give this one a spin

3

Re: Cancel Account page with feedback form before cancelation

I tried installing this but it did not work.  I clicked on the Cancel Account link but the form did not display.  I followed all the steps and created all the necessary files.  Any insights on why this is not working.  I'm using 2.5.5.  Thanks!

4

Re: Cancel Account page with feedback form before cancelation

I tried in 2.5.7. everything its OK. But I have mode Search friendly URLs turned on. And address mypage.xx/cancel don't works. Only mypage.xx/index.php?m=cancel.

5

Re: Cancel Account page with feedback form before cancelation

you have to add a line in the htaccess

6

Re: Cancel Account page with feedback form before cancelation

It works with 2.6.0

The only thing missing is htaccess modification if you use URL rewrite.

You have to add this in your .htaccess

RewriteRule ^cancel/?$ index.php?m=cancel [L]

And also language translation of the menu should correctly go in:
/includes/languages/english/lang.custom.php

If you want to translate in your core file you have to modify <li> line to name="core|cancel_account"}