provider = 'instagram';
$this->api_base = Wizard::base_apis()['instagram'];
}
public static function get_instance(): Instagram {
if (null === self::$instance) {
self::$instance = new Instagram();
}
return self::$instance;
}
public function get_screen_2(): array {
return [
'header' => esc_html__('Choose Type of Gallery', 'photonic'),
'display' => [
'display_type' => [
'desc' => esc_html__('What do you want to show?', 'photonic'),
'type' => 'select',
'options' => [
'' => '',
'single-photo' => esc_html__('Single Photo', 'photonic'),
'album-photo' => esc_html__('Photos in a Post', 'photonic'),
'multi-photo' => esc_html__('Multiple Photos', 'photonic'),
],
'req' => 1,
],
],
];
}
public function get_screen_3(): array {
return [
'header' => esc_html__('Build your gallery', 'photonic'),
'single-photo' => [
'header' => esc_html__('Pick a photo', 'photonic'),
'desc' => esc_html__('From the list below pick the single photo you wish to display.', 'photonic'),
'display' => [
'container' => [
'type' => 'thumbnail-selector',
'mode' => 'single',
'for' => 'selected_data',
],
],
],
'album-photo' => [
'header' => esc_html__('Pick a post (a.k.a. Carousel)', 'photonic'),
'desc' => esc_html__('From the list below pick the post whose photos you wish to display.', 'photonic'),
'display' => [
'carousel_caption' => [
'desc' => esc_html__('Where do you want to show the caption for the post / carousel?', 'photonic'),
'type' => 'select',
'options' => [
'' => $this->default_from_settings,
'none' => esc_html__('Do not show the caption', 'photonic'),
'above' => esc_html__('Show above the photos', 'photonic'),
'below' => esc_html__('Show below the photos', 'photonic'),
],
'std' => '',
'hint' => sprintf($this->default_under, 'Photonic → Settings → Instagram → Instagram Settings → Caption positioning for carousels / posts'),
],
'container' => [
'type' => 'thumbnail-selector',
'mode' => 'single',
'for' => 'selected_data',
],
],
],
'multi-photo' => [
'header' => esc_html__('All your photos', 'photonic'),
'desc' => esc_html__('You can only show all your photos without filtering. In the following only the latest 25 photos are displayed. You can change this in subsequent screens.', 'photonic'),
'display' => [
'carousel_handling' => [
'desc' => esc_html__('How do you want to show photos in a carousel?', 'photonic'),
'type' => 'select',
'options' => [
'' => '',
'single' => esc_html__('Show first photo', 'photonic'),
'expand' => esc_html__('Show all photos', 'photonic'),
],
'std' => '',
],
'container' => [
'type' => 'thumbnail-selector',
'mode' => 'none',
'for' => 'selected_data',
],
],
],
];
}
public function get_screen_4(): array {
return [];
}
public function get_screen_5(): array {
global $photonic_instagram_media;
return [
'instagram' => [
'media' => [
'desc' => esc_html__('Media to Show', 'photonic'),
'type' => 'select',
'options' => Utilities::media_options(true, $photonic_instagram_media),
'std' => '',
'hint' => sprintf($this->default_under, 'Photonic → Settings → Instagram → Instagram Settings → Media to show'),
],
]
];
}
public function get_square_size_options(): array {
return [];
}
public function get_random_size_options(): array {
return [];
}
public function make_request($display_type, $for, $flattened_fields): array {
require_once PHOTONIC_PATH . '/Platforms/Instagram.php';
$module = \Photonic_Plugin\Platforms\Instagram::get_instance();
$base_url = 'https://' . $this->api_base . '/me/media?fields=' . $module->field_list . '&access_token=' . $module->access_token;
$response = wp_remote_request($base_url, ['sslverify' => PHOTONIC_SSL_VERIFY]);
return [$response, [], $base_url];
}
/**
* Processes a response from Instagram to build it out into a gallery of thumbnails. Instagram only has L1 displays.
*
* @param $response
* @param $display_type
* @param $url
* @param array $pagination
* @return array
*/
public function process_response($response, $display_type, $url = null, &$pagination = []): array {
$objects = [];
$body = json_decode($response['body']);
if (isset($body->data)) {
$data = $body->data;
foreach ($data as $photo) {
if (isset($photo->media_type) && ('image' === strtolower($photo->media_type) || 'carousel_album' === strtolower($photo->media_type) || 'video' === strtolower($photo->media_type))) {
if (('album-photo' === $display_type && 'carousel_album' === strtolower($photo->media_type)) || 'album-photo' !== $display_type) {
$object = [];
$link = $photo->permalink;
$link = explode('/', $link);
if (empty($link[count($link) - 1])) {
$link = $link[count($link) - 2];
}
else {
$link = $link[count($link) - 1];
}
$object['alt_id'] = $link;
$object['id'] = $photo->id;
if (isset($photo->caption)) {
$object['title'] = esc_attr($photo->caption);
}
else {
$object['title'] = '';
}
$object['thumbnail'] = empty($photo->thumbnail_url) ? $photo->media_url : $photo->thumbnail_url;
$objects[] = $object;
}
}
}
if (isset($body->paging) && isset($body->paging->next) && 'single-photo' === $display_type) {
$pagination['url'] = $body->paging->next; // add_query_arg(['max_id' => $body->pagination->next_max_id], remove_query_arg(['max_id'], $url));
}
}
return $objects;
}
/**
* @param $display_type
* @return array
*/
public function construct_shortcode_from_screen_selections($display_type): array {
$short_code = [];
if (check_ajax_referer('photonic-wizard-next-' . get_current_user_id())) {
if ('single-photo' === $display_type) {
$short_code['media_id'] = sanitize_text_field(wp_unslash($_POST['selected_data'] ?? ''));
}
elseif ('album-photo' === $display_type) {
$short_code['carousel'] = sanitize_text_field(wp_unslash($_POST['selected_data'] ?? ''));
}
}
return $short_code;
}
/**
* @param $input
* @return array
*/
public function deconstruct_shortcode_to_screen_selections($input): array {
$deconstructed = [];
if (!empty($input->media_id)) {
$deconstructed['display_type'] = 'single-photo';
$deconstructed['selected_data'] = $input->media_id;
}
elseif (!empty($input->carousel)) {
$deconstructed['display_type'] = 'album-photo';
$deconstructed['selected_data'] = $input->carousel;
}
else {
$deconstructed['display_type'] = 'multi-photo';
}
return $deconstructed;
}
}