I'm using this wonderful plugin for a project and I needed an easy way to "clone" an existing survey.
I have to create a lot of customer-satisfation-surveys with the same questions, so I wrote some code to add this opportunity.
I'm using survey v.1.01.2 but maybe it's the same for the last version (pls try and let us know :).
If you want this function you have to insert code in 2 files.
In survey.php:
- before line 9 (before "if($_REQUEST['action'] == 'delete')") added this code with a feedback msg:
if($_REQUEST['message'] == 'cloned') {
print '<div id="message" class="updated fade"><p>' . t('Survey cloned (ID '). $_REQUEST[survey] . t('). Maybe you have to rename it (action Edit).') .'</p></div>';
}
- at line 37 modified cell's colspan (from 3 to 4):
<th scope="col" colspan="4"><?php e('Action') ?></th>
- after line 63 (after delete button) added a cell containing clone button:
<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:
- before line 14 (before else) added an "else if" with the clone case:
} 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 );
so the statement will be:
if(isset($_REQUEST['submit'])) {
if($_REQUEST['action'] == 'edit') {
// ... original code ...
} else if ($_REQUEST['action'] == 'clone') {
// ... ADDED CODE
} else {
// ... original code ...
}
}
For me it works, I hope this hack will be useful for anyone!