isset($_POST['simulate']), 'use_high' => isset($_POST['use_high']), 'cat_id' => isset($_POST['cat_id']) ? (int)$_POST['cat_id'] : 0, 'subcats_included' => isset($_POST['subcats_included']), ); else $sync_options = array( 'simulate' => true, 'use_high' => true, 'cat_id' => 0, 'subcats_included' => true, ); if ( isset($_POST['submit']) ) { include_once(PHPWG_ROOT_PATH.'include/functions_picture.inc.php'); $where_clauses = array(); if ( $sync_options['cat_id']!=0 ) { $query=' SELECT id FROM '.CATEGORIES_TABLE.' WHERE '; if ( $sync_options['subcats_included']) $query .= 'uppercats REGEXP \'(^|,)'.$sync_options['cat_id'].'(,|$)\''; else $query .= 'id='.$sync_options['cat_id']; $cat_ids = array_from_query($query, 'id'); $query=' SELECT id,path,lat,lon,has_high FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id WHERE category_id IN ('.implode(',', $cat_ids).') GROUP BY id'; } else { $query=' SELECT id,path,lat,lon,has_high FROM '.IMAGES_TABLE; } $images = hash_from_query( $query, 'id'); $datas = array(); $errors = array(); foreach ($images as $image) { $filename = $image['path']; if ($sync_options['use_high'] and $image['has_high']=='true') $filename = get_high_path($image); $exif = @read_exif_data( $filename ); if ( empty($exif) ) continue; $exif = array_intersect_key( $exif, array_flip( array('GPSLatitudeRef', 'GPSLatitude', 'GPSLongitudeRef', 'GPSLongitude') ) ); if ( count($exif)!=4 ) continue; if ( !in_array($exif['GPSLatitudeRef'], array('S', 'N') ) ) { $errors[] = $filename. ': GPSLatitudeRef not S or N'; continue; } if ( !in_array($exif['GPSLongitudeRef'], array('W', 'E') ) ) { $errors[] = $filename. ': GPSLongitudeRef not W or E'; continue; } if (!is_array($exif['GPSLatitude']) or !is_array($exif['GPSLongitude']) ) { $errors[] = $filename. ': GPSLatitude and GPSLongitude are not arrays'; continue; } $lat = parse_lat_lon( $exif['GPSLatitude'] ); if ( $exif['GPSLatitudeRef']=='S' ) $lat = -$lat; $lon = parse_lat_lon( $exif['GPSLongitude'] ); if ( $exif['GPSLongitudeRef']=='W' ) $lon = -$lon; $datas[] = array ( 'id' => $image['id'], 'lat' => $lat, 'lon' => $lon, ); } $template->assign( 'sync_errors', $errors ); if ( count($datas)>0 and !$sync_options['simulate'] ) { mass_updates( IMAGES_TABLE, array( 'primary' => array('id'), 'update' => array('lat', 'lon') ), $datas ); rvm_invalidate_cache(); } $template->assign( 'metadata_result', array( 'NB_ELEMENTS_DONE' => count($datas), 'NB_ELEMENTS_CANDIDATES' => count($images), 'NB_ERRORS' => count($errors), )); } $query = ' SELECT id, CONCAT(name, IF(dir IS NULL, " (V)", "") ) AS name, uppercats, global_rank FROM '.CATEGORIES_TABLE; display_select_cat_wrapper($query, array( $sync_options['cat_id'] ), 'categories', false); $template->assign( array( 'SUBCATS_INCLUDED_CHECKED' => $sync_options['subcats_included'] ? 'checked="checked"' : '', 'USE_HIGH_CHECKED' => $sync_options['use_high'] ? 'checked="checked"' : '' ) ); ?>