/** * Uninstall all settings and tables * Called via Setup and register_unstall hook * * @access internal * @return void */ function gmedia_uninstall() { /** @var $wpdb wpdb */ global $wpdb, $gmCore, $gmDB; $options = get_option('gmediaOptions'); $upload = $gmCore->gm_upload_dir(false); // remove all tables if allowed if ('all' == $options['uninstall_dropdata'] || 'db' == $options['uninstall_dropdata']) { $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}gmedia"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}gmedia_meta"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}gmedia_term"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}gmedia_term_meta"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}gmedia_term_relationships"); delete_metadata('post', 0, '_gmedia_image_id', '', true); } $capabilities = gmedia_plugin_capabilities(); $capabilities = apply_filters('gmedia_capabilities', $capabilities); $check_order = $gmDB->get_sorted_roles(); foreach ($check_order as $the_role) { // If you rename the roles, then please use the role manager plugin if (empty($the_role)) { continue; } foreach ($capabilities as $cap) { if ($the_role->has_cap($cap)) { $the_role->remove_cap($cap); } } } // then remove all options delete_option('gmediaOptions'); delete_option('gmediaDbVersion'); delete_option('gmediaVersion'); delete_option('GmediaHashID_salt'); delete_metadata('user', 0, 'gm_screen_options', '', true); if (!$upload['error']) { if ('all' == $options['uninstall_dropdata']) { $files_folder = $upload['path']; $gmCore->delete_folder($files_folder); } else { $files_folder = $upload['path'] . '/' . $options['folder']['module']; $gmCore->delete_folder($files_folder); } } }
function capabilities() { $capabilities = gmedia_plugin_capabilities(); $capabilities = apply_filters('gmedia_capabilities', $capabilities); if (is_multisite() && is_super_admin()) { foreach ($capabilities as $cap) { $this->caps[$cap] = 1; } } else { $curuser = wp_get_current_user(); foreach ($capabilities as $cap) { if (isset($curuser->allcaps[$cap]) && intval($curuser->allcaps[$cap])) { $this->caps[$cap] = 1; } else { $this->caps[$cap] = 0; } } } }
function processor() { global $gmCore, $gmDB, $gmGallery, $user_ID; if (!$this->page || strpos($this->page, 'GrandMedia') === false) { return; } auth_redirect(); switch ($this->page) { case 'GrandMedia': if (!$gmCore->caps['gmedia_library']) { wp_die(__('You are not allowed to be here', 'gmLang')); } if (isset($_POST['quick_gallery'])) { check_admin_referer('gmedia_modal'); do { if (!$gmCore->caps['gmedia_gallery_manage']) { $this->error[] = __('You are not allowed to manage galleries', 'gmLang'); break; } $gallery = $gmCore->_post('gallery'); $gallery['name'] = trim($gallery['name']); if (empty($gallery['name'])) { $this->error[] = __('Gallery Name is not specified', 'gmLang'); break; } if ($gmCore->is_digit($gallery['name'])) { $this->error[] = __("Gallery name can't be only digits", 'gmLang'); break; } if (empty($gallery['query']['gmedia__in'])) { $this->error[] = __('Choose gmedia from library for quick gallery', 'gmLang'); break; } $taxonomy = 'gmedia_gallery'; if ($term_id = $gmDB->term_exists($gallery['name'], $taxonomy)) { $this->error[] = __('A term with the name provided already exists', 'gmLang'); break; } $term_id = $gmDB->insert_term($gallery['name'], $taxonomy); if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } $gallery_meta = array('edited' => gmdate('Y-m-d H:i:s'), 'module' => $gallery['module'], 'query' => array('gmedia__in' => $gallery['query']['gmedia__in']), 'settings' => array($gallery['module'] => array())); foreach ($gallery_meta as $key => $value) { $gmDB->add_metadata('gmedia_term', $term_id, $key, $value); } $this->msg[] = sprintf(__('Gallery "%s" successfuly saved. Shortcode: [gmedia id=%d]', 'gmLang'), esc_attr($gallery['name']), $term_id); } while (0); } if (isset($_POST['filter_categories'])) { if ($term = $gmCore->_post('cat')) { $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'category__in' => implode(',', $term)), admin_url('admin.php')); wp_redirect($location); exit; } } if (isset($_POST['filter_albums'])) { if ($term = $gmCore->_post('alb')) { $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'album__in' => implode(',', $term)), admin_url('admin.php')); wp_redirect($location); exit; } } if (isset($_POST['filter_tags'])) { if ($term = $gmCore->_post('tag_ids')) { $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'tag__in' => $term), admin_url('admin.php')); wp_redirect($location); exit; } } if (isset($_POST['custom_filters'])) { if ($term = $gmCore->_post('custom_filter')) { $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'custom_filter' => $term), admin_url('admin.php')); wp_redirect($location); exit; } } if (isset($_POST['filter_authors'])) { $authors = $gmCore->_post('author_ids'); $location = add_query_arg(array('page' => $this->page, 'mode' => $this->mode, 'author' => (int) $authors), admin_url('admin.php')); wp_redirect($location); exit; } if (!empty($this->selected_items)) { if (isset($_POST['assign_category'])) { check_admin_referer('gmedia_modal'); if ($gmCore->caps['gmedia_terms']) { if (!$gmCore->caps['gmedia_edit_others_media']) { $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items)); if (count($selected_items) < count($this->selected_items)) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); } } else { $selected_items = $this->selected_items; } $term = $gmCore->_post('cat'); if (false !== $term && ($count = count($selected_items))) { if ('0' == $term) { foreach ($selected_items as $item) { $gmDB->delete_gmedia_term_relationships($item, 'gmedia_category'); } $this->msg[] = sprintf(__('%d item(s) was uncategorized', 'gmLang'), $count); } else { foreach ($selected_items as $item) { $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_category', $append = 0); if (is_wp_error($result)) { $this->error[] = $result; $count--; } elseif (!$result) { $count--; } } if (isset($gmGallery->options['taxonomies']['gmedia_category'][$term])) { $cat_name = $gmGallery->options['taxonomies']['gmedia_category'][$term]; $this->msg[] = sprintf(__("Category `%s` assigned to %d image(s).", 'gmLang'), esc_html($cat_name), $count); } else { $this->error[] = sprintf(__("Category `%s` can't be assigned.", 'gmLang'), $term); } } } } else { $this->error[] = __('You are not allowed to assign terms', 'gmLang'); } } if (isset($_POST['assign_album'])) { check_admin_referer('gmedia_modal'); if ($gmCore->caps['gmedia_terms']) { if (!$gmCore->caps['gmedia_edit_others_media']) { $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items)); if (count($selected_items) < count($this->selected_items)) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); } } else { $selected_items = $this->selected_items; } $term = $gmCore->_post('alb'); if (false !== $term && ($count = count($selected_items))) { if (empty($term)) { foreach ($selected_items as $item) { $gmDB->delete_gmedia_term_relationships($item, 'gmedia_album'); } $this->msg[] = sprintf(__('%d item(s) updated with "No Album"', 'gmLang'), $count); } else { $term_ids = array(); foreach ($selected_items as $item) { $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_album', $append = 0); if (is_wp_error($result)) { $this->error[] = $result; } elseif ($result) { foreach ($result as $t_id) { $term_ids[$t_id][] = $item; } } } if (!empty($term_ids)) { global $wpdb; foreach ($term_ids as $term_id => $item_ids) { $term = $gmDB->get_term($term_id, 'gmedia_album'); if (isset($_POST['status_global'])) { $values = array(); foreach ($selected_items as $item) { $values[] = $wpdb->prepare("%d", $item); } if ($values) { $status = esc_sql($term->status); if (false === $wpdb->query("UPDATE {$wpdb->prefix}gmedia SET status = '{$status}' WHERE ID IN (" . join(',', $values) . ")")) { $this->error[] = __('Could not update statuses for gmedia items in the database'); } } } $this->msg[] = sprintf(__('Album `%s` assigned to %d item(s)', 'gmLang'), esc_html($term->name), count($item_ids)); } } } } } else { $this->error[] = __('You are not allowed to assign terms', 'gmLang'); } } if (isset($_POST['add_tags'])) { check_admin_referer('gmedia_modal'); if (!$gmCore->caps['gmedia_terms']) { $this->error[] = __('You are not allowed to assign terms', 'gmLang'); } else { $term = $gmCore->_post('tag_names'); $iptc_tags = $gmCore->_post('iptc_tags'); if ($term || $iptc_tags) { if (!$gmCore->caps['gmedia_edit_others_media']) { $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items)); if (count($selected_items) < count($this->selected_items)) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); } } else { $selected_items = $this->selected_items; } $term = explode(',', $term); if ($count = count($selected_items)) { foreach ($selected_items as $item) { $_term = $term; if ($iptc_tags) { $_metadata = $gmDB->get_metadata('gmedia', $item, '_metadata', true); if (isset($_metadata['image_meta']['keywords']) && is_array($_metadata['image_meta']['keywords'])) { $_term = array_merge($_metadata['image_meta']['keywords'], $term); } } $result = $gmDB->set_gmedia_terms($item, $_term, 'gmedia_tag', $append = 1); if (is_wp_error($result)) { $this->error[] = $result; $count--; } elseif (!$result) { $count--; } } $this->msg[] = sprintf(__('Tags added to %d item(s)', 'gmLang'), count($term), $count); } } else { $this->error[] = __('No tags specified', 'gmLang'); } } } if (isset($_POST['delete_tags'])) { check_admin_referer('gmedia_modal'); if (($term = $gmCore->_post('tag_id')) && $gmCore->caps['gmedia_terms']) { if (!$gmCore->caps['gmedia_edit_others_media']) { $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items)); if (count($selected_items) < count($this->selected_items)) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); } } else { $selected_items = $this->selected_items; } $term = array_map('intval', $term); if ($count = count($selected_items)) { foreach ($selected_items as $item) { $result = $gmDB->set_gmedia_terms($item, $term, 'gmedia_tag', $append = -1); if (is_wp_error($result)) { $this->error[] = $result; $count--; } elseif (!$result) { $count--; } } $this->msg[] = sprintf(__('%d tag(s) deleted from %d item(s)', 'gmLang'), count($term), $count); } } else { $this->error[] = __('You are not allowed to assign terms', 'gmLang'); } } if (isset($_POST['batch_edit'])) { check_admin_referer('gmedia_modal'); if ($gmCore->caps['gmedia_edit_media']) { if (!$gmCore->caps['gmedia_edit_others_media']) { $selected_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $this->selected_items)); if (count($selected_items) < count($this->selected_items)) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); } } else { $selected_items = $this->selected_items; } if ($count = count($selected_items)) { $batch_data = array(); $batch_data['modified'] = current_time('mysql'); $b_title = $gmCore->_post('batch_title'); $b_description = $gmCore->_post('batch_description'); $b_link = $gmCore->_post('batch_link'); $b_status = $gmCore->_post('batch_status'); if ($b_status) { $batch_data['status'] = $b_status; } $b_author = $gmCore->_post('batch_author'); if ($b_author) { $batch_data['author'] = $b_author; } foreach ($selected_items as $item) { $id = (int) $item; $gmedia = $gmDB->get_gmedia($id, ARRAY_A); switch ($b_title) { case 'empty': $batch_data['title'] = ''; break; case 'filename': $title = pathinfo($gmedia['gmuid'], PATHINFO_FILENAME); $batch_data['title'] = ucwords(str_replace('_', ' ', $title)); break; case 'custom': $title_custom = $gmCore->_post('batch_title_custom'); if (false !== $title_custom) { $batch_data['title'] = $title_custom; } break; } switch ($b_description) { case 'empty': $batch_data['description'] = ''; break; case 'metadata': $metatext = $gmCore->metadata_text($id); if ($gmedia['description']) { $gmedia['description'] .= "\n"; } $batch_data['description'] = $gmedia['description'] . $metatext; break; case 'custom': $description_custom = $gmCore->_post('batch_description_custom'); if (false !== $description_custom) { $what_description_custom = $gmCore->_post('what_description_custom'); if ('replace' == $what_description_custom) { $batch_data['description'] = $description_custom; } elseif ('append' == $what_description_custom) { $batch_data['description'] = $gmedia['description'] . $description_custom; } elseif ('prepend' == $what_description_custom) { $batch_data['description'] = $description_custom . $gmedia['description']; } } break; } switch ($b_link) { case 'empty': $batch_data['link'] = ''; break; case 'self': $fileinfo = $gmCore->fileinfo($gmedia['gmuid'], false); $batch_data['link'] = $fileinfo['fileurl_original']; break; case 'custom': $link_custom = $gmCore->_post('batch_link_custom'); if (false !== $link_custom) { $batch_data['link'] = $link_custom; } break; } //$gmedia_data = array_replace($gmedia, $batch_data); $gmedia_data = array_merge($gmedia, $batch_data); $gmDB->insert_gmedia($gmedia_data); } $this->msg[] = sprintf(__('%d item(s) updated successfuly', 'gmLang'), $count); } } else { $this->error[] = __('You are not allowed to edit media', 'gmLang'); } } if ('selected' == $gmCore->_get('update_meta')) { check_admin_referer('gmedia_update_meta'); if ($gmCore->caps['gmedia_edit_media']) { $count = count($this->selected_items); if ($count) { foreach ($this->selected_items as $item) { $id = (int) $item; $gmDB->update_metadata($meta_type = 'gmedia', $id, $meta_key = '_metadata', $gmDB->generate_gmedia_metadata($id)); } $this->msg[] = sprintf(__('%d item(s) updated successfuly', 'gmLang'), $count); } } else { $this->error[] = __('You are not allowed to edit media', 'gmLang'); } } } if ($delete_gmedia = $gmCore->_get('delete')) { check_admin_referer('gmedia_delete'); if ($gmCore->caps['gmedia_delete_media']) { if ('selected' == $delete_gmedia) { $selected_items = $this->selected_items; } else { $selected_items = wp_parse_id_list($delete_gmedia); } if (!empty($selected_items)) { if (!$gmCore->caps['gmedia_delete_others_media']) { $delete_items = $gmDB->get_gmedias(array('fields' => 'ids', 'author' => $user_ID, 'gmedia__in' => $selected_items)); if (count($delete_items) < count($selected_items)) { $this->error[] = __('You are not allowed to delete others media', 'gmLang'); } $selected_items = $delete_items; } if ($count = count($selected_items)) { $delete_original_file = intval($gmCore->_get('save_original_file')) ? false : true; foreach ($selected_items as $item) { if (!$gmDB->delete_gmedia((int) $item, $delete_original_file)) { $this->error[] = "#{$item}: " . __('Error in deleting...', 'gmLang'); $count--; } } if ($count) { if ($delete_original_file) { $this->msg[] = sprintf(__('%d item(s) deleted successfuly', 'gmLang'), $count); } else { $this->msg[] = sprintf(__('%d record(s) deleted from database successfuly. Original file(s) safe', 'gmLang'), $count); } } $this->selected_items = array_diff($this->selected_items, $selected_items); if (empty($this->selected_items)) { setcookie("gmuser_{$user_ID}_library", '', time() - 3600); unset($_COOKIE["gmuser_{$user_ID}_library"]); $this->selected_items = array(); } else { setcookie("gmuser_{$user_ID}_library", implode(',', $this->selected_items)); } } } } else { $this->error[] = __('You are not allowed to delete files', 'gmLang'); } } break; case 'GrandMedia_AddMedia': if (!$gmCore->caps['gmedia_upload']) { wp_die(__('You are not allowed to be here', 'gmLang')); } break; case 'GrandMedia_Terms': if (!$gmCore->caps['gmedia_library']) { wp_die(__('You are not allowed to be here', 'gmLang')); } $taxonomy = $gmCore->_get('term', 'gmedia_album'); if ($delete = $gmCore->_get('delete')) { check_admin_referer('gmedia_delete'); if ($gmCore->caps['gmedia_terms_delete']) { if ('selected' == $gmCore->_get('delete')) { $selected_items = $this->selected_items; } else { $selected_items = wp_parse_id_list($delete); } if (!$gmCore->caps['gmedia_delete_others_media']) { $_selected_items = array(); if ('gmedia_album' == $taxonomy) { $_selected_items = $gmDB->get_terms($taxonomy, array('fields' => 'ids', 'global' => $user_ID, 'include' => $selected_items)); } if (count($_selected_items) < count($selected_items)) { $this->error[] = __('You are not allowed to delete others media', 'gmLang'); } $selected_items = $_selected_items; } if ($count = count($selected_items)) { foreach ($selected_items as $item) { $delete = $gmDB->delete_term($item, $taxonomy); if (!$delete) { $count--; } elseif (is_wp_error($delete)) { $this->error[] = $delete->get_error_message(); $count--; } } if ($count) { $this->msg[] = sprintf(__('%d item(s) deleted successfuly', 'gmLang'), $count); } setcookie("gmuser_{$user_ID}_{$taxonomy}", '', time() - 3600); unset($_COOKIE["gmuser_{$user_ID}_{$taxonomy}"]); $this->selected_items = array(); } } else { $this->error[] = __('You are not allowed to delete terms', 'gmLang'); } } elseif (isset($_GET['edit_filter'])) { if (isset($_POST['select_author'])) { $authors = $gmCore->_post('author_ids'); $location = $gmCore->get_admin_url(array('author' => (int) $authors)); wp_redirect($location); exit; } if (isset($_POST['gmedia_filter_save'])) { check_admin_referer('GmediaTerms', 'term_save_wpnonce'); $edit_term = (int) $gmCore->_get('edit_filter'); do { if (!$gmCore->caps['gmedia_filter_manage']) { $this->error[] = __('You are not allowed to manage filters', 'gmLang'); break; } $term = $gmCore->_post('term'); if ((int) $term['global'] != $user_ID && !$gmCore->caps['gmedia_edit_others_media']) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); break; } $term['name'] = trim($term['name']); if (empty($term['name'])) { $this->error[] = __('Filter Name is not specified', 'gmLang'); break; } if ($gmCore->is_digit($term['name'])) { $this->error[] = __("Filter name can't be only digits", 'gmLang'); break; } $taxonomy = 'gmedia_filter'; if ($edit_term && !$gmDB->term_exists($edit_term, $taxonomy)) { $this->error[] = __('A term with the id provided do not exists', 'gmLang'); $edit_term = false; } if ($term_id = $gmDB->term_exists($term['name'], $taxonomy, $term['global'])) { if ($term_id != $edit_term) { $this->error[] = __('A term with the name provided already exists', 'gmLang'); break; } } if ($edit_term) { $term_id = $gmDB->update_term($edit_term, $taxonomy, $term); } else { $term_id = $gmDB->insert_term($term['name'], $taxonomy, $term); } if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } $filter_settings = array(); $_filter_settings = $gmCore->_post('gmedia_filter', array()); $other_data = $gmCore->_post('filter_data', array()); if (!$gmCore->caps['gmedia_show_others_media']) { $filter_settings['author__in'] = array($user_ID); } elseif (!empty($other_data['author_id'])) { $filter_settings[$other_data['author_id__condition']] = $other_data['author_id']; } if (!empty($other_data['gmedia_id'])) { $filter_settings[$other_data['gmedia_id__condition']] = $other_data['gmedia_id']; } if (isset($other_data['gmedia_album'])) { $filter_settings[$other_data['album__condition']] = $other_data['gmedia_album']; } if (isset($other_data['gmedia_category'])) { $filter_settings[$other_data['category__condition']] = $other_data['gmedia_category']; } if (isset($other_data['gmedia_tag'])) { $filter_settings[$other_data['tag__condition']] = $other_data['gmedia_tag']; } $filter_settings = array_merge($filter_settings, $_filter_settings); if (isset($filter_settings['meta_query']) && is_array($filter_settings['meta_query'])) { foreach ($filter_settings['meta_query'] as $i => $meta_query) { if (empty($meta_query['key'])) { unset($filter_settings['meta_query'][$i]); } } if (empty($filter_settings['meta_query'])) { unset($filter_settings['meta_query']); } } $filter_settings = array_filter($filter_settings); if ($edit_term) { $gmDB->update_metadata('gmedia_term', $term_id, 'query', $filter_settings); $this->msg[] = sprintf(__('Filter #%d successfuly saved', 'gmLang'), $term_id); } else { $gmDB->add_metadata('gmedia_term', $term_id, 'query', $filter_settings); $location = add_query_arg(array('page' => $this->page, 'edit_filter' => $term_id, 'message' => 'save'), admin_url('admin.php')); set_transient('gmedia_new_filter_id', $term_id, 60); wp_redirect($location); exit; } } while (0); } if ('save' == $gmCore->_get('message') && ($term_id = $gmCore->_get('edit_filter'))) { if (get_transient('gmedia_new_filter_id')) { delete_transient('gmedia_new_filter_id'); $this->msg[] = sprintf(__('Filter #%d successfuly saved', 'gmLang'), $term_id); } } } elseif (isset($_POST['gmedia_album_save'])) { check_admin_referer('GmediaTerms', 'term_save_wpnonce'); $edit_term = (int) $gmCore->_get('edit_album'); do { if (!$gmCore->caps['gmedia_album_manage']) { $this->error[] = __('You are not allowed to manage albums', 'gmLang'); break; } $term = $gmCore->_post('term'); $term['name'] = trim($term['name']); if (empty($term['name'])) { $this->error[] = __('Term Name is not specified', 'gmLang'); break; } if ($gmCore->is_digit($term['name'])) { $this->error[] = __("Term Name can't be only digits", 'gmLang'); break; } $taxonomy = 'gmedia_album'; if ($edit_term && !$gmDB->term_exists($edit_term, $taxonomy)) { $this->error[] = __('A term with the id provided do not exists', 'gmLang'); $edit_term = false; } if ($term_id = $gmDB->term_exists($term['name'], $taxonomy, $term['global'])) { if ($term_id != $edit_term) { $this->error[] = __('A term with the name provided already exists', 'gmLang'); 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')) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); break; } $term_id = $gmDB->update_term($edit_term, $term['taxonomy'], $term); } else { $term_id = $gmDB->insert_term($term['name'], $term['taxonomy'], $term); if (is_int($term_id)) { $term_meta = array('orderby' => $term['orderby'], 'order' => $term['order']); foreach ($term_meta as $key => $value) { $gmDB->add_metadata('gmedia_term', $term_id, $key, $value); } } } if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } $this->msg[] = sprintf(__('Album `%s` successfuly saved', 'gmLang'), $term['name']); } while (0); } elseif (isset($_POST['gmedia_term_sort_save'])) { check_admin_referer('GmediaTerms', 'term_save_wpnonce'); do { if (!$gmCore->caps['gmedia_album_manage']) { $this->error[] = __('You are not allowed to manage albums', 'gmLang'); break; } $term_data = $gmCore->_post('term'); $taxonomy = 'gmedia_album'; if (!($term_id = $gmDB->term_exists($term_data['term_id'], $taxonomy))) { $this->error[] = __('A term with the id provided do not exists', 'gmLang'); break; } else { $_term = $gmDB->get_term($term_id, $taxonomy); if ((int) $_term->global != (int) $user_ID && !current_user_can('gmedia_edit_others_media')) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); break; } $term_id = $gmDB->update_term_sortorder($term_id, $taxonomy, $term_data); if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } $this->msg[] = sprintf(__('Album `%s` successfuly saved', 'gmLang'), $_term->name); } } while (0); } elseif (isset($_POST['gmedia_tag_add'])) { if ($gmCore->caps['gmedia_tag_manage']) { check_admin_referer('GmediaTerms', 'term_save_wpnonce'); $term = $gmCore->_post('term'); $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)) { $this->error['tag_name_digit'] = __("Term Name can't be only digits", 'gmLang'); continue; } if (!$gmDB->term_exists($term_name, $term['taxonomy'])) { $term_id = $gmDB->insert_term($term_name, $term['taxonomy']); if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); } else { $this->msg['tag_add'] = sprintf(__('%d of %d tags successfuly added', 'gmLang'), ++$terms_added, $terms_qty); } } else { $this->error['tag_add'] = __('Some of provided tags are already exists', 'gmLang'); } } } else { $this->error[] = __('You are not allowed to manage tags', 'gmLang'); } } break; case 'GrandMedia_Galleries': if (!$gmCore->caps['gmedia_gallery_manage']) { wp_die(__('You are not allowed to manage gmedia galleries', 'gmLang')); } if (isset($_POST['select_author'])) { $authors = $gmCore->_post('author_ids'); $location = $gmCore->get_admin_url(array('author' => (int) $authors)); wp_redirect($location); exit; } if (isset($_POST['gmedia_gallery_save'])) { check_admin_referer('GmediaGallery'); $edit_gallery = (int) $gmCore->_get('edit_gallery'); do { $gallery = $gmCore->_post('gallery'); if ((int) $gallery['global'] != $user_ID && !$gmCore->caps['gmedia_edit_others_media']) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); break; } $gallery['name'] = trim($gallery['name']); if (empty($gallery['name'])) { $this->error[] = __('Gallery Name is not specified', 'gmLang'); break; } if ($gmCore->is_digit($gallery['name'])) { $this->error[] = __("Gallery name can't be only digits", 'gmLang'); break; } if (empty($gallery['module'])) { $this->error[] = __('Something goes wrong... Choose module, please', 'gmLang'); break; } $term = $gallery['term']; if (!isset($gallery['query'][$term]) || empty($gallery['query'][$term])) { $this->error[] = __('Choose gallery source, please (tags, albums, categories...)', 'gmLang'); break; } $taxonomy = 'gmedia_gallery'; if ($edit_gallery && !$gmDB->term_exists($edit_gallery, $taxonomy)) { $this->error[] = __('A term with the id provided do not exists', 'gmLang'); $edit_gallery = false; } if ($term_id = $gmDB->term_exists($gallery['name'], $taxonomy, $gallery['global'])) { if ($term_id != $edit_gallery) { $this->error[] = __('A term with the name provided already exists', 'gmLang'); break; } } if ($edit_gallery) { $term_id = $gmDB->update_term($edit_gallery, $taxonomy, $gallery); } else { $term_id = $gmDB->insert_term($gallery['name'], $taxonomy, $gallery); } if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } $module_settings = $gmCore->_post('module', array()); $module_path = $gmCore->get_module_path($gallery['module']); $default_options = array(); if (file_exists($module_path['path'] . '/settings.php')) { include $module_path['path'] . '/settings.php'; } else { $this->error[] = sprintf(__('Can\'t load data from `%s` module'), $gallery['module']); break; } $module_settings = $gmCore->array_replace_recursive($default_options, $module_settings); $gallery_meta = array('edited' => gmdate('Y-m-d H:i:s'), 'module' => $gallery['module'], 'query' => array($term => $gallery['query'][$term]), 'settings' => array($gallery['module'] => $module_settings)); foreach ($gallery_meta as $key => $value) { if ($edit_gallery) { $gmDB->update_metadata('gmedia_term', $term_id, $key, $value); } else { $gmDB->add_metadata('gmedia_term', $term_id, $key, $value); } } if ($edit_gallery) { $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id); } else { $location = add_query_arg(array('page' => $this->page, 'edit_gallery' => $term_id, 'message' => 'save'), admin_url('admin.php')); set_transient('gmedia_new_gallery_id', $term_id, 60); wp_redirect($location); exit; } } while (0); } if ('save' == $gmCore->_get('message') && ($term_id = $gmCore->_get('edit_gallery'))) { $gmedia_new_gallery_id = get_transient('gmedia_new_gallery_id'); if ($gmedia_new_gallery_id) { delete_transient('gmedia_new_gallery_id'); $this->msg[] = sprintf(__('Gallery #%d successfuly saved', 'gmLang'), $term_id); } } if (isset($_POST['module_preset_restore_original'])) { $preset_id = intval($gmCore->_post('preset_default', 0)); $gmDB->delete_term($preset_id, 'gmedia_module'); $this->msg[] = __('Original module settings restored. Click "Reset to default" button to save original module settings for gallery', 'gmLang'); } if (isset($_POST['gmedia_gallery_reset'])) { check_admin_referer('GmediaGallery'); $edit_gallery = (int) $gmCore->_get('edit_gallery'); do { $taxonomy = 'gmedia_gallery'; if (!$gmDB->term_exists($edit_gallery, $taxonomy)) { $this->error[] = __('A term with the id provided do not exists', 'gmLang'); break; } if (!$gmCore->caps['gmedia_edit_others_media']) { $gallery = $gmDB->get_term($edit_gallery, $taxonomy); if ($gallery->global != $user_ID) { $this->error[] = __('You are not allowed to edit others media', 'gmLang'); break; } } $gallery_settings = $gmDB->get_metadata('gmedia_term', $edit_gallery, 'settings', true); reset($gallery_settings); $gallery_module = key($gallery_settings); $module_path = $gmCore->get_module_path($gallery_module); /** * @var $default_options */ if (file_exists($module_path['path'] . '/settings.php')) { include $module_path['path'] . '/settings.php'; $preset = $gmDB->get_term('[' . $gallery_module . ']', 'gmedia_module'); if ($preset) { $default_preset = maybe_unserialize($preset->description); $default_options = $gmCore->array_replace_recursive($default_options, $default_preset); } } else { $this->error[] = sprintf(__('Can\'t load data from `%s` module'), $gallery_module); break; } $gallery_meta = array('edited' => gmdate('Y-m-d H:i:s'), 'settings' => array($gallery_module => $default_options)); foreach ($gallery_meta as $key => $value) { $gmDB->update_metadata('gmedia_term', $edit_gallery, $key, $value); } $this->msg[] = sprintf(__('Gallery settings are reset', 'gmLang')); } while (0); } if (isset($_POST['module_preset_save_as']) || isset($_POST['module_preset_save_default'])) { check_admin_referer('GmediaGallery'); do { $gallery = $gmCore->_post('gallery'); if (empty($gallery['module'])) { $this->error[] = __('Something goes wrong... Choose module, please', 'gmLang'); break; } $module_settings = $gmCore->_post('module', array()); $module_path = $gmCore->get_module_path($gallery['module']); $default_options = array(); if (file_exists($module_path['path'] . '/settings.php')) { include $module_path['path'] . '/settings.php'; } else { $this->error[] = sprintf(__('Can\'t load data from `%s` module'), $gallery['module']); break; } $module_settings = $gmCore->array_replace_recursive($default_options, $module_settings); $preset_name = $gmCore->_post('module_preset_name', ''); if (isset($_POST['module_preset_save_default'])) { $preset_name = '[' . $gallery['module'] . ']'; } else { $preset_name = trim($preset_name); if (empty($preset_name)) { $this->error[] = __('Preset name is not specified', 'gmLang'); break; } $preset_name = '[' . $gallery['module'] . '] ' . $preset_name; } $args = array(); $args['description'] = $module_settings; $args['status'] = $gallery['module']; $args['global'] = $user_ID; $taxonomy = 'gmedia_module'; $term_id = $gmDB->term_exists($preset_name, $taxonomy, $user_ID); if ($term_id) { $term_id = $gmDB->update_term($term_id, $taxonomy, $args); } else { $term_id = $gmDB->insert_term($preset_name, $taxonomy, $args); } if (is_wp_error($term_id)) { $this->error[] = $term_id->get_error_message(); break; } else { $this->msg[] = sprintf(__('Preset `%s` successfuly saved', 'gmLang'), $preset_name); } } while (0); } if ($delete = $gmCore->_get('delete')) { check_admin_referer('gmedia_delete'); $taxonomy = 'gmedia_gallery'; if ('selected' == $delete) { $selected_items = $this->selected_items; } else { $selected_items = wp_parse_id_list($delete); } if (!$gmCore->caps['gmedia_delete_others_media']) { $_selected_items = $gmDB->get_terms($taxonomy, array('fields' => 'ids', 'global' => $user_ID, 'include' => $selected_items)); if (count($_selected_items) < count($selected_items)) { $this->error[] = __('You are not allowed to delete others media', 'gmLang'); } $selected_items = $_selected_items; } if ($count = count($selected_items)) { foreach ($selected_items as $item) { $delete = $gmDB->delete_term($item, $taxonomy); if (!$delete) { $this->error[] = sprintf(__('Error while delete gallery #%d', 'gmLang'), $item); $count--; } elseif (is_wp_error($delete)) { $this->error[] = $delete->get_error_message(); $count--; } } if ($count) { $this->msg[] = sprintf(__('%d item(s) deleted successfuly', 'gmLang'), $count); } setcookie("gmuser_{$user_ID}_{$taxonomy}", '', time() - 3600); unset($_COOKIE["gmuser_{$user_ID}_{$taxonomy}"]); $this->selected_items = array(); } } break; case 'GrandMedia_Modules': if (!$gmCore->caps['gmedia_gallery_manage']) { wp_die(__('You are not allowed to manage gmedia galleries', 'gmLang')); } if (!$gmCore->caps['gmedia_module_manage']) { wp_die(__('You are not allowed to manage gmedia modules', 'gmLang')); } if (isset($_FILES['modulezip']['tmp_name'])) { if (!empty($_FILES['modulezip']['tmp_name'])) { check_admin_referer('GmediaModule'); if (!current_user_can('manage_options')) { wp_die(__('You are not allowed to install module ZIP', 'gmLang')); } $to_folder = $gmCore->upload['path'] . '/' . $gmGallery->options['folder']['module'] . '/'; if (!wp_mkdir_p($to_folder)) { $this->error[] = sprintf(__('Unable to create directory %s. Is its parent directory writable by the server?', 'gmLang'), $to_folder); break; } if (!is_writable($to_folder)) { @chmod($to_folder, 0755); if (!is_writable($to_folder)) { //@unlink( $_FILES['modulezip']['tmp_name'] ); $this->error[] = sprintf(__('Directory %s is not writable by the server.', 'gmLang'), $to_folder); break; } } $filename = wp_unique_filename($to_folder, $_FILES['modulezip']['name']); // Move the file to the modules dir if (false === @move_uploaded_file($_FILES['modulezip']['tmp_name'], $to_folder . $filename)) { $this->error[] = sprintf(__('The uploaded file could not be moved to %s', 'flag'), $to_folder . $filename); } else { global $wp_filesystem; // Is a filesystem accessor setup? if (!$wp_filesystem || !is_object($wp_filesystem)) { require_once ABSPATH . 'wp-admin/includes/file.php'; WP_Filesystem(); } if (!is_object($wp_filesystem)) { $result = new WP_Error('fs_unavailable', __('Could not access filesystem.', 'flag')); } elseif ($wp_filesystem->errors->get_error_code()) { $result = new WP_Error('fs_error', __('Filesystem error', 'flag'), $wp_filesystem->errors); } else { $result = unzip_file($to_folder . $filename, $to_folder); } // Once extracted, delete the package unlink($to_folder . $filename); if (is_wp_error($result)) { $this->error[] = $result->get_error_message(); } else { $this->msg[] = sprintf(__("The `%s` file unzipped to module's directory", 'flag'), $filename); } } } else { $this->error[] = __('No file specified', 'gmLang'); } } break; case 'GrandMedia_Settings': if (!$gmCore->caps['gmedia_settings']) { wp_die(__('You are not allowed to change gmedia settings', 'gmLang')); } $lk_check = isset($_POST['license-key-activate']); if (isset($_POST['gmedia_settings_save'])) { check_admin_referer('GmediaSettings'); $set = $gmCore->_post('set', array()); if (!empty($set['license_key']) && empty($set['license_key2'])) { $lk_check = true; } if (empty($set['license_key']) && !empty($set['license_key2'])) { $set['license_name'] = ''; $set['license_key'] = ''; $set['license_key2'] = ''; $this->error[] = __('License Key deactivated', 'gmLang'); } $flush_rewrite_rules = false; if (empty($set['endpoint'])) { $set['endpoint'] = 'gmedia'; } if ($set['endpoint'] !== $gmGallery->options['endpoint']) { $flush_rewrite_rules = true; } foreach ($set as $key => $val) { $gmGallery->options[$key] = $val; } $capabilities = $gmCore->_post('capability', array()); if (!empty($capabilities) && current_user_can('manage_options')) { global $wp_roles; $_roles = $wp_roles->roles; $_roles = array_keys(apply_filters('editable_roles', $_roles)); $roles = array_flip($_roles); // upload cap. if ($roles[$capabilities['gmedia_upload']] < $roles[$capabilities['gmedia_import']]) { $capabilities['gmedia_import'] = $capabilities['gmedia_upload']; } // edit/delete cap. if ($roles[$capabilities['gmedia_edit_media']] < $roles[$capabilities['gmedia_edit_others_media']]) { $capabilities['gmedia_edit_others_media'] = $capabilities['gmedia_edit_media']; } if ($roles[$capabilities['gmedia_edit_media']] < $roles[$capabilities['gmedia_delete_media']]) { $capabilities['gmedia_delete_media'] = $capabilities['gmedia_edit_media']; } if ($roles[$capabilities['gmedia_delete_media']] < $roles[$capabilities['gmedia_delete_others_media']]) { $capabilities['gmedia_delete_others_media'] = $capabilities['gmedia_delete_media']; } if ($roles[$capabilities['gmedia_edit_others_media']] < $roles[$capabilities['gmedia_delete_others_media']]) { $capabilities['gmedia_delete_others_media'] = $capabilities['gmedia_edit_others_media']; } if ($roles[$capabilities['gmedia_show_others_media']] < $roles[$capabilities['gmedia_edit_others_media']]) { $capabilities['gmedia_edit_others_media'] = $capabilities['gmedia_show_others_media']; } if ($roles[$capabilities['gmedia_show_others_media']] < $roles[$capabilities['gmedia_delete_others_media']]) { $capabilities['gmedia_delete_others_media'] = $capabilities['gmedia_show_others_media']; } // terms cap. if ($roles[$capabilities['gmedia_terms']] < $roles[$capabilities['gmedia_album_manage']]) { $capabilities['gmedia_album_manage'] = $capabilities['gmedia_terms']; } if ($roles[$capabilities['gmedia_terms']] < $roles[$capabilities['gmedia_tag_manage']]) { $capabilities['gmedia_tag_manage'] = $capabilities['gmedia_terms']; } if ($roles[$capabilities['gmedia_terms']] < $roles[$capabilities['gmedia_filter_manage']]) { $capabilities['gmedia_filter_manage'] = $capabilities['gmedia_terms']; } if ($roles[$capabilities['gmedia_terms']] < $roles[$capabilities['gmedia_terms_delete']]) { $capabilities['gmedia_terms_delete'] = $capabilities['gmedia_terms']; } else { $rolekey = max($roles[$capabilities['gmedia_album_manage']], $roles[$capabilities['gmedia_tag_manage']]); $role = $_roles[$rolekey]; if ($role < $roles[$capabilities['gmedia_terms_delete']]) { $capabilities['gmedia_terms_delete'] = $role; } } foreach ($capabilities as $key => $val) { $gmDB->set_capability($val, $key); } } update_option('gmediaOptions', $gmGallery->options); if (isset($_POST['GmediaHashID_salt'])) { update_option('GmediaHashID_salt', (string) $_POST['GmediaHashID_salt']); } if ($flush_rewrite_rules) { flush_rewrite_rules(false); } $this->msg[] .= __('Settings saved', 'gmLang'); } if ($lk_check) { check_admin_referer('GmediaSettings'); $license_key = $gmCore->_post('set'); if (!empty($license_key['license_key'])) { global $wp_version; $gmedia_ua = "WordPress/{$wp_version} | "; $gmedia_ua .= 'Gmedia/' . constant('GMEDIA_VERSION'); $response = wp_remote_post('http://codeasily.com/rest/gmedia-key.php', array('body' => array('key' => $license_key['license_key'], 'site' => site_url()), 'headers' => array('Content-Type' => 'application/x-www-form-urlencoded; ' . 'charset=' . get_option('blog_charset'), 'Host' => 'codeasily.com', 'User-Agent' => $gmedia_ua), 'httpversion' => '1.0', 'timeout' => 10)); if (is_wp_error($response)) { $this->error[] = $response->get_error_message(); } else { $result = json_decode($response['body']); if ($result->error->code == 200) { $gmGallery->options['license_name'] = $result->content; $gmGallery->options['license_key'] = $result->key; $gmGallery->options['license_key2'] = $result->key2; $this->msg[] = __('License Key activated successfully', 'gmLang'); } else { $gmGallery->options['license_name'] = ''; $gmGallery->options['license_key'] = ''; $gmGallery->options['license_key2'] = ''; $this->error[] = __('Error', 'gmLang') . ': ' . $result->error->message; } update_option('gmediaOptions', $gmGallery->options); } } else { $this->error[] = __('Empty License Key', 'gmLang'); } } if (isset($_POST['gmedia_settings_reset'])) { check_admin_referer('GmediaSettings'); include_once dirname(dirname(__FILE__)) . '/setup.php'; $_temp_options = $gmGallery->options; $gmGallery->options = gmedia_default_options(); $gmGallery->options['license_name'] = $_temp_options['license_name']; $gmGallery->options['license_key'] = $_temp_options['license_key']; $gmGallery->options['license_key2'] = $_temp_options['license_key2']; delete_metadata('user', 0, 'gm_screen_options', '', true); update_option('gmediaOptions', $gmGallery->options); if ($gmCore->_post('capability') && current_user_can('manage_options')) { $capabilities = gmedia_plugin_capabilities(); $capabilities = apply_filters('gmedia_capabilities', $capabilities); //$role = get_role('administrator'); foreach ($capabilities as $cap) { $gmDB->set_capability('administrator', $cap); } } $this->msg[] .= __('All settings set to default', 'gmLang'); } break; case 'GrandMedia_WordpressLibrary': if (!$gmCore->caps['gmedia_import']) { wp_die(__('You are not allowed to import media in Gmedia Library', 'gmLang')); } break; default: break; } }
/** * sets gmedia capabilities to administrator role **/ function gmedia_capabilities() { // Set the capabilities for the administrator $role = get_role('administrator'); // We need this role, no other chance if (empty($role)) { update_option("gmediaInitCheck", __('Sorry, Gmedia Gallery works only with a role called administrator', 'gmLang')); return; } $capabilities = gmedia_plugin_capabilities(); $capabilities = apply_filters('gmedia_capabilities', $capabilities); foreach ($capabilities as $cap) { $role->add_cap($cap); } }