Modifica al plugin Surveys

Pubblicato martedì 29 settembre 2009 in Wordpress

Ho utilizzato il plugin Surveys per WordPress (indirizzo: www.bin-co.com/tools/wordpress/plugins/surveys/): per gestire questionari e relativi risultati. Davvero utile e ben fatto.

Però avevo la necessità di un pulsante “clona questionario” in modo da duplicare rapidamente un questionario (e le relative domande) senza dover reinserirle nuovamente. La mia esigenza nasceva da una serie di sondaggi per la customer satisfaction tutti uguali.

Ecco il codice da aggiungere in due files. Sto utilizzando la versione 1.01.2, ma forse può andare anche per l’ultima versione (attualmente la 1.01.3).

In survey.php:

- prima della linea 9 (prima di: “if($_REQUEST['action'] == ‘delete’)”) aggiunto un messaggio di feedback:

8
9
10
if($_REQUEST['message'] == 'cloned') {
	print '<div id="message" class="updated fade"><p>' . t('Survey cloned (ID <strong>'). $_REQUEST[survey] . t('</strong>). Maybe you have to rename it (action <strong>Edit</strong>).') .'</p></div>';
}

- alla linea 37 modificato il colspan della cella (da 3 a 4):

37
<th scope="col" colspan="4"><?php e('Action') ?></th>

- dopo la linea 63 (dopo il pulsante elimina) aggiunta una cella con il nuovo pulsante Clona:

64
65
66
67
68
69
70
71
72
73
	<td>
         <form action="<?php echo $wpframe_plugin_folder?>/survey_action.php" method="post" style="display: inline;">
            <span class="submit">
            <?php wp_nonce_field('surveys_create_edit_survey'); ?>
            <input id="survey" name="survey" value="<?php echo $survey->ID?>" type="hidden">
            <input id="survey" name="action" value="clone" type="hidden">
            <input name="submit" value="Clone" type="submit">
            </span>
            </form>
        </td>

In survey_action.php:

- prima della linea 14 (prima di else) aggiunto un else if con il caso clona:

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
	} else if ($_REQUEST['action'] == 'clone') {
	    // original survey
        $template_id_survey = $_REQUEST['survey'];
 
        // Cloning survey
        $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}surveys_survey (name, description, final_screen, status, added_on, type, max_attempts, min_rate)
        SELECT CONCAT('COPIA DI ', name, ' ". date(His)."'), description, final_screen, status, NOW(), type, max_attempts, min_rate FROM {$wpdb->prefix}surveys_survey WHERE ID = %d", $template_id_survey));
        $clone_id_survey = $wpdb->insert_id;
 
        // Cloning questions
        $template_questions = $wpdb->get_results($wpdb->prepare("SELECT ID FROM {$wpdb->prefix}surveys_question WHERE survey_id=%d ORDER BY ID ASC", $template_id_survey));
 
        foreach ($template_questions as $template_quest) {
            $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}surveys_question (survey_ID, question, allow_user_answer, allow_multiple_answers)
        SELECT $clone_id_survey, question, allow_user_answer, allow_multiple_answers FROM {$wpdb->prefix}surveys_question WHERE ID = %d", $template_quest->ID));
            $justclone_id_quest = $wpdb->insert_id;
 
            // Cloning answers
            $template_answers = $wpdb->get_results($wpdb->prepare("SELECT ID FROM {$wpdb->prefix}surveys_answer WHERE question_ID =%d ORDER BY ID ASC", $template_quest->ID ));
            foreach ($template_answers as $template_answer) {
                $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}surveys_answer (question_ID, answer, correct, sort_order)
        SELECT %d, answer, correct, sort_order FROM {$wpdb->prefix}surveys_answer WHERE ID = %d", $justclone_id_quest, $template_answer->ID ));
            }
        }
 
        wp_redirect($wpframe_wordpress . '/wp-admin/edit.php?page=surveys/survey.php&message=cloned&survey='.$clone_id_survey );

quindi l’enunciato verrebbe:

if(isset($_REQUEST['submit'])) {
	if($_REQUEST['action'] == 'edit') {
	    // ... original code ...
	} else if ($_REQUEST['action'] == 'clone') {
	    // ... ADDED CODE
	} else {
	    // ... original code ...
	}
}

Ora nella pagina con l’elenco dei questionari è comparso un pulsante Clone che duplica il questionario selezionato e le relative domande e opzioni di risposta.

Scrivi un commento