public function form($instance)
 {
     include_once 'class.petition.php';
     $the_petition = new guilro_petitions_Petition();
     global $guilro_petitions_settings;
     $options = $guilro_petitions_settings->getAll();
     $defaults = array('title' => __('Sign the Petition', 'guilro_petitions'), 'call_to_action' => '', 'sharing_url' => '', 'petition_id' => 1);
     $instance = wp_parse_args((array) $instance, $defaults);
     $title = $instance['title'];
     $call_to_action = $instance['call_to_action'];
     $sharing_url = $instance['sharing_url'];
     $petition_id = $instance['petition_id'];
     // get petitions list to fill out select box
     $petitions = $the_petition->quicklist();
     // display the form (admin)
     echo '<p><label>' . __('Title', 'guilro_petitions') . ':</label><br /><input class="widefat" type="text" name="' . $this->get_field_name('title') . '" value="' . stripslashes($instance['title']) . '"></p>';
     echo '<p><label>' . __('Sharing URL', 'guilro_petitions') . ':</label><br /><input class="widefat" type="text" name="' . $this->get_field_name('sharing_url') . '" value="' . stripslashes($instance['sharing_url']) . '"></p>';
     echo '<p><label>' . __('Call to Action', 'guilro_petitions') . ':</label><br /><textarea maxlength="140" class="widefat" name="' . $this->get_field_name('call_to_action') . '">' . $instance['call_to_action'] . '</textarea></p>';
     echo '<p><label>' . __('Petition', 'guilro_petitions') . ':</label><br /><select class="widefat" name="' . $this->get_field_name('petition_id') . '">';
     foreach ($petitions as $petition) {
         $selected = $petition_id == $petition->id ? ' selected="selected"' : '';
         echo '<option value="' . $petition->id . '" ' . $selected . '>' . stripslashes(esc_html($petition->title)) . '</option>';
     }
     echo '</select></p>';
 }
function guilro_petitions_signatures_page()
{
    // check security: ensure user has authority
    if (!current_user_can('publish_posts')) {
        wp_die(__('Insufficient privileges: You need to be an editor to do that.', 'guilro_petitions'));
    }
    include_once 'class.speakout.php';
    include_once 'class.signature.php';
    include_once 'class.petition.php';
    $the_signatures = new guilro_petitions_Signature();
    $the_petitions = new guilro_petitions_Petition();
    global $guilro_petitions_settings;
    $options = $guilro_petitions_settings->getAll();
    $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
    $pid = isset($_REQUEST['pid']) ? $_REQUEST['pid'] : '';
    // petition id
    $sid = isset($_REQUEST['sid']) ? $_REQUEST['sid'] : '';
    // signature id
    // set variables for paged record display and for limit values in db query
    $paged = isset($_REQUEST['paged']) ? $_REQUEST['paged'] : '1';
    $total_pages = isset($_REQUEST['total_pages']) ? $_REQUEST['total_pages'] : '1';
    $current_page = guilro_petitions_SpeakOut::current_paged($paged, $total_pages);
    $query_limit = $options['signatures_rows'];
    $query_start = $current_page * $query_limit - $query_limit;
    switch ($action) {
        case 'delete':
            // security: ensure user has intention
            check_admin_referer('guilro_petitions-delete_signature' . $sid);
            // delete signature from the database
            $the_signatures->delete($sid);
            // count number of signatures in database
            $count = $the_signatures->count($pid);
            // get all signatures for display
            $signatures = $the_signatures->all($pid, $query_start, $query_limit);
            // set up display strings
            // set up values for the table label ie: All Signatures (36)
            if ($count == 0) {
                $petition = '';
            } elseif ($pid != '') {
                $petition = $signatures[0]->title;
            } else {
                $petition = __('All Signatures', 'guilro_petitions');
            }
            $table_label = esc_html($petition) . ' <span class="count">(' . $count . ')</span>';
            $base_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures&action=petition&pid=' . $pid);
            $message_update = __('Signature deleted.', 'guilro_petitions');
            break;
        case 'petition':
            // count number of signatures in database
            $count = $the_signatures->count($pid);
            // get all signatures for display
            $signatures = $the_signatures->all($pid, $query_start, $query_limit);
            // TODO: Make this always show petition title (maybe use join in query)
            // set up display strings
            // if signatures exist, show petition title, else show petition id number
            if (count($signatures) > 0) {
                $table_label = esc_html($signatures[0]->title) . ' <span class="count">(' . $count . ')</span>';
            } else {
                $table_label = __('Petition', 'guilro_petitions') . ' ' . $pid . ' <span class="count">(0)</span>';
            }
            $base_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures&action=petition&pid=' . $pid);
            $message_update = '';
            break;
        case 'reconfirm':
            check_admin_referer('guilro_petitions-resend_confirmations' . $pid);
            include_once 'class.mail.php';
            $petition_to_confirm = new guilro_petitions_Petition();
            // get unconfirmed signatures
            $unconfirmed = $the_signatures->unconfirmed($pid);
            foreach ($unconfirmed as $signature) {
                $unconfirmed_signature = new guilro_petitions_signature();
                $unconfirmed_signature->first_name = $signature->first_name;
                $unconfirmed_signature->last_name = $signature->last_name;
                $unconfirmed_signature->email = $signature->email;
                $unconfirmed_signature->confirmation_code = $signature->confirmation_code;
                guilro_petitions_Mail::send_confirmation($petition_to_confirm, $unconfirmed_signature, $options);
                // destroy temporary object so we can re-use the variable
                unset($unconfirmed_signature);
            }
            // count number of signatures in database
            $count = $the_signatures->count($pid);
            // get all signatures for display
            $signatures = $the_signatures->all($pid, $query_start, $query_limit);
            // set up display strings
            if (count($signatures) > 0) {
                $table_label = esc_html($signatures[0]->title) . ' <span class="count">(' . $count . ')</span>';
            } else {
                $table_label = __('Petition', 'guilro_petitions') . ' ' . $pid . ' <span class="count">(0)</span>';
            }
            $base_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures&action=petition&pid=' . $pid);
            $message_update = __('Confirmation emails sent.', 'guilro_petitions');
            break;
        default:
            // count number of signatures in database
            $count = $the_signatures->count($pid);
            // get all signatures for display
            $signatures = $the_signatures->all($pid, $query_start, $query_limit);
            // set up display strings
            $table_label = __('All Signatures', 'guilro_petitions') . ' <span class="count">(' . $count . ')</span>';
            $base_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures');
            $message_update = '';
    }
    // get list of petitions to populate select box navigation
    $petitions_list = $the_petitions->quicklist();
    // Set up URLs for 'Download as CSV' and 'Resend confirmations' buttons
    // Show buttons only when we are viewing signatures from a single petition
    if (count($petitions_list) == 1 || $pid != '') {
        // if $pid (petition id) wasn't sent through the URL, then create it from the query
        if ($pid == '') {
            $pid = $petitions_list[0]->id;
        }
        $csv_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures&action=petition&pid=' . $pid);
        $reconfirm_url = site_url('wp-admin/admin.php?page=guilro_petitions_signatures&action=reconfirm&pid=' . $pid);
    }
    // display the Signatures table
    include_once __DIR__ . '/signatures.view.php';
}