Plugin Directory

Changeset 3019463


Ignore:
Timestamp:
01/09/2024 05:48:02 PM (2 years ago)
Author:
wiredimpact
Message:
  • Added custom Gravity Forms notification merge tags to allow volunteer opportunity details to be included dynamically.
  • For clarity, hid the RSVP and volunteer email admin meta boxes if no volunteer RSVPs will be stored for an opportunity.
Location:
wired-impact-volunteer-management/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • wired-impact-volunteer-management/trunk/README.txt

    r3011449 r3019463  
    55Tested up to: 6.4
    66Requires PHP: 5.2.4
    7 Stable tag: 2.2
     7Stable tag: 2.3
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    120120== Changelog ==
    121121
     122= 2.3 =
     123* Added custom Gravity Forms notification merge tags to allow volunteer opportunity details to be included dynamically.
     124* For clarity, hid the RSVP and volunteer email admin meta boxes if no volunteer RSVPs will be stored for an opportunity.
     125
    122126= 2.2 =
    123127* Introduced settings to enable or disable certain email notifications to volunteers, admins and volunteer opportunity contacts.
  • wired-impact-volunteer-management/trunk/admin/class-admin.php

    r3011449 r3019463  
    348348    /**
    349349     * Add meta boxes for volunteer opportunities.
    350      */
    351     public function add_meta_boxes(){
    352         //Opportunity details such as location and time
     350     *
     351     * The RSVP and email meta boxes are only shown if the opportunity is displaying
     352     * the built-in signup form or already has RSVPs. This avoids showing meta boxes
     353     * focused on volunteers when no volunteers will be stored for the opportunity.
     354     *
     355     * @param string $post_type The post type of the post being edited.
     356     * @param object $post The post object for the volunteer opportunity.
     357     */
     358    public function add_meta_boxes( $post_type, $post ) {
     359
     360        if ( $post_type !== 'volunteer_opp' ) {
     361
     362            return;
     363        }
     364
     365        // Opportunity details such as location and time.
    353366        add_meta_box(
    354             'volunteer-opportunity-details',                                            // Unique ID
    355             __( 'Volunteer Opportunity Details', 'wired-impact-volunteer-management' ), // Box title
    356             array( $this, 'display_opportunity_details_meta_box' ),                     // Content callback
    357             'volunteer_opp',                                                            // Post type
    358             'normal'                                                                    // Location
     367            'volunteer-opportunity-details',
     368            __( 'Volunteer Opportunity Details', 'wired-impact-volunteer-management' ),
     369            array( $this, 'display_opportunity_details_meta_box' ),
     370            'volunteer_opp',
     371            'normal'
    359372        );
    360373
    361         //Opportunity RSVP details such as who signed up
     374        // Show the volunteer RSVP and email meta boxes only if the opportunity is showing a signup form or already has RSVPs.
     375        $volunteer_opp = new WI_Volunteer_Management_Opportunity( $post->ID );
     376        $form_type     = $volunteer_opp->opp_meta['form_type'];
     377        $num_rsvps     = (int) $volunteer_opp->get_number_rsvps();
     378
     379        $show_volunteer_opp_meta_boxes = ( $form_type !== 'no_form' || $num_rsvps > 0 ) ? true : false;
     380        $show_volunteer_opp_meta_boxes = apply_filters( 'wivm_show_volunteer_opp_meta_boxes', $show_volunteer_opp_meta_boxes, $volunteer_opp, $num_rsvps );
     381
     382        if ( $show_volunteer_opp_meta_boxes === false ) {
     383
     384            return;
     385        }
     386
     387        // Opportunity RSVP details such as who signed up.
    362388        add_meta_box(
    363             'volunteer-opportunity-rsvps',                                            // Unique ID
    364             __( 'Volunteer Opportunity RSVPs', 'wired-impact-volunteer-management' ), // Box title
    365             array( $this, 'display_opportunity_rsvps_meta_box' ),                     // Content callback
    366             'volunteer_opp',                                                          // Post type
    367             'normal'                                                                  // Location
     389            'volunteer-opportunity-rsvps',
     390            __( 'Volunteer Opportunity RSVPs', 'wired-impact-volunteer-management' ),
     391            array( $this, 'display_opportunity_rsvps_meta_box' ),
     392            'volunteer_opp',
     393            'normal'
    368394        );
    369395
    370         //Volunteer custom email form
     396        // Volunteer custom email form.
    371397        add_meta_box(
    372             'volunteer-opportunity-email-form',                                 // Unique ID
    373             __( 'Email Your Volunteers', 'wired-impact-volunteer-management' ), // Box title
    374             array( $this, 'display_opportunity_email_form_meta_box' ),          // Content callback
    375             'volunteer_opp',                                                    // Post type
    376             'normal'                                                            // Location
     398            'volunteer-opportunity-email-form',
     399            __( 'Email Your Volunteers', 'wired-impact-volunteer-management' ),
     400            array( $this, 'display_opportunity_email_form_meta_box' ),
     401            'volunteer_opp',
     402            'normal'
    377403        );
    378404
    379         //List of sent custom volunteer emails
     405        // List of sent custom volunteer emails.
    380406        add_meta_box(
    381             'volunteer-opportunity-email-list',                                // Unique ID
    382             __( 'Emails Sent to Volunteers', 'wired-impact-volunteer-management' ), // Box title
    383             array( $this, 'display_opportunity_email_list_meta_box' ),         // Content callback
    384             'volunteer_opp',                                                   // Post type
    385             'normal'                                                           // Location
     407            'volunteer-opportunity-email-list',
     408            __( 'Emails Sent to Volunteers', 'wired-impact-volunteer-management' ),
     409            array( $this, 'display_opportunity_email_list_meta_box' ),
     410            'volunteer_opp',
     411            'normal'
    386412        );
    387413    }
  • wired-impact-volunteer-management/trunk/cypress/e2e/gravity-forms-integration.cy.js

    r3008933 r3019463  
    66 * - The Gravity Forms plugin is installed.
    77 * - The Gravity Forms CLI plugin is installed and activated.
     8 * - MailCatcher is used to catch emails sent by the plugin and is accessible via the web.
    89 */
    910describe('Gravity Forms Integration', () => {
     
    1516        cy.trashAllGravityFormsForms();
    1617        cy.createVolunteerSignupForm();
     18        cy.deleteAllMailCatcherEmails();
    1719    });
    1820 
     
    4850    });
    4951
    50     it('Passes data from Gravity Forms to the volunteer management system and shows necessary errors', function() {
     52    it('Passes data from Gravity Forms to the volunteer management system, replaces custom merge tags and shows necessary errors', function() {
    5153
    5254        // A Volunteer Management feed can be saved
     
    6163        cy.contains('button','Save Settings').click();
    6264
    63         // Select to display the Gravity Forms form
     65        // Add custom merge tags to the admin notification
     66        cy.visit('/wp-admin/admin.php?page=gf_edit_forms&view=settings&subview=notification&id=' + this.volunteerSignupFormID);
     67        cy.contains('a', 'Admin Notification').click();
     68        cy.get('.wp-editor-wrap .gform-dropdown--merge-tags > button').click();
     69        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Name').click({ force: true });
     70        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Date & Time').click({ force: true });
     71        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Location').click({ force: true });
     72        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Contact Name').click({ force: true });
     73        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Contact Phone').click({ force: true });
     74        cy.contains('.wp-editor-wrap button', 'Volunteer Opportunity Contact Email').click({ force: true });
     75        cy.contains('button','Update Notification').click();
     76
     77        // Fill in some opportunity details and select to display the Gravity Forms form
    6478        cy.visit('/wp-admin/post.php?post=' + this.volunteerOppID + '&action=edit');
     79        cy.get('input#contact_name').type('Jamie Taylor');
     80        cy.get('input#contact_phone').type('(123) 456-7890');
     81        cy.get('input#contact_email').type('jamie@volunteering.org');
     82        cy.get('input#location').type('Busch Stadium');
     83        cy.get('input#street').type('700 Clark Ave');
     84        cy.get('input#city').type('St. Louis');
     85        cy.get('input#state').type('MO');
     86        cy.get('input#zip').type('63102');
     87        cy.get('input#flexible_frequency').type('Every Wednesday');
    6588        cy.contains('tr', 'Form Type').find('select').select('gravity_forms');
    6689        cy.contains('tr', 'Select a Form').find('select').select(this.volunteerSignupFormID);
     
    89112        cy.contains('a', 'Abraham').click();
    90113        cy.contains('.gforms_note_wired-impact-volunteer-management', 'The volunteer successfully signed up for this opportunity.').should('exist');
     114
     115        // The admin notification custom merge tags have been replaced correctly
     116        cy.request('GET', 'http://127.0.0.1:1080/messages/3.source').then((response) => {
     117            expect(response.status).to.eq(200);
     118            expect(response.body).to.include('Subject: New submission from Volunteer Signup');
     119            expect(response.body).to.include('Clean up Trash');
     120            expect(response.body).to.include('Every Wednesday');
     121            expect(response.body).to.include('Busch Stadium, 700 Clark Ave, St. Louis, MO 63102');
     122            expect(response.body).to.include('Jamie Taylor');
     123            expect(response.body).to.include('(123) 456-7890');
     124            expect(response.body).to.include('jamie@volunteering.org');
     125        });
    91126
    92127        // An error shows in the Gravity Forms entry when the same volunteer signs up again
  • wired-impact-volunteer-management/trunk/cypress/support/e2e.js

    r3004340 r3019463  
    1616// Import commands.js using ES2015 syntax:
    1717import './commands'
     18
     19// Ignore ResizeObserver errors since they occur when using Gravity Forms merge tag dropdowns
     20Cypress.on('uncaught:exception', (err) => {
     21
     22    if ((err.message.includes("ResizeObserver loop limit exceeded"))) {
     23        return false;
     24    }
     25});
  • wired-impact-volunteer-management/trunk/includes/class-gravity-forms.php

    r3008933 r3019463  
    238238        }
    239239    }
     240
     241    /**
     242     * Add custom volunteer opportunity merge tags to the Gravity Forms
     243     * merge tag dropdown.
     244     *
     245     * Our custom volunteer opportunity merge tags are only shown if a volunteer
     246     * opportunity form feed is active.
     247     *
     248     * @param array      $merge_tags The existing custom merge tags.
     249     * @param int        $form_id The ID of the current form.
     250     * @param array      $fields An array of field objects.
     251     * @param string|int $element_id The ID of the input field.
     252     * @return array The updated custom merge tags with the volunteer opportunity merge tags added.
     253     */
     254    public function add_custom_merge_tags( $merge_tags, $form_id, $fields, $element_id ) {
     255
     256        $form_feeds = GFAPI::get_feeds( null, $form_id, 'wired-impact-volunteer-management' );
     257
     258        if ( is_wp_error( $form_feeds ) ) {
     259
     260            return $merge_tags;
     261        }
     262
     263        array_push(
     264            $merge_tags,
     265            array(
     266                'label' => __( 'Volunteer Opportunity Name', 'wired-impact-volunteer-management' ),
     267                'tag'   => '{volunteer_opportunity_name}',
     268            ),
     269            array(
     270                'label' => __( 'Volunteer Opportunity Date & Time', 'wired-impact-volunteer-management' ),
     271                'tag'   => '{volunteer_opportunity_date_time}',
     272            ),
     273            array(
     274                'label' => __( 'Volunteer Opportunity Location', 'wired-impact-volunteer-management' ),
     275                'tag'   => '{volunteer_opportunity_location}',
     276            ),
     277            array(
     278                'label' => __( 'Volunteer Opportunity Contact Name', 'wired-impact-volunteer-management' ),
     279                'tag'   => '{volunteer_opportunity_contact_name}',
     280            ),
     281            array(
     282                'label' => __( 'Volunteer Opportunity Contact Phone Number', 'wired-impact-volunteer-management' ),
     283                'tag'   => '{volunteer_opportunity_contact_phone}',
     284            ),
     285            array(
     286                'label' => __( 'Volunteer Opportunity Contact Email', 'wired-impact-volunteer-management' ),
     287                'tag'   => '{volunteer_opportunity_contact_email}',
     288            )
     289        );
     290
     291        return $merge_tags;
     292    }
     293
     294    /**
     295     * Replace the custom volunteer opportunity merge tags with the appropriate text.
     296     *
     297     * For example, this runs when sending a Gravity Forms notification email.
     298     * The merge tags wrapped in "{}" are replaced with the appropriate text.
     299     *
     300     * @param string $text The current text in which merge tags are being replaced.
     301     * @param object $form The current form.
     302     * @param object $entry The current form entry.
     303     * @param bool   $url_encode Whether to encode any URLs found in the replaced value.
     304     * @param bool   $esc_html Whether to encode HTML found in the replaced value.
     305     * @param bool   $nl2br Whether to convert newlines to break tags.
     306     * @param string $format Determines how the value should be formatted. Default is html.
     307     * @return string The updated text with the custom merge tags replaced.
     308     */
     309    public function replace_custom_merge_tags( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) {
     310
     311        if ( $form === false ) {
     312
     313            return $text;
     314        }
     315
     316        $form_feeds = GFAPI::get_feeds( null, $form['id'], 'wired-impact-volunteer-management' );
     317
     318        if ( is_wp_error( $form_feeds ) ) {
     319
     320            return $text;
     321        }
     322
     323        add_filter( 'wivm_search_and_replace_text', array( $this, 'add_email_search_replace_text' ), 10, 2 );
     324
     325        $volunteer_opp_id = get_the_ID();
     326        $volunteer_opp    = new WI_Volunteer_Management_Opportunity( $volunteer_opp_id );
     327        $volunteer_email  = new WI_Volunteer_Management_Email( $volunteer_opp );
     328        $text             = $volunteer_email->replace_variables( $text );
     329
     330        remove_filter( 'wivm_search_and_replace_text', array( $this, 'add_email_search_replace_text' ), 10, 2 );
     331
     332        return $text;
     333    }
     334
     335    /**
     336     * Add our custom merge tags to the list of variables when doing a search and replace.
     337     *
     338     * Using the "wivm_search_and_replace_text" hook we piggyback onto the existing email
     339     * variables, copying the values from those that already exist. That way if those change
     340     * these don't need to be updated manually.
     341     *
     342     * @param array  $search_and_replace_text The existing variables with the text to replace them with.
     343     * @param object $user The user object for the volunteer.
     344     * @return array The updated variables with the text to replace them with.
     345     */
     346    public function add_email_search_replace_text( $search_and_replace_text, $user ) {
     347
     348        $search_and_replace_text['{volunteer_opportunity_name}']          = $search_and_replace_text['{opportunity_name}'];
     349        $search_and_replace_text['{volunteer_opportunity_date_time}']     = $search_and_replace_text['{opportunity_date_time}'];
     350        $search_and_replace_text['{volunteer_opportunity_location}']      = $search_and_replace_text['{opportunity_location}'];
     351        $search_and_replace_text['{volunteer_opportunity_contact_name}']  = $search_and_replace_text['{contact_name}'];
     352        $search_and_replace_text['{volunteer_opportunity_contact_phone}'] = $search_and_replace_text['{contact_phone}'];
     353        $search_and_replace_text['{volunteer_opportunity_contact_email}'] = $search_and_replace_text['{contact_email}'];
     354
     355        return $search_and_replace_text;
     356    }
     357
     358    /**
     359     * Hide the volunteer opportunity RSVP and email meta boxes if the
     360     * opportunity uses Gravity Forms and there are no active form feeds.
     361     *
     362     * This avoids showing meta boxes focused on volunteers when no volunteers
     363     * will be stored in the plugin for the opportunity.
     364     *
     365     * @param bool   $show_volunteer_opp_meta_boxes Whether to show the meta boxes.
     366     * @param object $volunteer_opp The volunteer opportunity object.
     367     * @param int    $num_rsvps The number of existing RSVPs for the volunteer opportunity.
     368     * @return bool Whether to show the meta boxes.
     369     */
     370    public function show_hide_volunteer_opp_meta_boxes( $show_volunteer_opp_meta_boxes, $volunteer_opp, $num_rsvps ) {
     371
     372        // If the form type isn't Gravity Forms or RSVPs already exist, don't alter whether the meta boxes are shown.
     373        if ( $volunteer_opp->opp_meta['form_type'] !== self::FORM_TYPE_SETTING_GF_VALUE || $num_rsvps > 0 ) {
     374
     375            return $show_volunteer_opp_meta_boxes;
     376        }
     377
     378        // If there's no active volunteer management form feed for this form, hide the meta boxes. If there is, show them.
     379        $form_feeds                    = GFAPI::get_feeds( null, $volunteer_opp->opp_meta['form_id'], 'wired-impact-volunteer-management' );
     380        $show_volunteer_opp_meta_boxes = ( is_wp_error( $form_feeds ) ) ? false : true;
     381
     382        return $show_volunteer_opp_meta_boxes;
     383    }
    240384}
  • wired-impact-volunteer-management/trunk/includes/class-wi-volunteer-management.php

    r3011449 r3019463  
    6969
    7070        $this->plugin_name = 'wired-impact-volunteer-management';
    71         $this->version     = '2.2';
     71        $this->version     = '2.3';
    7272
    7373        $this->load_dependencies();
     
    209209        $this->loader->add_action( 'admin_init', $plugin_admin, 'register_settings' );
    210210        $this->loader->add_action( 'edit_form_after_editor', $plugin_admin, 'show_opp_editor_description' );
    211         $this->loader->add_action( 'add_meta_boxes', $plugin_admin, 'add_meta_boxes' );
     211        $this->loader->add_action( 'add_meta_boxes', $plugin_admin, 'add_meta_boxes', 10, 2 );
    212212        $this->loader->add_action( 'save_post', $plugin_admin, 'save_volunteer_opp_meta', 10, 2 );
    213213        $this->loader->add_action( 'show_user_profile', $plugin_admin, 'show_extra_profile_fields' );
     
    269269            $this->loader->add_action( 'wp_enqueue_scripts', $gravity_forms, 'enqueue_scripts' );
    270270            $this->loader->add_action( 'gform_loaded', 'WI_Volunteer_Management_Gravity_Forms_Feed_AddOn_Bootstrap', 'load', 5 );
     271            $this->loader->add_filter( 'gform_custom_merge_tags', $gravity_forms, 'add_custom_merge_tags', 10, 4 );
     272            $this->loader->add_filter( 'gform_replace_merge_tags', $gravity_forms, 'replace_custom_merge_tags', 10, 7 );
     273            $this->loader->add_filter( 'wivm_show_volunteer_opp_meta_boxes', $gravity_forms, 'show_hide_volunteer_opp_meta_boxes', 10, 3 );
    271274        }
    272275    }
  • wired-impact-volunteer-management/trunk/languages/wired-impact-volunteer-management.pot

    r3011449 r3019463  
    1 # Copyright (C) 2023 Wired Impact
     1# Copyright (C) 2024 Wired Impact
    22# This file is distributed under the GPL-2.0+.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Wired Impact Volunteer Management 2.2\n"
     5"Project-Id-Version: Wired Impact Volunteer Management 2.3\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wired-impact-volunteer-management\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2023-12-18T14:19:49+00:00\n"
     12"POT-Creation-Date: 2024-01-09T17:32:45+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.8.1\n"
     
    6666
    6767#: admin/class-admin.php:197
    68 #: admin/class-admin.php:689
    69 #: admin/class-admin.php:699
    7068#: admin/class-admin.php:715
     69#: admin/class-admin.php:725
     70#: admin/class-admin.php:741
    7171#: admin/pages/volunteer.php:92
    7272#: admin/pages/volunteer.php:111
     
    127127msgstr ""
    128128
    129 #: admin/class-admin.php:355
     129#: admin/class-admin.php:368
    130130msgid "Volunteer Opportunity Details"
    131131msgstr ""
    132132
    133 #: admin/class-admin.php:364
     133#: admin/class-admin.php:390
    134134msgid "Volunteer Opportunity RSVPs"
    135135msgstr ""
    136136
    137 #: admin/class-admin.php:373
     137#: admin/class-admin.php:399
    138138msgid "Email Your Volunteers"
    139139msgstr ""
    140140
    141 #: admin/class-admin.php:382
     141#: admin/class-admin.php:408
    142142msgid "Emails Sent to Volunteers"
    143143msgstr ""
    144144
    145 #: admin/class-admin.php:406
     145#: admin/class-admin.php:432
    146146msgid "Contact Information"
    147147msgstr ""
    148148
    149 #: admin/class-admin.php:410
    150 #: admin/class-admin.php:686
    151 #: admin/class-admin.php:696
     149#: admin/class-admin.php:436
    152150#: admin/class-admin.php:712
     151#: admin/class-admin.php:722
     152#: admin/class-admin.php:738
    153153#: includes/class-gravity-forms-feed-addon.php:106
    154154#: includes/class-gravity-forms-feed-addon.php:110
     
    158158msgstr ""
    159159
    160 #: admin/class-admin.php:415
    161 #: admin/class-admin.php:877
     160#: admin/class-admin.php:441
     161#: admin/class-admin.php:903
    162162#: includes/class-gravity-forms-feed-addon.php:137
    163163#: includes/class-wp-volunteer-list-table.php:163
     
    165165msgstr ""
    166166
    167 #: admin/class-admin.php:420
     167#: admin/class-admin.php:446
    168168#: admin/pages/help-settings.php:33
    169169#: includes/class-gravity-forms-feed-addon.php:144
     
    171171msgstr ""
    172172
    173 #: admin/class-admin.php:426
     173#: admin/class-admin.php:452
    174174msgid "Location Information"
    175175msgstr ""
    176176
    177 #: admin/class-admin.php:430
     177#: admin/class-admin.php:456
    178178msgid "Location Name"
    179179msgstr ""
    180180
    181 #: admin/class-admin.php:435
     181#: admin/class-admin.php:461
    182182msgid "Street Address"
    183183msgstr ""
    184184
    185 #: admin/class-admin.php:440
     185#: admin/class-admin.php:466
    186186msgid "City"
    187187msgstr ""
    188188
    189 #: admin/class-admin.php:445
     189#: admin/class-admin.php:471
    190190msgid "State"
    191191msgstr ""
    192192
    193 #: admin/class-admin.php:450
     193#: admin/class-admin.php:476
    194194msgid "Zip"
    195195msgstr ""
    196196
    197 #: admin/class-admin.php:456
     197#: admin/class-admin.php:482
    198198msgid "Date and Time"
    199199msgstr ""
    200200
    201 #: admin/class-admin.php:460
     201#: admin/class-admin.php:486
    202202msgid "One-Time Opportunity?"
    203203msgstr ""
    204204
    205 #: admin/class-admin.php:463
     205#: admin/class-admin.php:489
    206206msgid "This is a one-time opportunity at a fixed date and time."
    207207msgstr ""
    208208
    209 #: admin/class-admin.php:469
     209#: admin/class-admin.php:495
    210210msgid "Start Date & Time"
    211211msgstr ""
    212212
    213 #: admin/class-admin.php:477
     213#: admin/class-admin.php:503
    214214msgid "End Date & Time"
    215215msgstr ""
    216216
    217 #: admin/class-admin.php:481
     217#: admin/class-admin.php:507
    218218msgid "Whoops, it looks like you set your event to end before it started."
    219219msgstr ""
    220220
    221 #: admin/class-admin.php:486
     221#: admin/class-admin.php:512
    222222msgid "When Will This Event Happen?"
    223223msgstr ""
    224224
    225 #: admin/class-admin.php:487
     225#: admin/class-admin.php:513
    226226msgid "On your own time, All summer, etc."
    227227msgstr ""
    228228
    229 #: admin/class-admin.php:491
     229#: admin/class-admin.php:517
    230230msgid "Volunteer Limit"
    231231msgstr ""
    232232
    233 #: admin/class-admin.php:495
     233#: admin/class-admin.php:521
    234234msgid "Is There a Volunteer Limit?"
    235235msgstr ""
    236236
    237 #: admin/class-admin.php:498
     237#: admin/class-admin.php:524
    238238msgid "Only a fixed number of people can participate in this volunteer opportunity."
    239239msgstr ""
    240240
    241 #: admin/class-admin.php:504
     241#: admin/class-admin.php:530
    242242msgid "Max Number of Volunteers"
    243243msgstr ""
    244244
    245 #: admin/class-admin.php:509
     245#: admin/class-admin.php:535
    246246msgid "Volunteer Signup Form"
    247247msgstr ""
    248248
    249 #: admin/class-admin.php:513
     249#: admin/class-admin.php:539
    250250msgid "The built-in signup form includes name, email and phone number fields. It can't be modified."
    251251msgstr ""
    252252
    253 #: admin/class-admin.php:517
     253#: admin/class-admin.php:543
    254254msgid "Form Type"
    255255msgstr ""
    256256
    257 #: admin/class-admin.php:545
     257#: admin/class-admin.php:571
    258258#: admin/pages/help-settings.php:90
    259259msgid "No Form"
    260260msgstr ""
    261261
    262 #: admin/class-admin.php:546
     262#: admin/class-admin.php:572
    263263#: admin/pages/help-settings.php:91
    264264msgid "Built-In Signup Form"
    265265msgstr ""
    266266
    267 #: admin/class-admin.php:679
     267#: admin/class-admin.php:705
    268268msgid "Number of Open Spots: %s"
    269269msgstr ""
    270270
    271 #: admin/class-admin.php:680
     271#: admin/class-admin.php:706
    272272msgid "Number RSVPed: %d"
    273273msgstr ""
    274274
    275 #: admin/class-admin.php:687
    276 #: admin/class-admin.php:697
    277275#: admin/class-admin.php:713
     276#: admin/class-admin.php:723
     277#: admin/class-admin.php:739
    278278#: includes/class-wp-volunteer-list-table.php:162
    279279msgid "E-mail"
    280280msgstr ""
    281281
    282 #: admin/class-admin.php:688
    283 #: admin/class-admin.php:698
    284282#: admin/class-admin.php:714
     283#: admin/class-admin.php:724
     284#: admin/class-admin.php:740
    285285msgid "Phone"
    286286msgstr ""
    287287
    288 #: admin/class-admin.php:705
     288#: admin/class-admin.php:731
    289289msgid "No one has signed up for this opportunity yet."
    290290msgstr ""
    291291
    292 #: admin/class-admin.php:734
     292#: admin/class-admin.php:760
    293293msgid "No one has signed up for this opportunity, so you can't send any emails yet."
    294294msgstr ""
    295295
    296 #: admin/class-admin.php:750
     296#: admin/class-admin.php:776
    297297msgid "Send a custom email to all volunteers who signed up for this opportunity. This email is sent to the admin and the contact for this opportunity with the volunteers BCC'ed. That way you know the email was sent successfully. You can use these variables to personalize the email when it's sent: {opportunity_name}, {opportunity_date_time}, {opportunity_location}, {contact_name}, {contact_phone}, {contact_email}"
    298298msgstr ""
    299299
    300 #: admin/class-admin.php:752
     300#: admin/class-admin.php:778
    301301msgid "Email Subject"
    302302msgstr ""
    303303
    304 #: admin/class-admin.php:759
     304#: admin/class-admin.php:785
    305305msgid "Send Email"
    306306msgstr ""
    307307
    308 #: admin/class-admin.php:787
    309 #: admin/class-admin.php:1117
    310 #: admin/class-admin.php:1251
     308#: admin/class-admin.php:813
     309#: admin/class-admin.php:1143
     310#: admin/class-admin.php:1277
    311311#: frontend/class-public.php:478
    312312#: frontend/class-public.php:485
     
    314314msgstr ""
    315315
    316 #: admin/class-admin.php:822
     316#: admin/class-admin.php:848
    317317msgctxt "email count"
    318318msgid "<p>1 email has been sent.</p>"
     
    321321msgstr[1] ""
    322322
    323 #: admin/class-admin.php:829
    324 #: admin/class-admin.php:924
     323#: admin/class-admin.php:855
     324#: admin/class-admin.php:950
    325325msgid "When"
    326326msgstr ""
    327327
    328 #: admin/class-admin.php:830
     328#: admin/class-admin.php:856
    329329msgid "Sender"
    330330msgstr ""
    331331
    332 #: admin/class-admin.php:839
     332#: admin/class-admin.php:865
    333333msgid "Automated Reminder Email"
    334334msgstr ""
    335335
    336336#. translators: date and time format for mysql2date() function, see http://php.net/manual/en/function.date.php
    337 #: admin/class-admin.php:846
     337#: admin/class-admin.php:872
    338338msgid "D, M j, Y \\&#64; g:i a"
    339339msgstr ""
    340340
    341 #: admin/class-admin.php:863
     341#: admin/class-admin.php:889
    342342msgid "No emails have been sent yet. We'll list them here when we send automated reminders and when you send custom emails to volunteers."
    343343msgstr ""
    344344
    345 #: admin/class-admin.php:880
     345#: admin/class-admin.php:906
    346346msgid "Please enter your phone number in the format (000) 000-0000."
    347347msgstr ""
    348348
    349 #: admin/class-admin.php:884
     349#: admin/class-admin.php:910
    350350#: admin/pages/volunteer.php:39
    351351msgid "Notes"
    352352msgstr ""
    353353
    354 #: admin/class-admin.php:887
     354#: admin/class-admin.php:913
    355355msgid "Please enter any notes about this user."
    356356msgstr ""
    357357
    358 #: admin/class-admin.php:922
     358#: admin/class-admin.php:948
    359359msgid "Title"
    360360msgstr ""
    361361
    362 #: admin/class-admin.php:923
     362#: admin/class-admin.php:949
    363363msgid "Location"
    364364msgstr ""
    365365
    366 #: admin/class-admin.php:925
     366#: admin/class-admin.php:951
    367367msgid "Number of RSVPs"
    368368msgstr ""
    369369
    370 #: admin/class-admin.php:926
     370#: admin/class-admin.php:952
    371371msgid "Number of Open Spots"
    372372msgstr ""
    373373
    374 #: admin/class-admin.php:1052
     374#: admin/class-admin.php:1078
    375375msgid "All Opportunities"
    376376msgstr ""
    377377
    378 #: admin/class-admin.php:1057
     378#: admin/class-admin.php:1083
    379379msgid "Upcoming One-time Opportunities"
    380380msgstr ""
    381381
    382 #: admin/class-admin.php:1062
     382#: admin/class-admin.php:1088
    383383msgid "Past One-time Opportunities"
    384384msgstr ""
    385385
    386 #: admin/class-admin.php:1067
     386#: admin/class-admin.php:1093
    387387msgid "Flexible Opportunities"
    388388msgstr ""
     
    834834#: templates/opp-single-form.php:55
    835835msgid "We're sorry, but we're no longer accepting new volunteers for this opportunity."
     836msgstr ""
     837
     838#: includes/class-gravity-forms.php:266
     839msgid "Volunteer Opportunity Name"
     840msgstr ""
     841
     842#: includes/class-gravity-forms.php:270
     843msgid "Volunteer Opportunity Date & Time"
     844msgstr ""
     845
     846#: includes/class-gravity-forms.php:274
     847msgid "Volunteer Opportunity Location"
     848msgstr ""
     849
     850#: includes/class-gravity-forms.php:278
     851msgid "Volunteer Opportunity Contact Name"
     852msgstr ""
     853
     854#: includes/class-gravity-forms.php:282
     855msgid "Volunteer Opportunity Contact Phone Number"
     856msgstr ""
     857
     858#: includes/class-gravity-forms.php:286
     859msgid "Volunteer Opportunity Contact Email"
    836860msgstr ""
    837861
  • wired-impact-volunteer-management/trunk/wivm.php

    r3011449 r3019463  
    1717 * Plugin URI:        https://wiredimpact.com/wordpress-plugins-for-nonprofits/volunteer-management/
    1818 * Description:       A simple, free way to keep track of your nonprofit’s volunteers and opportunities.
    19  * Version:           2.2
     19 * Version:           2.3
    2020 * Author:            Wired Impact
    2121 * Author URI:        https://wiredimpact.com
Note: See TracChangeset for help on using the changeset viewer.