Ejemplo n.º 1
0
/**
 * @param      $action
 * @param      $data
 * @param bool $filter
 *
 * @return array
 */
function gmedia_ios_app_processor($action, $data, $filter = true)
{
    global $gmCore, $gmDB, $gmGallery, $user_ID, $gmapp_version;
    $out = array();
    if (version_compare('3', $gmapp_version, '<=')) {
        $logic = 2;
        if (version_compare('3.1', $gmapp_version, '<')) {
            $logic = 3;
        }
    } else {
        $logic = 1;
    }
    $error = array();
    $error_info = array();
    $alert = array();
    $alert_info = array();
    $data = (array) $data;
    switch ($action) {
        case 'do_library':
            if (!isset($data['action'])) {
                return $out;
            }
            $filter = array();
            switch ($data['action']) {
                case 'add_media':
                    if (!current_user_can('gmedia_upload')) {
                        $out['error'] = array('code' => 'nocapability', 'title' => __("You can't do this", 'grand-media'), 'message' => __('You have no permission to do this operation', 'grand-media'));
                        return $out;
                    }
                    usleep(10);
                    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
                        $file_name = $_FILES['userfile']['name'];
                        $file_tmp = $_FILES['userfile']['tmp_name'];
                    } else {
                        $error[] = __("Failed to move uploaded file.", 'grand-media');
                        break;
                    }
                    $fileinfo = $gmCore->fileinfo($file_name);
                    if (false === $fileinfo) {
                        break;
                    }
                    $gmedia = (array) $data['item'];
                    if (!current_user_can('gmedia_terms')) {
                        unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
                    } else {
                        if (empty($gmedia['albums'])) {
                            $gmedia['terms']['gmedia_album'] = '';
                        } else {
                            $alb = isset($gmedia['albums'][0]->term_id) ? $gmedia['albums'][0]->term_id : $gmedia['albums'][0]->name;
                            $gmedia['terms']['gmedia_album'] = $alb;
                        }
                        if (empty($gmedia['categories'])) {
                            $gmedia['terms']['gmedia_category'] = '';
                        } else {
                            $categories = array();
                            foreach ($gmedia['categories'] as $category) {
                                $categories[] = isset($category->term_id) ? $category->term_id : $category->name;
                            }
                            $gmedia['terms']['gmedia_category'] = implode(',', $categories);
                        }
                        if (empty($gmedia['tags'])) {
                            $gmedia['terms']['gmedia_tag'] = '';
                        } else {
                            $tags = array();
                            foreach ($gmedia['tags'] as $tag) {
                                $tags[] = isset($tag->term_id) ? $tag->term_id : $tag->name;
                            }
                            $gmedia['terms']['gmedia_tag'] = implode(',', $tags);
                        }
                        unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
                    }
                    if (isset($gmedia['status']) && 'public' == $gmedia['status']) {
                        $gmedia['status'] = 'publish';
                    }
                    $return = $gmCore->gmedia_upload_handler($file_tmp, $fileinfo, 'multipart', $gmedia);
                    if (isset($return['error'])) {
                        $error[] = $return['error']['message'];
                    } else {
                        $alert[] = $return['success']['message'];
                    }
                    break;
                case 'update_media':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    $gmedia = (array) $data['item'];
                    if (!empty($gmedia['ID'])) {
                        $item = $gmDB->get_gmedia($gmedia['ID']);
                        if (!$item || $user_ID != $item->author && !current_user_can('gmedia_edit_others_media')) {
                            $error[] = __('You are not allowed to edit others media', 'grand-media');
                            break;
                        }
                        unset($gmedia['date'], $gmedia['mime_type'], $gmedia['gmuid'], $gmedia['modified']);
                        //$gmedia['modified']  = current_time('mysql');
                        if (!current_user_can('gmedia_delete_others_media')) {
                            $gmedia['author'] = $item->author;
                        }
                        if (isset($gmedia['status']) && 'public' == $gmedia['status']) {
                            $gmedia['status'] = 'publish';
                        }
                        if (!current_user_can('gmedia_terms')) {
                            unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
                        } else {
                            if (empty($gmedia['albums'])) {
                                $gmedia['terms']['gmedia_album'] = '';
                            } else {
                                if (isset($gmedia['albums'][0]->term_id)) {
                                    $gmedia['terms']['gmedia_album'] = $gmedia['albums'][0]->term_id;
                                } elseif (current_user_can('gmedia_album_manage')) {
                                    $gmedia['terms']['gmedia_album'] = $gmedia['albums'][0]->name;
                                }
                            }
                            if (empty($gmedia['categories'])) {
                                $gmedia['terms']['gmedia_category'] = '';
                            } else {
                                $categories = array();
                                foreach ($gmedia['categories'] as $category) {
                                    if (isset($category->term_id)) {
                                        $categories[] = $category->term_id;
                                    } elseif (current_user_can('gmedia_category_manage')) {
                                        $categories[] = $category->name;
                                    }
                                }
                                $gmedia['terms']['gmedia_category'] = $categories;
                            }
                            if (empty($gmedia['tags'])) {
                                $gmedia['terms']['gmedia_tag'] = '';
                            } else {
                                $tags = array();
                                foreach ($gmedia['tags'] as $tag) {
                                    if (isset($tag->term_id)) {
                                        $tags[] = $tag->term_id;
                                    } elseif (current_user_can('gmedia_tag_manage')) {
                                        $tags[] = $tag->name;
                                    }
                                }
                                $gmedia['terms']['gmedia_tag'] = $tags;
                            }
                            unset($gmedia['categories'], $gmedia['albums'], $gmedia['tags']);
                        }
                        $gmDB->insert_gmedia($gmedia);
                    }
                    break;
                case 'assign_album':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    if (!current_user_can('gmedia_terms')) {
                        $error[] = __('You are not allowed to manage albums', 'grand-media');
                    }
                    $term = $data['assign_album'][0];
                    $count = count($data['selected']);
                    if ('0' == $term) {
                        foreach ($data['selected'] as $item) {
                            $gmDB->delete_gmedia_term_relationships($item, 'gmedia_album');
                        }
                        $alert[] = sprintf(__('%d item(s) updated with "No Album"', 'grand-media'), $count);
                    } else {
                        foreach ($data['selected'] as $item) {
                            $gm_item = $gmDB->get_gmedia($item);
                            if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                                continue;
                            }
                            $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_album', $append = 0);
                            if (is_wp_error($result)) {
                                $error[] = $result->get_error_message();
                                $count--;
                            } elseif (!$result) {
                                $count--;
                            }
                        }
                        if ($gmCore->is_digit($term)) {
                            $alb_name = $gmDB->get_term_name($term);
                        } else {
                            $alb_name = $term;
                        }
                        $alert[] = sprintf(__('Album `%s` assigned to %d item(s)', 'grand-media'), esc_html($alb_name), $count);
                    }
                    break;
                case 'assign_category':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    if (!current_user_can('gmedia_terms')) {
                        $error[] = __('You are not allowed to manage categories', 'grand-media');
                        break;
                    }
                    if (empty($data['assign_category'])) {
                        $error[] = __('No categories provided', 'grand-media');
                        break;
                    }
                    $terms = $data['assign_category'];
                    $count = count($data['selected']);
                    if (1 === count($terms) && '0' == $terms[0]) {
                        foreach ($data['selected'] as $item) {
                            $gm_item = $gmDB->get_gmedia($item);
                            if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                                continue;
                            }
                            $gmDB->delete_gmedia_term_relationships($item, 'gmedia_category');
                        }
                        $alert[] = sprintf(__('%d item(s) updated with "Uncategorized"', 'grand-media'), $count);
                    } else {
                        foreach ($data['selected'] as $item) {
                            $gm_item = $gmDB->get_gmedia($item);
                            if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                                continue;
                            }
                            $result = $gmDB->set_gmedia_terms($item, $terms, 'gmedia_category', $append = 0);
                            if (is_wp_error($result)) {
                                $error[] = $result->get_error_message();
                                $count--;
                            } elseif (!$result) {
                                $count--;
                            }
                        }
                        $alert[] = sprintf(__('%d category(ies) added to %d item(s)', 'grand-media'), count($terms), $count);
                    }
                    break;
                case 'unassign_category':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    if (empty($data['unassign_category'])) {
                        $error[] = __('No categories provided', 'grand-media');
                        break;
                    }
                    $terms = array_map('intval', $data['unassign_category']);
                    $count = count($data['selected']);
                    foreach ($data['selected'] as $item) {
                        $gm_item = $gmDB->get_gmedia($item);
                        if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                            continue;
                        }
                        $result = $gmDB->set_gmedia_terms($item, $terms, 'gmedia_category', $append = -1);
                        if (is_wp_error($result)) {
                            $error[] = $result->get_error_message();
                            $count--;
                        } elseif (!$result) {
                            $count--;
                        }
                    }
                    $alert[] = sprintf(__('%d category(ies) deleted from %d item(s)', 'grand-media'), count($terms), $count);
                    break;
                case 'add_tags':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    if (!current_user_can('gmedia_terms')) {
                        $error[] = __('You are not allowed manage tags', 'grand-media');
                        break;
                    }
                    if (empty($data['add_tags'])) {
                        $error[] = __('No tags provided', 'grand-media');
                        break;
                    }
                    $terms = $data['add_tags'];
                    $count = count($data['selected']);
                    foreach ($data['selected'] as $item) {
                        $gm_item = $gmDB->get_gmedia($item);
                        if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                            continue;
                        }
                        $result = $gmDB->set_gmedia_terms($item, $terms, 'gmedia_tag', $append = 1);
                        if (is_wp_error($result)) {
                            $error[] = $result->get_error_message();
                            $count--;
                        } elseif (!$result) {
                            $count--;
                        }
                    }
                    $alert[] = sprintf(__('%d tag(s) added to %d item(s)', 'grand-media'), count($terms), $count);
                    break;
                case 'add_cover':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    $cover = (int) $data['add_cover'];
                    $count = count($data['selected']);
                    foreach ($data['selected'] as $item) {
                        $gm_item = $gmDB->get_gmedia($item);
                        if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                            $count--;
                            continue;
                        }
                        if ('image' == substr($gm_item->mime_type, 0, 5)) {
                            $count--;
                            continue;
                        }
                        if ($cover) {
                            $gmDB->update_metadata('gmedia', $gm_item->ID, '_cover', $cover);
                        } else {
                            $gmDB->delete_metadata('gmedia', $gm_item->ID, '_cover');
                        }
                    }
                    $alert[] = sprintf(__('%d item(s) updated', 'grand-media'), $count);
                    break;
                case 'delete_tags':
                    if (!current_user_can('gmedia_edit_media')) {
                        $error[] = __('You are not allowed to edit media', 'grand-media');
                        break;
                    }
                    if (empty($data['delete_tags'])) {
                        $error[] = __('No tags provided', 'grand-media');
                        break;
                    }
                    $terms = array_map('intval', $data['delete_tags']);
                    $count = count($data['selected']);
                    foreach ($data['selected'] as $item) {
                        $gm_item = $gmDB->get_gmedia($item);
                        if (!$gm_item || $user_ID != $gm_item->author && !current_user_can('gmedia_edit_others_media')) {
                            continue;
                        }
                        $result = $gmDB->set_gmedia_terms($item, $terms, 'gmedia_tag', $append = -1);
                        if (is_wp_error($result)) {
                            $error[] = $result->get_error_message();
                            $count--;
                        } elseif (!$result) {
                            $count--;
                        }
                    }
                    $alert[] = sprintf(__('%d tag(s) deleted from %d item(s)', 'grand-media'), count($terms), $count);
                    break;
                case 'delete':
                    if (!current_user_can('gmedia_delete_media')) {
                        $error[] = __('You are not allowed to delete this post.');
                        break;
                    }
                    $count = count($data['selected']);
                    foreach ($data['selected'] as $item) {
                        $gm_item = $gmDB->get_gmedia($item);
                        if ((int) $gm_item->author != $user_ID && !current_user_can('gmedia_delete_others_media')) {
                            $error[] = "#{$item}: " . __('You are not allowed to delete media others media', 'grand-media');
                            continue;
                        }
                        if (!$gmDB->delete_gmedia((int) $item)) {
                            $error[] = "#{$item}: " . __('Error in deleting...', 'grand-media');
                            $count--;
                        }
                    }
                    if ($count) {
                        $alert[] = sprintf(__('%d items deleted successfuly', 'grand-media'), $count);
                    }
                    break;
            }
            if (1 === $logic) {
                $filter = gmedia_ios_app_library_data(array('filter', 'gmedia_category', 'gmedia_album', 'gmedia_tag'));
            }
            $out = array_merge($out, $filter);
            break;
        case 'library':
            $ep = $gmGallery->options['endpoint'];
            if (get_option('permalink_structure')) {
                $share_link_base = home_url(urlencode($ep) . '/$2/$1');
            } else {
                $share_link_base = add_query_arg(array("{$ep}" => '$1', 't' => '$2'), home_url('index.php'));
            }
            $filter = $filter ? gmedia_ios_app_library_data(array('filter')) : array();
            $mime_type = $logic > 2 ? array('image', 'audio') : 'image';
            $args = array('mime_type' => $mime_type, 'orderby' => 'ID', 'order' => 'DESC', 'per_page' => 100, 'page' => 1, 'tag__in' => null, 'category__in' => null, 'album__in' => null, 'gmedia__in' => null, 'author' => 0, 'status' => null);
            $terms_ids_query = array();
            if (!empty($data['tag__in'])) {
                if (empty($data['category__in']) && empty($data['album__in'])) {
                    $args['orderby'] = $gmGallery->options['in_tag_orderby'];
                    $args['order'] = $gmGallery->options['in_tag_order'];
                }
                $terms_ids_query = array_merge($terms_ids_query, $data['tag__in']);
            }
            if (!empty($data['category__in'])) {
                $cat_ids = wp_parse_id_list($data['category__in']);
                if (1 === count($cat_ids)) {
                    $cat_meta = $gmDB->get_metadata('gmedia_term', $cat_ids[0]);
                    $args['orderby'] = !empty($cat_meta['_orderby'][0]) ? $cat_meta['_orderby'][0] : $gmGallery->options['in_category_orderby'];
                    $args['order'] = !empty($cat_meta['_order'][0]) ? $cat_meta['_order'][0] : $gmGallery->options['in_category_order'];
                }
                $terms_ids_query = array_merge($terms_ids_query, $cat_ids);
            }
            if (!empty($data['album__in'])) {
                $alb_ids = wp_parse_id_list($data['album__in']);
                if (1 === count($alb_ids)) {
                    $album_meta = $gmDB->get_metadata('gmedia_term', $alb_ids[0]);
                    $args['orderby'] = !empty($album_meta['_orderby'][0]) ? $album_meta['_orderby'][0] : $gmGallery->options['in_album_orderby'];
                    $args['order'] = !empty($album_meta['_order'][0]) ? $album_meta['_order'][0] : $gmGallery->options['in_album_order'];
                }
                $terms_ids_query = array_merge($terms_ids_query, $alb_ids);
            }
            $data = wp_parse_args($data, $args);
            $false_out = array_merge($filter, array('properties' => array('request' => isset($data['request']) ? $data['request'] : null), 'data' => array()));
            $terms_ids = array();
            if (!empty($terms_ids_query)) {
                $terms_ids = $gmDB->get_terms(array('gmedia_album', 'gmedia_category', 'gmedia_tag'), array('include' => $terms_ids_query));
                if (!empty($terms_ids) && !is_wp_error($terms_ids)) {
                    foreach ($terms_ids as $i => $term) {
                        gmedia_ios_app_term_data_extend($terms_ids[$i], $share_link_base);
                    }
                    $terms_ids = array_filter($terms_ids);
                    if (empty($terms_ids)) {
                        $out = $false_out;
                        break;
                    }
                } else {
                    $terms_ids = array();
                }
            }
            $req_terms = array();
            if (!empty($terms_ids)) {
                foreach ($terms_ids as $term) {
                    $taxterm = str_replace('gmedia_', '', $term->taxonomy);
                    $req_terms["{$taxterm}__in"]["{$term->term_id}"] = $term;
                }
            }
            $is_admin = isset($data['admin']) ? intval($data['admin']) : 0;
            if (!is_user_logged_in()) {
                $logged_in = false;
                $data['status'] = array('publish');
                if (!empty($req_terms['album__in'])) {
                    $break = false;
                    foreach ($req_terms['album__in'] as $alb) {
                        if (!(isset($alb->status) && 'publish' == $alb->status)) {
                            $break = true;
                        }
                    }
                    if ($break) {
                        $out = $false_out;
                        break;
                    }
                }
            } else {
                $logged_in = true;
                if ($is_admin && !current_user_can('gmedia_library')) {
                    $out = $false_out;
                    break;
                }
                if ($is_admin && !current_user_can('gmedia_show_others_media')) {
                    $data['author'] = $user_ID;
                }
            }
            $_data = $data;
            $_data['per_page'] = -1;
            $_data['status'] = null;
            $_data['fields'] = 'ids';
            $all_gmedias_ids = $gmDB->get_gmedias($_data);
            $gmedias = $gmDB->get_gmedias($data);
            $properties = array_merge($req_terms, array('request' => isset($data['request']) ? $data['request'] : null, 'total_pages' => $gmDB->pages, 'current_page' => $gmDB->openPage, 'items_count' => $gmDB->resultPerPage, 'total_count' => $gmDB->totalResult, 'count' => count($all_gmedias_ids)));
            foreach ($gmedias as $i => $item) {
                //if((!$logged_in && 'publish' != $item->status) || (!$is_admin && ('draft' == $item->status) && ((int)$user_ID != (int)$item->author))) {
                if ((!$is_admin || $is_admin && !current_user_can('gmedia_edit_others_media')) && ('draft' == $item->status && (int) $user_ID != (int) $item->author)) {
                    unset($gmedias[$i]);
                    $properties['total_count']--;
                    $properties['items_count']--;
                    continue;
                }
                $author_id = $item->author;
                $authordata = get_userdata($author_id);
                if ($authordata) {
                    $display_name = $authordata->display_name;
                    $first_name = $authordata->first_name;
                    $last_name = $authordata->last_name;
                } else {
                    $display_name = __('Deleted User', 'grand-media');
                    $first_name = '';
                    $last_name = '';
                }
                $gmedias[$i]->user = array('id' => $author_id, 'displayname' => $display_name, 'firstname' => $first_name, 'last_name' => $last_name);
                $gmedias[$i]->date = strtotime($item->date);
                $meta = $gmDB->get_metadata('gmedia', $item->ID);
                //$_metadata        = maybe_unserialize( $meta['_metadata'][0] );
                $_metadata = $meta['_metadata'][0];
                unset($meta['_metadata']);
                $type = explode('/', $item->mime_type);
                $item_url = $gmCore->upload['url'] . '/' . $gmGallery->options['folder'][$type[0]] . '/' . $item->gmuid;
                $gmedias[$i]->url = $item_url;
                $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_tag');
                $tags = array();
                if ($terms) {
                    $terms = array_values((array) $terms);
                    foreach ($terms as $term) {
                        $tags[] = array('term_id' => $term->term_id, 'name' => $term->name);
                    }
                }
                $gmedias[$i]->tags = $tags;
                $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_album');
                $albums = array();
                if ($terms) {
                    $terms = array_values((array) $terms);
                    foreach ($terms as $term) {
                        $albums[] = array('term_id' => $term->term_id, 'name' => $term->name, 'status' => 1 === $logic && 'publish' == $term->status ? 'public' : $term->status);
                    }
                }
                $gmedias[$i]->albums = $albums;
                if ('image' == $type[0]) {
                    $terms = $gmDB->get_the_gmedia_terms($item->ID, 'gmedia_category');
                    $categories = array();
                    if ($terms) {
                        $terms = array_values((array) $terms);
                        foreach ($terms as $term) {
                            $categories[] = array('term_id' => $term->term_id, 'name' => $term->term_id, 'title' => $term->name);
                        }
                    }
                    $gmedias[$i]->categories = $categories;
                    $gmedias[$i]->meta = array('thumb' => $_metadata['thumb'], 'web' => $_metadata['web'], 'original' => $_metadata['original']);
                    $gmedias[$i]->meta['thumb']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_thumb']}/{$item->gmuid}";
                    $gmedias[$i]->meta['web']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image']}/{$item->gmuid}";
                    if (is_file("{$gmCore->upload['path']}/{$gmGallery->options['folder']['image_original']}/{$item->gmuid}")) {
                        $gmedias[$i]->meta['original']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_original']}/{$item->gmuid}";
                    } else {
                        $gmedias[$i]->meta['original']['link'] = '';
                    }
                    if (isset($_metadata['image_meta'])) {
                        $gmedias[$i]->meta['data'] = $_metadata['image_meta'];
                    }
                    unset($meta['image_meta']);
                } else {
                    $cover_gmedia = false;
                    if (!empty($meta['_cover'][0])) {
                        $cover_gmedia = $gmDB->get_gmedia($meta['_cover'][0]);
                        if ($cover_gmedia) {
                            $cover_metadata = $gmDB->get_metadata('gmedia', $cover_gmedia->ID, '_metadata', true);
                            $gmedias[$i]->meta = array('thumb' => $cover_metadata['thumb'], 'web' => $cover_metadata['web'], 'original' => $cover_metadata['original']);
                            $gmedias[$i]->meta['thumb']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_thumb']}/{$cover_gmedia->gmuid}";
                            $gmedias[$i]->meta['web']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image']}/{$cover_gmedia->gmuid}";
                            if (is_file("{$gmCore->upload['path']}/{$gmGallery->options['folder']['image_original']}/{$cover_gmedia->gmuid}")) {
                                $gmedias[$i]->meta['original']['link'] = "{$gmCore->upload['url']}/{$gmGallery->options['folder']['image_original']}/{$cover_gmedia->gmuid}";
                            } else {
                                $gmedias[$i]->meta['original']['link'] = '';
                            }
                        }
                    }
                    unset($meta['_cover']);
                    if (!$cover_gmedia) {
                        $gmedias[$i]->meta = array('thumb' => array('link' => $gmCore->gm_get_media_image($item, 'thumb', false), 'width' => 300, 'height' => 300));
                    }
                    if (!empty($_metadata)) {
                        $gmedias[$i]->meta['data'] = $_metadata;
                    }
                }
                $gmedias[$i]->meta['views'] = 0;
                $gmedias[$i]->meta['likes'] = 0;
                if (isset($meta['views'][0])) {
                    $gmedias[$i]->meta['views'] = $meta['views'][0];
                }
                unset($meta['views']);
                if (isset($meta['likes'][0])) {
                    $gmedias[$i]->meta['likes'] = $meta['likes'][0];
                }
                unset($meta['likes']);
                if (!empty($meta['_gps'][0])) {
                    $gmedias[$i]->meta['data']['GPS'] = $meta['_gps'][0];
                }
                unset($meta['_gps']);
                if (isset($meta['_rating'][0])) {
                    $gmedias[$i]->meta['rating'] = maybe_unserialize($meta['_rating'][0]);
                }
                unset($meta['_rating']);
                if (!empty($data['meta']) && !empty($meta)) {
                    foreach ($meta as $key => $val) {
                        if ('_peaks' == $key) {
                            $gmedias[$i]->meta[$key] = json_decode($val[0]);
                        } else {
                            $gmedias[$i]->meta[$key] = maybe_unserialize($val);
                        }
                    }
                }
                $item_name = $item->title ? $item->title : pathinfo($item->gmuid, PATHINFO_FILENAME);
                $gmedia_hashid = gmedia_hash_id_encode($item->ID, 'single');
                $gmedias[$i]->sharelink = str_replace(array('$1', '$2'), array(urlencode($gmedia_hashid), 's'), $share_link_base);
                if (1 === $logic && 'publish' == $item->status) {
                    $gmedias[$i]->status = 'public';
                }
            }
            $out = array_merge($filter, array('properties' => $properties, 'data' => array_values($gmedias)));
            break;
        case 'delete_term':
            $taxonomy = $data['taxonomy'];
            if (!empty($data['items'])) {
                if (!current_user_can('gmedia_terms_delete')) {
                    $error[] = __('You have no permission to do this operation', 'grand-media');
                    break;
                }
                $count = count($data['items']);
                foreach ($data['items'] as $item) {
                    if (!current_user_can('gmedia_edit_others_media')) {
                        if ('gmedia_album' == $taxonomy) {
                            $term = $gmDB->get_term($item, $taxonomy);
                            if ((int) $term->global != (int) $user_ID) {
                                $error['delete_album'] = __('You are not allowed to edit others media', 'grand-media');
                                $count--;
                                continue;
                            }
                        } else {
                            $error[] = __('You are not allowed to edit others media', 'grand-media');
                            $count--;
                            continue;
                        }
                    }
                    $delete = $gmDB->delete_term($item);
                    if (is_wp_error($delete)) {
                        $error[] = $delete->get_error_message();
                        $count--;
                    }
                }
                if ($count) {
                    $alert[] = sprintf(__('%d items deleted successfuly', 'grand-media'), $count);
                }
            }
            $out = gmedia_ios_app_library_data(array('filter', $taxonomy));
            break;
        case 'add_term':
            $taxonomy = $data['taxonomy'];
            $edit_term = isset($data['term_id']) ? (int) $data['term_id'] : 0;
            $term = $data;
            $term_id = 0;
            if ('gmedia_album' == $taxonomy) {
                if (!current_user_can('gmedia_album_manage')) {
                    $out['error'] = array('code' => 'nocapability', 'title' => __("You can't do this", 'grand-media'), 'message' => __('You have no permission to do this operation', 'grand-media'));
                    return $out;
                }
                $args = array();
                do {
                    $term['name'] = trim($term['name']);
                    if (empty($term['name'])) {
                        $error[] = __('Term Name is not specified', 'grand-media');
                        break;
                    }
                    if ($gmCore->is_digit($term['name'])) {
                        $error[] = __("Term Name can't be only digits", 'grand-media');
                        break;
                    }
                    if (1 === $logic && isset($term['status']) && 'public' == $term['status']) {
                        $term['status'] = 'publish';
                    }
                    if ($edit_term && !$gmDB->term_exists($edit_term, $taxonomy)) {
                        $error[] = __('A term with the id provided does not exists', 'grand-media');
                        $edit_term = false;
                    }
                    $term_author = isset($term['global']) ? $term['global'] : false;
                    if ($term_id = $gmDB->term_exists($term['name'], $taxonomy, $term_author)) {
                        if ($term_id != $edit_term) {
                            $error[] = __('A term with the name provided already exists', 'grand-media');
                            $error_info['terms'][$term_id] = $term['name'];
                            break;
                        }
                    }
                    if ($edit_term) {
                        $_term = $gmDB->get_term($edit_term, $taxonomy);
                        if ((int) $_term->global != (int) $user_ID && !current_user_can('gmedia_edit_others_media')) {
                            $error[] = __('You are not allowed to edit others media', 'grand-media');
                            break;
                        }
                        $term_id = $gmDB->update_term($edit_term, $term);
                    } else {
                        if (!current_user_can('gmedia_edit_others_media')) {
                            $term['global'] = intval($user_ID);
                        }
                        $term_id = $gmDB->insert_term($term['name'], $taxonomy, $term);
                    }
                    if (is_wp_error($term_id)) {
                        $error[] = $term_id->get_error_message();
                        $term_id = 0;
                        break;
                    }
                    $alert_info['terms'][$term_id] = $term['name'];
                    $term_meta = array();
                    if (isset($term['_orderby'])) {
                        $term_meta['_orderby'] = $term['_orderby'];
                    } elseif (isset($term['orderby'])) {
                        $term_meta['_orderby'] = $term['orderby'];
                    }
                    if (isset($term['_order'])) {
                        $term_meta['_order'] = $term['_order'];
                    } elseif (isset($term['order'])) {
                        $term_meta['_order'] = $term['order'];
                    }
                    if (isset($term['cover_id'])) {
                        $term_meta['_cover'] = (int) $term['cover_id'] ? $term['cover_id'] : '';
                    }
                    foreach ($term_meta as $key => $value) {
                        $gmDB->update_metadata('gmedia_term', $term_id, $key, $value);
                    }
                    $alert[] = sprintf(__('Album `%s` successfuly saved', 'grand-media'), $term['name']);
                } while (0);
                if (1 < $logic && $edit_term && $term_id) {
                    $lib_data = array('album__in' => array($term_id), 'admin' => 1);
                    if (!empty($data['per_page'])) {
                        $lib_data['per_page'] = $data['per_page'];
                    }
                    $out = gmedia_ios_app_processor('library', $lib_data);
                } else {
                    $out = gmedia_ios_app_library_data(array('filter', $taxonomy), $args);
                }
            } elseif ('gmedia_category' == $taxonomy) {
                if (!current_user_can('gmedia_category_manage')) {
                    $out['error'] = array('code' => 'nocapability', 'title' => __("You can't do this", 'grand-media'), 'message' => __('You have no permission to do this operation', 'grand-media'));
                    return $out;
                }
                $args = array();
                if ($edit_term) {
                    if (!current_user_can('gmedia_edit_others_media')) {
                        $error[] = __('You are not allowed to edit others media', 'grand-media');
                        break;
                    }
                    $term['name'] = trim($term['name']);
                    $term['term_id'] = intval($term['term_id']);
                    if ($term['name'] && !$gmCore->is_digit($term['name'])) {
                        if ($term_id = $gmDB->term_exists($term['term_id'], $taxonomy)) {
                            $db_term = $gmDB->get_term($term_id);
                            if ($db_term->name == $term['name'] || $db_term->name != $term['name'] && !$gmDB->term_exists($term['name'], $taxonomy)) {
                                $term_id = $gmDB->update_term($term['term_id'], $term);
                                if (is_wp_error($term_id)) {
                                    $error[] = $term_id->get_error_message();
                                    $term_id = 0;
                                } else {
                                    $alert[] = sprintf(__("Category %d successfuly updated", 'grand-media'), $term_id);
                                    $alert_info['terms'][$term_id] = $term['name'];
                                    if (1 < $logic) {
                                        $args['include'][] = $term_id;
                                    }
                                    $term_meta = array();
                                    if (isset($term['_orderby'])) {
                                        $term_meta['_orderby'] = $term['_orderby'];
                                    } elseif (isset($term['orderby'])) {
                                        $term_meta['_orderby'] = $term['orderby'];
                                    }
                                    if (isset($term['_order'])) {
                                        $term_meta['_order'] = $term['_order'];
                                    } elseif (isset($term['order'])) {
                                        $term_meta['_order'] = $term['order'];
                                    }
                                    foreach ($term_meta as $key => $value) {
                                        $gmDB->update_metadata('gmedia_term', $term_id, $key, $value);
                                    }
                                }
                            } else {
                                $error[] = __('A term with the name provided already exists', 'grand-media');
                                $error_info['terms'][$term_id] = $term['name'];
                            }
                        } else {
                            $error[] = __("A term with the id provided does not exists", 'grand-media');
                        }
                    } else {
                        $error[] = __("Term name can't be only digits or empty", 'grand-media');
                    }
                } else {
                    $terms = array_filter(array_map('trim', explode(',', $term['name'])));
                    $terms_added = 0;
                    $terms_qty = count($terms);
                    foreach ($terms as $term_name) {
                        if ($gmCore->is_digit($term_name)) {
                            continue;
                        }
                        if (!($term_id = $gmDB->term_exists($term_name, $taxonomy))) {
                            $term_id = $gmDB->insert_term($term_name, $taxonomy);
                            if (is_wp_error($term_id)) {
                                $error[] = $term_id->get_error_message();
                                $term_id = 0;
                            } else {
                                $alert['category_add'] = sprintf(__('%d of %d categories successfuly added', 'grand-media'), ++$terms_added, $terms_qty);
                                $alert_info['terms'][$term_id] = $term_name;
                            }
                        } else {
                            $alert['category_add'] = __('Some of provided categories are already exists', 'grand-media');
                            $alert_info['terms'][$term_id] = $term_name;
                        }
                    }
                }
                if (1 < $logic && $edit_term && $term_id) {
                    $lib_data = array('category__in' => array($term_id), 'admin' => 1);
                    if (!empty($data['per_page'])) {
                        $lib_data['per_page'] = $data['per_page'];
                    }
                    $out = gmedia_ios_app_processor('library', $lib_data);
                } else {
                    $out = gmedia_ios_app_library_data(array('filter', $taxonomy), $args);
                }
            } elseif ('gmedia_tag' == $taxonomy) {
                if (!current_user_can('gmedia_tag_manage')) {
                    $out['error'] = array('code' => 'nocapability', 'title' => __("You can't do this", 'grand-media'), 'message' => __('You have no permission to do this operation', 'grand-media'));
                    return $out;
                }
                $args = array();
                if ($edit_term) {
                    if (!current_user_can('gmedia_edit_others_media')) {
                        $error[] = __('You are not allowed to edit others media', 'grand-media');
                        break;
                    }
                    $term['name'] = trim($term['name']);
                    $term['term_id'] = intval($term['term_id']);
                    if ($term['name'] && !$gmCore->is_digit($term['name'])) {
                        if ($term_id = $gmDB->term_exists($term['term_id'], $taxonomy)) {
                            if (!$gmDB->term_exists($term['name'], $taxonomy)) {
                                $term_id = $gmDB->update_term($term['term_id'], $term);
                                if (is_wp_error($term_id)) {
                                    $error[] = $term_id->get_error_message();
                                    $term_id = 0;
                                } else {
                                    $alert[] = sprintf(__("Tag %d successfuly updated", 'grand-media'), $term_id);
                                    $alert_info['terms'][$term_id] = $term['name'];
                                }
                            } else {
                                $error[] = __('A term with the name provided already exists', 'grand-media');
                                $error_info['terms'][$term_id] = $term['name'];
                            }
                        } else {
                            $error[] = __("A term with the id provided does not exists", 'grand-media');
                        }
                    } else {
                        $error[] = __("Term name can't be only digits or empty", 'grand-media');
                    }
                } else {
                    $terms = array_filter(array_map('trim', explode(',', $term['name'])));
                    $terms_added = 0;
                    $terms_qty = count($terms);
                    foreach ($terms as $term_name) {
                        if ($gmCore->is_digit($term_name)) {
                            continue;
                        }
                        if (!($term_id = $gmDB->term_exists($term_name, $taxonomy))) {
                            $term_id = $gmDB->insert_term($term_name, $taxonomy);
                            if (is_wp_error($term_id)) {
                                $error[] = $term_id->get_error_message();
                                $term_id = 0;
                            } else {
                                $alert['tag_add'] = sprintf(__('%d of %d tags successfuly added', 'grand-media'), ++$terms_added, $terms_qty);
                                $alert_info['terms'][$term_id] = $term_name;
                            }
                        } else {
                            $alert['tag_add'] = __('Some of provided tags are already exists', 'grand-media');
                            $alert_info['terms'][$term_id] = $term_name;
                        }
                    }
                }
                if (1 < $logic && $edit_term && $term_id) {
                    $lib_data = array('tag__in' => array($term_id), 'admin' => 1);
                    if (!empty($data['per_page'])) {
                        $lib_data['per_page'] = $data['per_page'];
                    }
                    $out = gmedia_ios_app_processor('library', $lib_data);
                } else {
                    $out = gmedia_ios_app_library_data(array('filter', $taxonomy), $args);
                }
            }
            break;
        default:
            break;
    }
    if (!empty($error)) {
        $out['error'] = array('code' => $action, 'title' => 'ERROR', 'message' => implode("\n", $error));
        if (!empty($error_info)) {
            $out['error'] = array_merge($out['error'], $error_info);
        }
    }
    if (!empty($alert)) {
        $out['alert'] = array('title' => 'Success', 'message' => implode("\n", $alert));
        if (!empty($alert_info)) {
            $out['alert'] = array_merge($out['alert'], $alert_info);
        }
    }
    return $out;
}
Ejemplo n.º 2
0
    } elseif (isset($json->login)) {
        $out = gmedia_ios_app_login($json);
        if (!isset($out['error'])) {
            $user = wp_set_current_user($out['user']['id']);
            $gmedia_capabilities_list = array('gmedia_library', 'gmedia_show_others_media', 'gmedia_edit_media', 'gmedia_edit_others_media', 'gmedia_delete_media', 'gmedia_delete_others_media', 'gmedia_upload', 'gmedia_terms', 'gmedia_album_manage', 'gmedia_tag_manage', 'gmedia_terms_delete');
            $gmedia_capabilities = array();
            foreach ($gmedia_capabilities_list as $cap) {
                $gmedia_capabilities[$cap] = current_user_can($cap);
            }
            $out['user']['gmedia_capabilities'] = $gmedia_capabilities;
            $data = gmedia_ios_app_library_data();
            $out = $out + $data;
        }
    } else {
        if (isset($json->library)) {
            $out = gmedia_ios_app_processor('library', $json->library);
        } else {
            $out = gmedia_ios_app_library_data();
        }
    }
} elseif ('lostpassword' == $gmCore->_get('action')) {
    if (function_exists('wp_lostpassword_url')) {
        $url = wp_lostpassword_url();
    } else {
        $url = add_query_arg('action', 'lostpassword', wp_login_url());
    }
    wp_redirect($url);
    exit;
}
/**
 * @param $json