git-svn-id: https://192.168.0.254/svn/Proyectos.AdemasProyectosSolidarios_Web/trunk@1 dac18aa3-6f68-5b46-b19f-13bb96c8fe2c
446 lines
14 KiB
PHP
446 lines
14 KiB
PHP
<?php
|
|
add_action('wp_ajax_ngg_ajax_operation', 'ngg_ajax_operation' );
|
|
|
|
/**
|
|
* Image edit functions via AJAX
|
|
*
|
|
* @author Alex Rabe
|
|
* @copyright 2008 - 2010
|
|
*
|
|
* @return void
|
|
*/
|
|
function ngg_ajax_operation() {
|
|
|
|
global $wpdb;
|
|
|
|
// if nonce is not correct it returns -1
|
|
check_ajax_referer( "ngg-ajax" );
|
|
|
|
// check for correct capability
|
|
if ( !is_user_logged_in() )
|
|
die('-1');
|
|
|
|
// check for correct NextGEN capability
|
|
if ( !current_user_can('NextGEN Upload images') && !current_user_can('NextGEN Manage gallery') )
|
|
die('-1');
|
|
|
|
// include the ngg function
|
|
include_once (dirname (__FILE__) . '/functions.php');
|
|
|
|
// Get the image id
|
|
if ( isset($_POST['image'])) {
|
|
$id = (int) $_POST['image'];
|
|
// let's get the image data
|
|
$picture = nggdb::find_image( $id );
|
|
// what do you want to do ?
|
|
switch ( $_POST['operation'] ) {
|
|
case 'create_thumbnail' :
|
|
$result = nggAdmin::create_thumbnail($picture);
|
|
break;
|
|
case 'resize_image' :
|
|
$result = nggAdmin::resize_image($picture);
|
|
break;
|
|
case 'rotate_cw' :
|
|
$result = nggAdmin::rotate_image($picture, 'CW');
|
|
nggAdmin::create_thumbnail($picture);
|
|
break;
|
|
case 'rotate_ccw' :
|
|
$result = nggAdmin::rotate_image($picture, 'CCW');
|
|
nggAdmin::create_thumbnail($picture);
|
|
break;
|
|
case 'set_watermark' :
|
|
$result = nggAdmin::set_watermark($picture);
|
|
break;
|
|
case 'recover_image' :
|
|
$result = nggAdmin::recover_image($picture);
|
|
break;
|
|
case 'import_metadata' :
|
|
$result = nggAdmin::import_MetaData( $id );
|
|
break;
|
|
case 'get_image_ids' :
|
|
$result = nggAdmin::get_image_ids( $id );
|
|
break;
|
|
default :
|
|
do_action( 'ngg_ajax_' . $_POST['operation'] );
|
|
die('-1');
|
|
break;
|
|
}
|
|
// A success should return a '1'
|
|
die ($result);
|
|
}
|
|
|
|
// The script should never stop here
|
|
die('0');
|
|
}
|
|
|
|
add_action('wp_ajax_createNewThumb', 'createNewThumb');
|
|
|
|
function createNewThumb() {
|
|
|
|
global $ngg;
|
|
|
|
// check for correct capability
|
|
if ( !is_user_logged_in() )
|
|
die('-1');
|
|
|
|
// check for correct NextGEN capability
|
|
if ( !current_user_can('NextGEN Manage gallery') )
|
|
die('-1');
|
|
|
|
include_once( nggGallery::graphic_library() );
|
|
|
|
$id = (int) $_POST['id'];
|
|
$picture = nggdb::find_image( $id );
|
|
|
|
$x = round( $_POST['x'] * $_POST['rr'], 0);
|
|
$y = round( $_POST['y'] * $_POST['rr'], 0);
|
|
$w = round( $_POST['w'] * $_POST['rr'], 0);
|
|
$h = round( $_POST['h'] * $_POST['rr'], 0);
|
|
|
|
$thumb = new ngg_Thumbnail($picture->imagePath, TRUE);
|
|
|
|
$thumb->crop($x, $y, $w, $h);
|
|
|
|
// Note : the routine is a bit different to create_thumbnail(), due to rounding it's resized in the other way
|
|
if ($ngg->options['thumbfix']) {
|
|
// check for portrait format
|
|
if ($thumb->currentDimensions['height'] > $thumb->currentDimensions['width']) {
|
|
// first resize to the wanted height, here changed to create_thumbnail()
|
|
$thumb->resize(0, $ngg->options['thumbheight']);
|
|
// get optimal y startpos
|
|
$ypos = ($thumb->currentDimensions['height'] - $ngg->options['thumbheight']) / 2;
|
|
$thumb->crop(0, $ypos, $ngg->options['thumbwidth'],$ngg->options['thumbheight']);
|
|
} else {
|
|
// first resize to the wanted width, here changed to create_thumbnail()
|
|
$thumb->resize($ngg->options['thumbwidth'], 0);
|
|
//
|
|
// get optimal x startpos
|
|
$xpos = ($thumb->currentDimensions['width'] - $ngg->options['thumbwidth']) / 2;
|
|
$thumb->crop($xpos, 0, $ngg->options['thumbwidth'],$ngg->options['thumbheight']);
|
|
}
|
|
//this create a thumbnail but keep ratio settings
|
|
} else {
|
|
$thumb->resize($ngg->options['thumbwidth'],$ngg->options['thumbheight']);
|
|
}
|
|
|
|
if ( $thumb->save($picture->thumbPath, 100)) {
|
|
|
|
//read the new sizes
|
|
$new_size = @getimagesize ( $picture->thumbPath );
|
|
$size['width'] = $new_size[0];
|
|
$size['height'] = $new_size[1];
|
|
|
|
// add them to the database
|
|
nggdb::update_image_meta($picture->pid, array( 'thumbnail' => $size) );
|
|
|
|
echo "OK";
|
|
} else {
|
|
header('HTTP/1.1 500 Internal Server Error');
|
|
echo "KO";
|
|
}
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
add_action('wp_ajax_rotateImage', 'ngg_rotateImage');
|
|
|
|
function ngg_rotateImage() {
|
|
|
|
// check for correct capability
|
|
if ( !is_user_logged_in() )
|
|
die('-1');
|
|
|
|
// check for correct NextGEN capability
|
|
if ( !current_user_can('NextGEN Manage gallery') )
|
|
die('-1');
|
|
|
|
require_once( dirname( dirname(__FILE__) ) . '/ngg-config.php');
|
|
|
|
// include the ngg function
|
|
include_once (dirname (__FILE__). '/functions.php');
|
|
|
|
$ngg_options = get_option('ngg_options');
|
|
|
|
$id = (int) $_POST['id'];
|
|
$result = '-1';
|
|
|
|
switch ( $_POST['ra'] ) {
|
|
case 'cw' :
|
|
$result = nggAdmin::rotate_image($id, 'CW');
|
|
break;
|
|
case 'ccw' :
|
|
$result = nggAdmin::rotate_image($id, 'CCW');
|
|
break;
|
|
case 'fv' :
|
|
$result = nggAdmin::rotate_image($id, 0, 'V');
|
|
break;
|
|
case 'fh' :
|
|
$result = nggAdmin::rotate_image($id, 0, 'H');
|
|
break;
|
|
}
|
|
|
|
// recreate the thumbnail
|
|
nggAdmin::create_thumbnail($id);
|
|
|
|
if ( $result == 1 )
|
|
die('1');
|
|
|
|
header('HTTP/1.1 500 Internal Server Error');
|
|
die( $result );
|
|
|
|
}
|
|
|
|
add_action('wp_ajax_ngg_dashboard', 'ngg_ajax_dashboard');
|
|
|
|
function ngg_ajax_dashboard() {
|
|
|
|
require_once( dirname( dirname(__FILE__) ) . '/admin/admin.php');
|
|
require_once( dirname( dirname(__FILE__) ) . '/admin/overview.php');
|
|
|
|
if ( !current_user_can('NextGEN Gallery overview') )
|
|
die('-1');
|
|
|
|
@header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
|
|
@header( 'X-Content-Type-Options: nosniff' );
|
|
|
|
switch ( $_GET['jax'] ) {
|
|
|
|
case 'ngg_lastdonators' :
|
|
ngg_overview_donators();
|
|
break;
|
|
|
|
case 'dashboard_primary' :
|
|
ngg_overview_news();
|
|
break;
|
|
|
|
case 'ngg_locale' :
|
|
ngg_locale();
|
|
break;
|
|
|
|
case 'dashboard_plugins' :
|
|
ngg_related_plugins();
|
|
break;
|
|
|
|
}
|
|
die();
|
|
}
|
|
|
|
add_action('wp_ajax_ngg_file_browser', 'ngg_ajax_file_browser');
|
|
|
|
/**
|
|
* jQuery File Tree PHP Connector
|
|
* @author Cory S.N. LaViska - A Beautiful Site (http://abeautifulsite.net/)
|
|
* @version 1.0.1
|
|
*
|
|
* @return string folder content
|
|
*/
|
|
function ngg_ajax_file_browser() {
|
|
|
|
global $ngg;
|
|
|
|
// check for correct NextGEN capability
|
|
if ( !current_user_can('NextGEN Upload images') && !current_user_can('NextGEN Manage gallery') )
|
|
die('No access');
|
|
|
|
if ( !defined('ABSPATH') )
|
|
die('No access');
|
|
|
|
// if nonce is not correct it returns -1
|
|
check_ajax_referer( 'ngg-ajax', 'nonce' );
|
|
|
|
//PHP4 compat script
|
|
if (!function_exists('scandir')) {
|
|
function scandir($dir, $listDirectories = false, $skipDots = true ) {
|
|
$dirArray = array();
|
|
if ($handle = opendir($dir) ) {
|
|
while (false !== ($file = readdir($handle))) {
|
|
if (($file != '.' && $file != '..' ) || $skipDots == true) {
|
|
if($listDirectories == false) { if(is_dir($file)) { continue; } }
|
|
array_push($dirArray, basename($file) );
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
return $dirArray;
|
|
}
|
|
}
|
|
|
|
// start from the default path
|
|
$root = trailingslashit ( WINABSPATH );
|
|
// get the current directory
|
|
$dir = trailingslashit ( urldecode($_POST['dir']) );
|
|
|
|
if( file_exists($root . $dir) ) {
|
|
$files = scandir($root . $dir);
|
|
natcasesort($files);
|
|
|
|
// The 2 counts for . and ..
|
|
if( count($files) > 2 ) {
|
|
echo "<ul class=\"jqueryDirTree\" style=\"display: none;\">";
|
|
|
|
// return only directories
|
|
foreach( $files as $file ) {
|
|
|
|
//reserved name for the thumnbnails, don't use it as folder name
|
|
if ( $file == 'thumbs')
|
|
continue;
|
|
|
|
if ( file_exists($root . $dir . $file) && $file != '.' && $file != '..' && is_dir($root . $dir . $file) ) {
|
|
echo "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . esc_html($dir . $file) . "/\">" . esc_html($file) . "</a></li>";
|
|
}
|
|
}
|
|
|
|
echo "</ul>";
|
|
}
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
add_action('wp_ajax_ngg_tinymce', 'ngg_ajax_tinymce');
|
|
/**
|
|
* Call TinyMCE window content via admin-ajax
|
|
*
|
|
* @since 1.7.0
|
|
* @return html content
|
|
*/
|
|
function ngg_ajax_tinymce() {
|
|
|
|
// check for rights
|
|
if ( !current_user_can('edit_pages') && !current_user_can('edit_posts') )
|
|
die(__("You are not allowed to be here"));
|
|
|
|
include_once( dirname( dirname(__FILE__) ) . '/admin/tinymce/window.php');
|
|
|
|
die();
|
|
}
|
|
|
|
add_action( 'wp_ajax_ngg_rebuild_unique_slugs', 'ngg_ajax_rebuild_unique_slugs' );
|
|
/**
|
|
* This rebuild the slugs for albums, galleries and images as ajax routine, max 50 elements per request
|
|
*
|
|
* @since 1.7.0
|
|
* @return string '1'
|
|
*/
|
|
function ngg_ajax_rebuild_unique_slugs() {
|
|
global $wpdb;
|
|
|
|
$action = $_POST['_action'];
|
|
$offset = (int) $_POST['offset'];
|
|
|
|
switch ($action) {
|
|
case 'images':
|
|
$images = $wpdb->get_results("SELECT * FROM $wpdb->nggpictures ORDER BY pid ASC LIMIT $offset, 50", OBJECT_K);
|
|
if ( is_array($images) ) {
|
|
foreach ($images as $image) {
|
|
//slug must be unique, we use the alttext for that
|
|
$image->slug = nggdb::get_unique_slug( sanitize_title( $image->alttext ), 'image' );
|
|
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->nggpictures SET image_slug= '%s' WHERE pid = '%d'" , $image->slug, $image->pid ) );
|
|
}
|
|
}
|
|
break;
|
|
case 'gallery':
|
|
$galleries = $wpdb->get_results("SELECT * FROM $wpdb->nggallery ORDER BY gid ASC LIMIT $offset, 50", OBJECT_K);
|
|
if ( is_array($galleries) ) {
|
|
foreach ($galleries as $gallery) {
|
|
//slug must be unique, we use the title for that
|
|
$gallery->slug = nggdb::get_unique_slug( sanitize_title( $gallery->title ), 'gallery' );
|
|
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->nggallery SET slug= '%s' WHERE gid = '%d'" , $gallery->slug, $gallery->gid ) );
|
|
}
|
|
}
|
|
break;
|
|
case 'album':
|
|
$albumlist = $wpdb->get_results("SELECT * FROM $wpdb->nggalbum ORDER BY id ASC LIMIT $offset, 50", OBJECT_K);
|
|
if ( is_array($albumlist) ) {
|
|
foreach ($albumlist as $album) {
|
|
//slug must be unique, we use the name for that
|
|
$album->slug = nggdb::get_unique_slug( sanitize_title( $album->name ), 'album' );
|
|
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->nggalbum SET slug= '%s' WHERE id = '%d'" , $album->slug, $album->id ) );
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
die(1);
|
|
}
|
|
add_action('wp_ajax_ngg_image_check', 'ngg_ajax_image_check');
|
|
/**
|
|
* Test for various image resolution
|
|
*
|
|
* @since 1.7.3
|
|
* @return result
|
|
*/
|
|
function ngg_ajax_image_check() {
|
|
|
|
// check for correct NextGEN capability
|
|
if ( !current_user_can('NextGEN Upload images') )
|
|
die('No access');
|
|
|
|
if ( !defined('ABSPATH') )
|
|
die('No access');
|
|
|
|
$step = (int) $_POST['step'];
|
|
|
|
// build the test sizes
|
|
$sizes = array();
|
|
$sizes[1] = array ( 'width' => 800, 'height' => 600);
|
|
$sizes[2] = array ( 'width' => 1024, 'height' => 768);
|
|
$sizes[3] = array ( 'width' => 1280, 'height' => 960); // 1MP
|
|
$sizes[4] = array ( 'width' => 1600, 'height' => 1200); // 2MP
|
|
$sizes[5] = array ( 'width' => 2016, 'height' => 1512); // 3MP
|
|
$sizes[6] = array ( 'width' => 2272, 'height' => 1704); // 4MP
|
|
$sizes[7] = array ( 'width' => 2560, 'height' => 1920); // 5MP
|
|
$sizes[8] = array ( 'width' => 2848, 'height' => 2136); // 6MP
|
|
$sizes[9] = array ( 'width' => 3072, 'height' => 2304); // 7MP
|
|
$sizes[10] = array ( 'width' => 3264, 'height' => 2448); // 8MP
|
|
$sizes[11] = array ( 'width' => 4048, 'height' => 3040); // 12MP
|
|
|
|
if ( $step < 1 || $step > 11 )
|
|
die('No vaild value');
|
|
|
|
// let's test each image size
|
|
$temp = imagecreatetruecolor ($sizes[$step]['width'], $sizes[$step]['height'] );
|
|
imagedestroy ($temp);
|
|
|
|
$result = array ('stat' => 'ok', 'message' => sprintf(__('Could create image with %s x %s pixel', 'nggallery'), $sizes[$step]['width'], $sizes[$step]['height'] ) );
|
|
|
|
header('Content-Type: application/json; charset=' . get_option('blog_charset'), true);
|
|
echo json_encode($result);
|
|
|
|
die();
|
|
}
|
|
|
|
add_action('wp_ajax_ngg_test_head_footer', 'ngg_ajax_test_head_footer');
|
|
/**
|
|
* Check for the header / footer, parts taken from Matt Martz (http://sivel.net/)
|
|
*
|
|
* @see https://gist.github.com/378450
|
|
* @since 1.7.3
|
|
* @return result
|
|
*/
|
|
function ngg_ajax_test_head_footer() {
|
|
|
|
// Build the url to call, NOTE: uses home_url and thus requires WordPress 3.0
|
|
$url = add_query_arg( array( 'test-head' => '', 'test-footer' => '' ), home_url() );
|
|
// Perform the HTTP GET ignoring SSL errors
|
|
$response = wp_remote_get( $url, array( 'sslverify' => false ) );
|
|
// Grab the response code and make sure the request was sucessful
|
|
$code = (int) wp_remote_retrieve_response_code( $response );
|
|
if ( $code == 200 ) {
|
|
global $head_footer_errors;
|
|
$head_footer_errors = array();
|
|
|
|
// Strip all tabs, line feeds, carriage returns and spaces
|
|
$html = preg_replace( '/[\t\r\n\s]/', '', wp_remote_retrieve_body( $response ) );
|
|
|
|
// Check to see if we found the existence of wp_head
|
|
if ( ! strstr( $html, '<!--wp_head-->' ) )
|
|
die('Missing the call to <?php wp_head(); ?> in your theme');
|
|
// Check to see if we found the existence of wp_footer
|
|
if ( ! strstr( $html, '<!--wp_footer-->' ) )
|
|
die('Missing the call to <?php wp_footer(); ?> in your theme');
|
|
}
|
|
die('success');
|
|
}
|
|
?>
|