function exchange_story_form_populate_storyteller_step_1($form) { /* Retrieve story form ID from options and verify */ $story_form_id = get_option('options_story_update_form'); if ($story_form_id && $form['id'] !== intval($story_form_id)) { return $form; } // Verify programme round token with collaboration id to ensure that we're only returning storytellers to people who came in with a programme_round token. $collaboration_id = get_query_var('update_id', false); $pr_reference = get_query_var('pr_ref', false); if (!$collaboration_id || !$pr_reference) { return $form; } $collaboration_obj = BaseController::exchange_factory($collaboration_id); if (!$collaboration_obj instanceof Collaboration) { return $form; } $programme_round_obj = $collaboration_obj->programme_round; if (!$programme_round_obj) { return $form; } $pr_token_from_cid = $programme_round_obj->controller->get_programme_round_token(); if (empty($collaboration_obj->participants || $pr_token_from_cid !== $pr_reference)) { return $form; } foreach ($form['fields'] as $field) { $class = $field->cssClass; switch ($class) { case 'storyteller-select-step-1': $choices = array(array('text' => 'Form submitted via programme round token', 'value' => 'Form submitted via programme round token', 'isSelected' => true)); $field['choices'] = $choices; break; case 'storyteller-select-step-2': $choices = array(array('text' => 'Select your name below', 'value' => 0, 'isSelected' => true)); foreach ($collaboration_obj->participants as $participant) { $choices[] = array('text' => $participant->name, 'value' => $participant->post_id, 'isSelected' => false); } $field['choices'] = $choices; break; default: break; } } return $form; }
/** * Create link (or simply an opening tag) * * @param $object mixed Exchange object, term or ID * @param bool @with_text Optional. Add object title as link text, or simply open tag. * @return string Anchor tag with appropriate attributes and / or title. */ function exchange_create_link($obj, $with_text = true, $class = '') { // Turn post_id into object if (is_numeric($obj) && exchange_post_exists($obj)) { $obj = BaseController::exchange_factory($obj); } if ($obj instanceof Exchange) { $url = $obj->link; $title = $obj->title; $label = $obj->title; $cat = 'story'; } elseif ($obj instanceof WP_Term) { $url = get_term_link($obj); $title = $obj->name; $label = $obj->name; } $button_classes = array('griditem__button button--small'); if (in_array($class, $button_classes, true)) { if (empty($obj->category)) { $label = strtoupper(__('Read more', 'exchange')); } else { $cat = $obj->category->slug; $labels = $GLOBALS['EXCHANGE_PLUGIN_CONFIG']['CATEGORIES']['button_labels']; if (array_key_exists($cat, $labels)) { $label = strtoupper(sprintf($labels[$cat], $cat)); } else { $label = strtoupper(sprintf($labels['default'], $cat)); } $class .= ' button--' . $cat; } } if (!empty($url) && !empty($title)) { $output = '<a class="' . $class . '" href="' . $url . '" title="' . sprintf(esc_html__('Navigate to %s', EXCHANGE_PLUGIN), esc_attr($title)) . '">'; if ($with_text) { $output .= $label . '</a>'; } return $output; } else { return false; } }
function exchange_token_form_callback() { $results = ''; if (empty(check_ajax_referer('exchange-token-form-nonce', 'security', false))) { echo '<div class="loader-pointer section__helper">' . __('Whoa... where did YOU come from?', EXCHANGE_PLUGIN) . '</div>'; wp_die(); } if (!empty($_POST['prid']) && !empty($_POST['update_id']) && !empty($_POST['token'])) { $pr_obj = BaseController::exchange_factory($_POST['prid'], 'token-form'); $pr_token = $_POST['token']; $c_obj = BaseController::exchange_factory($_POST['update_id'], 'token-form'); $story_page = get_option('options_story_update_form_page'); $s_obj = get_post($story_page); if (!$pr_obj instanceof Programme_Round) { echo '<div class="loader-pointer section__helper">' . __('We could not find the right data. Are you sure you have the right link?') . '</div>'; wp_die(); } // Create array for griditems. $simplegrid = new SimpleGrid(); if ($s_obj instanceof WP_Post) { $simplegrid->add_grid_item($pr_obj->create_token_form_cta($s_obj, $pr_token, $c_obj)); } if ($c_obj instanceof Collaboration) { $simplegrid->add_grid_item($pr_obj->create_token_form_cta($c_obj, $pr_token)); } if (!empty($c_obj->participants)) { foreach ($c_obj->participants as $p) { $simplegrid->add_grid_item($pr_obj->create_token_form_cta($p, $pr_token)); } } // echo '<pre>' . print_r( $simplegrid, true ) . '</pre>'; // wp_die(); echo $simplegrid->embed(); wp_die(); } else { echo '<div class="loader-pointer section__helper">' . __('We did not receive the request correctly. Make sure you\'ve selected your collaboration and try again!') . '</div>'; wp_die(); } }
function exchange_add_update_form_link($post_id, $post_obj) { $type = $post_obj->post_type; if (!in_array($type, $GLOBALS['EXCHANGE_PLUGIN_CONFIG']['POST_TYPES']['available-for-form-updates'])) { return; } $update = false; // Gather token / form info for token verification. $form_id = get_option('options_' . $type . '_update_form'); $form_link = get_field($type . '_update_form_link', $post_id); $field = $GLOBALS['EXCHANGE_PLUGIN_CONFIG']['ACF']['fields'][$type . '-update-link']; if ('participant' === $type) { $coll = CollaborationController::get_collaboration_by_participant_id($post_id); } elseif ('collaboration' === $type) { $coll = BaseController::exchange_factory($post_id); } if (!$coll instanceof Collaboration) { return; } if ($coll->programme_round instanceof Programme_Round) { $pr_token = $coll->programme_round->controller->get_programme_round_token(); } if (!isset($pr_token)) { return; } // See if anything needs to be changed. $form_token = sha1($pr_token . $form_id . $post_id); if (!empty($form_link)) { $parts = parse_url($form_link); parse_str($parts['query'], $query); if ($query['update_token'] !== $form_token || $query['update_id'] !== $post_id) { $update = true; } else { return; } } // Update or save the link to the post. $update_page_id = get_option('options_' . $type . '_update_form_page'); $update_page_url = get_permalink($update_page_id); $link = $update_page_url . '?update_token=' . $form_token . '&update_id=' . $post_id; if ($update) { update_post_meta($post_id, $type . '_update_form_link', $link); } else { update_field($field, $link, $post_id); } }
/** * Return story object with properties taken from ACF Fields. * * @since 0.1.0 * @access public * @return void; **/ public function map_full_story() { // Retrieve post_id variable from basic mapping. $post_id = $this->container->post_id; // Set language global to language category if (isset($this->container->language)) { $GLOBALS['story_language'] = $this->container->language->name; } // // Throw Exception when the input is not a valid story post type object. // if ( ! ( $post_id >= 1 ) ) { // unset( $this->container ); // throw new Exception( 'This is not a valid post' ); // } // Get related $curation = get_post_meta($post_id, 'related_content_auto_select', true); if (!$curation) { $related_content = $this->get_related_grid_content_by_tags(); } else { $related_content = get_post_meta($post_id, 'related_content', true); } if (is_array($related_content) && count($related_content) > 0) { $this->set_related_grid_content($related_content); } //Set sections. if (function_exists('get_field')) { $acf_sections = get_field('sections', $post_id); if (!empty($acf_sections)) { $this->set_sections($acf_sections); } } // $acf_section_count = get_post_meta( $post_id, 'sections', true ); // var_dump( $acf_section_count ); // if ( ! empty( $acf_section_count ) ) { // $post_custom = get_post_custom( $post_id ); // var_dump( $post_custom ); // } // for ( $i = 0; $i < $acf_section_count; $i++ ) { // $acf_section_contents = get_post_meta( $post_id, 'sections_' . $i . '_contents', true ); // var_dump( $acf_section_contents ); // if ( empty( $acf_section_contents ) || ! is_array( $acf_section_contents ) ) { // continue; // } // $contents_length = count( $acf_section_contents ); // for( $j = 0; $j < $contents_length; $j++ ) { // switch( $acf_section_contents[ $j ] ) { // case 'has_story_elements' : // $meta_name = 'sections_' . $i . '_contents_' . $j . '_story_elements'; // $acf_story_elements = get_post_meta( $post_id, $meta_name, true ); // var_dump( $meta_name ); // var_dump( $acf_story_elements ); // break; // default : // var_dump( $acf_sections_items[ $j ] ); // break; // } // } // } // throw new Exception("Testing {1:What are we testing?}"); // Set header image. $this->set_header_image('story__header'); // Set participant as storyteller $acf_storyteller = get_post_meta($post_id, 'storyteller', true); if (is_numeric($acf_storyteller)) { $storyteller = BaseController::exchange_factory($acf_storyteller); if ($storyteller instanceof Participant) { $this->container->storyteller = $storyteller; } } if (!empty($this->container->storyteller)) { $this->set_byline(); } else { $this->set_custom_byline(); } $this->set_gallery(); }
<h4 class="share-cta-header share-cta-story"><?php _e('Do you have a Tandem story you would like to share?', 'exchange'); ?> </h4> <div class="button-wrapper"> <?php $story_form_page = get_option('options_story_update_form_page'); if (!empty($story_form_page)) { $exchange_form = BaseController::exchange_factory($story_form_page); if ($exchange_form instanceof Exchange) { echo exchange_create_link($exchange_form, false, 'button--large button--share-cta') . __('Share your story', 'exchange') . '</a>'; } } ?> </div><!-- button-wrapper -->
/** * Process an update token to return a gravity form * * @param int $form_id Gravity Forms ID to check against * @return return $form_id * * @TODO add available post types to globals */ private function process_token($form_id) { parse_str($_SERVER['QUERY_STRING']); $form_id_arr = $this->update_form_ids(); if (empty($form_id)) { return; } if (!in_array(strval($form_id), $form_id_arr, true)) { return; } if (isset($update_id) && isset($update_token) && is_numeric($update_id) && in_array(get_post_type($update_id), $GLOBALS['EXCHANGE_PLUGIN_CONFIG']['POST_TYPES']['available-for-form-updates'], true)) { $exchange = BaseController::exchange_factory($update_id); } if (!$exchange instanceof Exchange) { return; } switch ($exchange->type) { case 'collaboration': $programme_round_obj = $exchange->programme_round; break; case 'participant': $exchange->controller->set_collaboration(); if (is_object($exchange->collaboration)) { $programme_round_obj = $exchange->collaboration->programme_round; } break; default: return; } if (!$programme_round_obj instanceof Programme_Round) { return; } else { $pr_update_token = $programme_round_obj->controller->get_programme_round_token(); } if ($pr_update_token) { $verifications = array(); foreach ($form_id_arr as $id) { /* The update tokens are generated by hashing the programme round token with the form id and post id */ $verifications[] = sha1($pr_update_token . $id . $update_id); } if (in_array($update_token, $verifications)) { $update_string = ' update="' . $update_id . '" '; return $update_string; } } }
<?php get_header(); ?> <main id="main" class="archive__wrapper" role="main"> <div class="main-inner"> <?php $args = array('name' => 'stories', 'post_type' => 'page', 'post_status' => 'private', 'numberposts' => 1); $get_stories_page = get_posts($args); if ($get_stories_page) { $exchange = BaseController::exchange_factory($get_stories_page[0]); include_once get_stylesheet_directory() . '/parts/content-page-header.php'; include_once get_stylesheet_directory() . '/parts/loop-featured-stories.php'; ?> <?php } else { ?> <?php get_template_part('parts/content', 'archive-header'); ?> <?php } ?> <?php
/** * Create grid item from ACF Layout * * Creates grid item with post_item data, add modifiers when necessary. * * @param integer $item Post object to be represented by grid item. */ protected function create_grid_item_from_layout($item) { if (!isset($item['acf_fc_layout'])) { return; } $item_mods = array(); $layout = $item['acf_fc_layout']; switch ($layout) { case 'grid_exchange_story': case 'grid_exchange_collaboration': case 'grid_exchange_programme_round': if (!is_numeric($item['grid_exchange_object'])) { if (is_array($item['grid_exchange_object']) && is_int($item['grid_exchange_object'][0])) { $object_id = $item['grid_exchange_object'][0]; } else { return; } } else { $object_id = intval($item['grid_exchange_object']); } if (empty($object_id)) { return; } $object = BaseController::exchange_factory($object_id, 'griditem'); $item_mods = self::add_grid_modifiers($object); break; case 'grid_paragraph': if ('grid_paragraph' === $layout && empty($item['text'])) { return; } case 'grid_pull_quote': if ('grid_pull_quote' === $layout && empty($item['pquote_text'])) { return; } case 'grid_image': if ('grid_image' === $layout && empty($item['image'])) { return; } $pattern_type = str_replace('grid_', '', $layout); $object = BasePattern::pattern_factory($item, $pattern_type, 'griditem', true); $item_mods['type'] = 'pattern'; $item_mods['pattern_type'] = $pattern_type; break; default: return; } if (!empty($item['grid_width'])) { $item_mods['grid_width'] = $item['grid_width']; $num = $this->get_grid_width_num($item['grid_width']); if (isset($num) & is_int($num)) { $item_mods['grid_width_num'] = $num; } } $grid_item = new GridItem($object, $this->element, $item_mods); return $grid_item; }
get_header(); ?> <main id="main" class="archive__wrapper " role="main"> <div class="main-inner"> <?php $args = array('name' => 'collaborations', 'post_type' => 'page', 'post_status' => 'private', 'numberposts' => 1); $get_collaborations_page = get_posts($args); if ($get_collaborations_page) { ?> <?php $exchange = BaseController::exchange_factory($get_collaborations_page[0]); include_once get_stylesheet_directory() . '/parts/content-page-header.php'; ?> <?php } else { ?> <?php get_template_part('parts/content', 'archive-header'); ?> <?php } ?>
if (empty($pr)) { ?> <div class="callout"><?php _e('There seems to be a problem with your token. Please get in touch with the Tandem Team', EXCHANGE_PLUGIN); ?> </div> </div> <?php } else { ?> <?php $exchange_pr_obj = BaseController::exchange_factory($pr); if (!$exchange_pr_obj instanceof Programme_Round) { ?> <div class="callout"><?php _e('There seems to be a problem with your token. Please get in touch with the Tandem Team.', EXCHANGE_PLUGIN); ?> </div> </div> <?php } else { ?> <p><?php
function exchange_location_tags_by_participants() { $result = array(); $collab_args = array('post_type' => 'collaboration', 'posts_per_page' => -1, 'post_status' => 'draft'); $query = new WP_Query($collab_args); $collabs = $query->posts; if (!empty($collabs)) { foreach ($collabs as $collab) { $cid = get_field('collaboration_id', $collab->ID); $locations = array(); $arr = array(); $exchange = BaseController::exchange_factory($collab); foreach ($exchange->participants as $p) { if (!empty($p->org_city)) { $locations[] = $p->org_city; var_dump($p->org_city); } } if (!empty($locations)) { $arr['location'] = $locations; add_term_to_cid($cid, $arr); } } } }
<section class="story__section"> <div class="section-inner"> <figure class="section__slice section__image"> <div id="programmes"> <?php $img_root = get_template_directory() . '/assets/images/'; global $post; $all_pages = BaseController::get_all_from_type('page'); $programmes = get_page_children($post->ID, $all_pages); foreach ($programmes as $page_obj) { $anchor = '<a href="#">'; if (!$page_obj instanceof WP_Post || 'publish' !== $page_obj->post_status) { continue; } else { $anchor = exchange_create_link(BaseController::exchange_factory($page_obj), false); $slug = array_search($page_obj->post_title, $GLOBALS['EXCHANGE_PLUGIN_CONFIG']['IMAGES']['programme-logos']); if (!empty($slug)) { echo $anchor . exchange_build_svg($img_root . 'svg/T_logo_' . $slug . '_WEB.svg', true) . '</a>'; } } } ?> </div> <?php if (class_exists('Caption')) { $caption_text = '<p>Building it together. Illustration copyright © Erica Brisson, 2014-15</p>'; $modifiers = array('classes' => array('text-right')); $caption = new Caption($caption_text, 'image'); $caption->publish(); } ?>
<div class="featured-stories featured-stories<?php echo esc_attr($three_plus); ?> "> <section class="section--has-grid section--featured-grid"> <div class="section-inner"> <div class="row" data-equalizer> <?php $length = count($featured_stories); for ($i = 0; $i < $length; $i++) { $griditem = BaseController::exchange_factory($featured_stories[$i], 'griditem'); if (0 === $i && 2 !== $length) { $modifiers = array('grid_width' => 'grid_full', 'grid_width_num' => 12); } else { if (3 === $length) { $modifiers = array('grid_width' => 'grid_half', 'grid_width_num' => 6); } elseif (4 === $length) { $modifiers = array('grid_width' => 'grid_third', 'grid_width_num' => 4); } elseif (2 === $length) { $modifiers = array('grid_width' => 'grid_half', 'grid_width_num' => 6); } } if (1 === $i && 2 < $length) { echo '</div><!-- end row --><div class="row" data-equalizer>'; } Exchange::publish_grid_featured($griditem, 'featuredgrid', $modifiers);
/** * Prepare map marker. * @param array $marker_location Array with lat and long * @return string array $marker_label Array with title and possibly page ID as link. */ protected function prepare_map_marker($marker_location, $marker_label) { $marker = array('message' => $marker_label['title'], 'lat' => $marker_location['lat'], 'lng' => $marker_location['lng']); if (!empty($marker_label['linked_object'])) { // Create link from object $object = BaseController::exchange_factory($marker_label['linked_object']); $link = exchange_create_link($object, false); } if (isset($link)) { $marker['message'] = $link . $marker_label['title'] . '</a>'; } return $marker; }