/** * Add the [recras-arrangement] shortcode * * @param array $attributes * * @return string */ public static function addArrangementShortcode($attributes) { if (!isset($attributes['id'])) { return __('Error: no ID set', Plugin::TEXT_DOMAIN); } if (!ctype_digit($attributes['id'])) { return __('Error: ID is not a number', Plugin::TEXT_DOMAIN); } if (!isset($attributes['show'])) { return __('Error: "show" option not set', Plugin::TEXT_DOMAIN); } if (!in_array($attributes['show'], self::getValidOptions())) { return __('Error: invalid "show" option', Plugin::TEXT_DOMAIN); } $subdomain = Settings::getSubdomain($attributes); if (!$subdomain) { return Plugin::getNoSubdomainError(); } $json = get_transient('recras_' . $subdomain . '_arrangement_' . $attributes['id']); if ($json === false) { try { $json = Http::get($subdomain, 'arrangementen/' . $attributes['id']); } catch (\Exception $e) { return $e->getMessage(); } set_transient('recras_' . $subdomain . '_arrangement_' . $attributes['id'], $json, 86400); } switch ($attributes['show']) { case 'description': return $json->uitgebreide_beschrijving; case 'duration': return self::getDuration($json); case 'image_url': return $json->image_filename; case 'location': return self::getLocation($json); case 'persons': return '<span class="recras-persons">' . $json->aantal_personen . '</span>'; case 'price_pp_excl_vat': return Price::format($json->prijs_pp_exc); case 'price_pp_incl_vat': return Price::format($json->prijs_pp_inc); case 'price_total_excl_vat': return Price::format($json->prijs_totaal_exc); case 'price_total_incl_vat': return Price::format($json->prijs_totaal_inc); case 'program': case 'programme': $startTime = isset($attributes['starttime']) ? $attributes['starttime'] : '00:00'; $showHeader = !isset($attributes['showheader']) || Settings::parseBoolean($attributes['showheader']); return self::generateProgramme($json->programma, $startTime, $showHeader); case 'title': return '<span class="recras-title">' . $json->arrangement . '</span>'; default: return __('Error: unknown option', Plugin::TEXT_DOMAIN); } }
/** * Add the [recras-booking] shortcode * * @param array $attributes * * @return string */ public static function addBookingShortcode($attributes) { if (isset($attributes['id']) && !ctype_digit($attributes['id'])) { return __('Error: ID is not a number', Plugin::TEXT_DOMAIN); } $subdomain = Settings::getSubdomain($attributes); if (!$subdomain) { return Plugin::getNoSubdomainError(); } $arrangementID = isset($attributes['id']) ? $attributes['id'] : null; return self::generateIframe($subdomain, $arrangementID); }
/** * Add the [recras-product] shortcode * * @param array $attributes * * @return string */ public static function addProductShortcode($attributes) { if (!isset($attributes['id'])) { return __('Error: no ID set', Plugin::TEXT_DOMAIN); } if (!ctype_digit($attributes['id'])) { return __('Error: ID is not a number', Plugin::TEXT_DOMAIN); } if (!isset($attributes['show'])) { return __('Error: "show" option not set', Plugin::TEXT_DOMAIN); } if (!in_array($attributes['show'], self::getValidOptions())) { return __('Error: invalid "show" option', Plugin::TEXT_DOMAIN); } $subdomain = Settings::getSubdomain($attributes); if (!$subdomain) { return Plugin::getNoSubdomainError(); } $products = self::getProducts($subdomain); if (!isset($products[$attributes['id']])) { return __('Error: product does not exist', Plugin::TEXT_DOMAIN); } $product = $products[$attributes['id']]; switch ($attributes['show']) { case 'description': return '<span class="recras-description">' . $product->beschrijving . '</span>'; case 'description_long': if ($product->uitgebreide_omschrijving) { return '<span class="recras-description">' . $product->uitgebreide_omschrijving . '</span>'; } else { return ''; } case 'duration': if ($product->duur) { return '<span class="recras-duration">' . $product->duur . '</span>'; } else { return ''; } case 'image_url': return $product->image_url; case 'minimum_amount': return '<span class="recras-amount">' . $product->minimum_aantal . '</span>'; case 'price_excl_vat': return Price::format($product->prijs_exc); case 'price_incl_vat': return Price::format($product->prijs_inc); case 'title': return '<span class="recras-title">' . $product->weergavenaam . '</span>'; default: return __('Error: unknown option', Plugin::TEXT_DOMAIN); } }
/** * Add the [recras-contact] shortcode * * @param array $attributes * * @return string */ public static function addContactShortcode($attributes) { if (!isset($attributes['id'])) { return __('Error: no ID set', Plugin::TEXT_DOMAIN); } if (!ctype_digit($attributes['id'])) { return __('Error: ID is not a number', Plugin::TEXT_DOMAIN); } $subdomain = Settings::getSubdomain($attributes); if (!$subdomain) { return Plugin::getNoSubdomainError(); } // Get basic info for the form $baseUrl = 'contactformulieren/' . $attributes['id']; $json = get_transient('recras_' . $subdomain . '_contactform_' . $attributes['id']); if ($json === false) { try { $json = Http::get($subdomain, $baseUrl); } catch (\Exception $e) { return $e->getMessage(); } set_transient('recras_' . $subdomain . '_contactform_' . $attributes['id'], $json, 86400); } $formTitle = $json->naam; if (isset($attributes['showtitle']) && !Settings::parseBoolean($attributes['showtitle'])) { $formTitle = false; } $showLabels = !isset($attributes['showlabels']) || Settings::parseBoolean($attributes['showlabels']); $showPlaceholders = !isset($attributes['showplaceholders']) || Settings::parseBoolean($attributes['showplaceholders']); $element = 'dl'; if (isset($attributes['element']) && in_array($attributes['element'], self::getValidElements())) { $element = $attributes['element']; } // Get fields for the form $json = get_transient('recras_' . $subdomain . '_contactform_' . $attributes['id'] . '_fields'); if ($json === false) { try { $json = Http::get($subdomain, $baseUrl . '/velden'); } catch (\Exception $e) { return $e->getMessage(); } set_transient('recras_' . $subdomain . '_contactform_' . $attributes['id'] . '_fields', $json, 86400); } $formFields = $json; $arrangementID = null; if (isset($attributes['arrangement'])) { $arrangementID = (int) $attributes['arrangement']; // Check if the contact form supports setting an arrangement $fieldFound = false; foreach ($formFields as $field) { if ($field->soort_invoer === 'boeking.arrangement') { $fieldFound = true; } } if (!$fieldFound) { return __('Error: arrangement is set, but contact form does not support arrangements', Plugin::TEXT_DOMAIN); } } $submitText = __('Send', Plugin::TEXT_DOMAIN); if (isset($attributes['submittext'])) { $submitText = $attributes['submittext']; } $redirect = isset($attributes['redirect']) ? $attributes['redirect'] : false; $options = ['arrangement' => $arrangementID, 'element' => $element, 'formTitle' => $formTitle, 'placeholders' => $showPlaceholders, 'redirect' => $redirect, 'showLabels' => $showLabels, 'subdomain' => $subdomain, 'submitText' => $submitText]; return self::generateForm($attributes['id'], $formFields, $options); }