GCALENDAR_ADDEVENT
Class GCALENDAR_ADDEVENT
Source Source
File: src/integrations/google-calendar/actions/gcalendar-addevent.php
class GCALENDAR_ADDEVENT { use Actions; /** * The prefix for the action fields. * * @var string */ const PREFIX = 'GCALENDAR_ADDEVENT'; public function __construct() { $this->setup_action(); } /** * Setup Action. * * @return void. */ protected function setup_action() { $this->set_integration( 'GOOGLE_CALENDAR' ); $this->set_action_code( self::PREFIX . '_CODE' ); $this->set_action_meta( self::PREFIX . '_META' ); $this->set_support_link( Automator()->get_author_support_link( $this->get_action_code(), 'knowledge-base/google-calendar/' ) ); $this->set_is_pro( false ); $this->set_requires_user( false ); $this->set_sentence( sprintf( /* translators: Action sentence */ esc_attr__( 'Add {{an event:%1$s}} to {{a Google Calendar:%2$s}}', 'uncanny-automator' ), $this->get_action_meta(), $this->get_formatted_code( 'calendar' ) . ':' . $this->get_action_meta() ) ); $date_format_wp = get_option( 'date_format', 'F j, Y' ); $timezone_wp = wp_timezone_string(); /* translators: Action - WordPress */ $this->set_readable_sentence( esc_attr__( 'Add {{an event}} to {{a Google Calendar}}', 'uncanny-automator' ) ); $options_group = array( $this->get_action_meta() => array( // Calendar list. array( 'option_code' => $this->get_formatted_code( 'calendar' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Calendar', 'uncanny-automator' ), 'input_type' => 'select', 'is_ajax' => true, 'endpoint' => 'automator_google_calendar_list_calendars_dropdown', 'required' => true, 'supports_custom_value' => false, 'required' => true, 'options_show_id' => false, ), // Summary. array( 'option_code' => $this->get_action_meta(), /* translators: Calendar field */ 'label' => esc_attr__( 'Title', 'uncanny-automator' ), 'input_type' => 'text', 'supports_custom_value' => true, 'required' => true, ), // Location. array( 'option_code' => $this->get_formatted_code( 'location' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Location', 'uncanny-automator' ), 'input_type' => 'text', 'supports_custom_value' => true, 'required' => false, ), // Description. array( 'option_code' => $this->get_formatted_code( 'description' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Description', 'uncanny-automator' ), 'input_type' => 'textarea', 'supports_custom_value' => true, 'required' => false, ), // Start date. array( 'option_code' => $this->get_formatted_code( 'start_date' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Start date', 'uncanny-automator' ), 'input_type' => 'date', 'supports_tokens' => true, 'required' => true, 'description' => sprintf( '%1$s <a target="_blank" title="%3$s" href="%2$s">%3$s</a>.', esc_attr__( 'Start date must be in the date format set in', 'uncanny-automator' ), admin_url( 'options-general.php#timezone_string' ), esc_attr__( 'WordPress', 'uncanny-automator' ) ), ), // Start time. array( 'option_code' => $this->get_formatted_code( 'start_time' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Start time', 'uncanny-automator' ), 'input_type' => 'time', 'supports_tokens' => true, 'required' => false, 'description' => sprintf( '%1$s <a target="_blank" title="%3$s" href="%2$s">%3$s</a>. %4$s', esc_attr__( 'The event time will match the timezone set in', 'uncanny-automator' ), admin_url( 'options-general.php#timezone_string' ), esc_attr__( 'WordPress Settings', 'uncanny-automator' ), esc_attr__( 'Leave blank to create an all-day event.', 'uncanny-automator' ) ), ), // End date. array( 'option_code' => $this->get_formatted_code( 'end_date' ), /* translators: Calendar field */ 'label' => esc_attr__( 'End date', 'uncanny-automator' ), 'input_type' => 'date', 'supports_tokens' => true, 'required' => true, 'description' => sprintf( '%1$s <a target="_blank" title="%3$s" href="%2$s">%3$s</a>.', esc_attr__( 'End date must be in the date format set in', 'uncanny-automator' ), admin_url( 'options-general.php#timezone_string' ), esc_attr__( 'WordPress', 'uncanny-automator' ) ), ), // End time. array( 'option_code' => $this->get_formatted_code( 'end_time' ), /* translators: Calendar field */ 'label' => esc_attr__( 'End time', 'uncanny-automator' ), 'input_type' => 'time', 'supports_tokens' => true, 'required' => false, 'description' => sprintf( '%1$s <a target="_blank" title="%3$s" href="%2$s">%3$s</a>. %4$s', esc_attr__( 'The event time will match the timezone set in', 'uncanny-automator' ), admin_url( 'options-general.php#timezone_string' ), esc_attr__( 'WordPress Settings', 'uncanny-automator' ), esc_attr__( 'Leave blank to create an all-day event.', 'uncanny-automator' ) ), ), // Attendees. array( 'option_code' => $this->get_formatted_code( 'attendees' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Attendees', 'uncanny-automator' ), 'description' => esc_attr__( 'Comma separated email addresses of the attendees', 'uncanny-automator' ), 'input_type' => 'text', 'supports_custom_value' => true, 'required' => false, ), // Email Notifications. array( 'option_code' => $this->get_formatted_code( 'notification_email' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Enable email notifications in Google Calendar', 'uncanny-automator' ), 'input_type' => 'checkbox', 'default_value' => true, ), // Notification time. array( 'option_code' => $this->get_formatted_code( 'notification_time_email' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Minutes before event to trigger email notification', 'uncanny-automator' ), 'description' => esc_attr__( 'If no value is entered, the notification will fire 15 minutes before the event.', 'uncanny-automator' ), 'placeholder' => esc_attr__( '15', 'uncanny-automator' ), 'input_type' => 'text', 'default_value' => 15, 'required' => false, ), // Popup Notifications. array( 'option_code' => $this->get_formatted_code( 'notification_popup' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Enable popup notifications in Google Calendar', 'uncanny-automator' ), 'input_type' => 'checkbox', 'default_value' => true, ), array( 'option_code' => $this->get_formatted_code( 'notification_time_popup' ), /* translators: Calendar field */ 'label' => esc_attr__( 'Minutes before event to trigger popup notification', 'uncanny-automator' ), 'description' => esc_attr__( 'If no value is entered, the notification will fire 15 minutes before the event.', 'uncanny-automator' ), 'placeholder' => esc_attr__( '15', 'uncanny-automator' ), 'input_type' => 'text', 'default_value' => 15, 'required' => false, ), ), ); $this->set_options_group( $options_group ); $this->register_action(); } /** * Get formatted code. * * @param string $option_code The option code. * * @return string The prefix underscore option code string. */ protected function get_formatted_code( $option_code = '' ) { return sprintf( '%1$s_%2$s', self::PREFIX, $option_code ); } /** * Process the action. * * @param int $user_id * @param array $action_data * @param int $recipe_id * @param array $args * @param $parsed * * @return void. */ protected function process_action( $user_id, $action_data, $recipe_id, $args, $parsed ) { $calendar_id = isset( $parsed[ $this->get_formatted_code( 'calendar' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'calendar' ) ] ) : 0; $summary = isset( $parsed[ $this->get_action_meta() ] ) ? sanitize_text_field( $parsed[ $this->get_action_meta() ] ) : ''; $location = isset( $parsed[ $this->get_formatted_code( 'location' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'location' ) ] ) : ''; $description = isset( $parsed[ $this->get_formatted_code( 'description' ) ] ) ? sanitize_textarea_field( $parsed[ $this->get_formatted_code( 'description' ) ] ) : ''; $start_date = isset( $parsed[ $this->get_formatted_code( 'start_date' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'start_date' ) ] ) : false; $start_time = isset( $parsed[ $this->get_formatted_code( 'start_time' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'start_time' ) ] ) : false; $end_date = isset( $parsed[ $this->get_formatted_code( 'end_date' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'end_date' ) ] ) : false; $end_time = isset( $parsed[ $this->get_formatted_code( 'end_time' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'end_time' ) ] ) : false; $attendees = isset( $parsed[ $this->get_formatted_code( 'attendees' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'attendees' ) ] ) : ''; $notification_email = isset( $parsed[ $this->get_formatted_code( 'notification_email' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'notification_email' ) ] ) : 0; $notification_popup = isset( $parsed[ $this->get_formatted_code( 'notification_popup' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'notification_popup' ) ] ) : 0; $notification_time_email = isset( $parsed[ $this->get_formatted_code( 'notification_time_email' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'notification_time_email' ) ] ) : 0; $notification_time_popup = isset( $parsed[ $this->get_formatted_code( 'notification_time_popup' ) ] ) ? sanitize_text_field( $parsed[ $this->get_formatted_code( 'notification_time_popup' ) ] ) : 0; $helper = Automator()->helpers->recipe->google_calendar->options; $body = array( 'action' => 'create_event', 'access_token' => $helper->get_client(), 'summary' => $summary, 'location' => $location, 'calendar_id' => $calendar_id, 'description' => $description, 'start_date' => $start_date, 'start_time' => $start_time, 'end_date' => $end_date, 'end_time' => $end_time, 'attendees' => str_replace( ' ', '', trim( $attendees ) ), 'notification_email' => $notification_email, 'notification_popup' => $notification_popup, 'notification_time_email' => $notification_time_email, 'notification_time_popup' => $notification_time_popup, 'timezone' => apply_filters( 'automator_google_calendar_add_event_timezone', wp_timezone_string() ), 'date_format' => 'Y-m-d', ); try { $response = $helper->api_call( $body, $action_data ); Automator()->complete->action( $user_id, $action_data, $recipe_id ); } catch ( \Exception $e ) { $action_data['complete_with_errors'] = true; Automator()->complete->action( $user_id, $action_data, $recipe_id, $e->getMessage() ); } } }
Expand full source code Collapse full source code View on Github
Methods Methods
- __construct
- get_formatted_code — Get formatted code.
- process_action — Process the action.
- setup_action — Setup Action.