$start = get_moment(); $datas = array(); $tags_of = array(); foreach ($files as $id => $element_infos) { $data = $site_reader->get_element_metadata($element_infos); if (is_array($data)) { $data['date_metadata_update'] = CURRENT_DATE; $data['id'] = $id; $datas[] = $data; foreach (array('keywords', 'tags') as $key) { if (isset($data[$key])) { if (!isset($tags_of[$id])) { $tags_of[$id] = array(); } foreach (explode(',', $data[$key]) as $tag_name) { $tags_of[$id][] = tag_id_from_tag_name($tag_name); } } } } else { $errors[] = array('path' => $element_infos['path'], 'type' => 'PWG-ERROR-NO-FS'); } } if (!$simulate) { if (count($datas) > 0) { mass_updates(IMAGES_TABLE, array('primary' => array('id'), 'update' => array_unique(array_merge(array_diff($site_reader->get_metadata_attributes(), array('keywords', 'tags')), array('date_metadata_update')))), $datas, isset($_POST['meta_empty_overrides']) ? 0 : MASS_UPDATES_SKIP_EMPTY); } set_tags_of($tags_of); } $template->append('footer_elements', '<!-- metadata update : ' . get_elapsed_time($start, get_moment()) . ' -->'); $template->assign('metadata_result', array('NB_ELEMENTS_DONE' => count($datas), 'NB_ELEMENTS_CANDIDATES' => count($files), 'NB_ERRORS' => count($errors)));
/** * Sync all metadata of a list of images. * Metadata are fetched from original files and saved in database. * * @param int[] $ids */ function sync_metadata($ids) { global $conf; if (!defined('CURRENT_DATE')) { define('CURRENT_DATE', date('Y-m-d')); } $datas = array(); $tags_of = array(); $query = ' SELECT id, path, representative_ext FROM ' . IMAGES_TABLE . ' WHERE id IN ( ' . wordwrap(implode(', ', $ids), 160, "\n") . ' ) ;'; $result = pwg_query($query); while ($data = pwg_db_fetch_assoc($result)) { $data = get_sync_metadata($data); if ($data === false) { continue; } $id = $data['id']; foreach (array('keywords', 'tags') as $key) { if (isset($data[$key])) { if (!isset($tags_of[$id])) { $tags_of[$id] = array(); } foreach (explode(',', $data[$key]) as $tag_name) { $tags_of[$id][] = tag_id_from_tag_name($tag_name); } } } $data['date_metadata_update'] = CURRENT_DATE; $datas[] = $data; } if (count($datas) > 0) { $update_fields = get_sync_metadata_attributes(); $update_fields[] = 'date_metadata_update'; $update_fields = array_diff($update_fields, array('tags', 'keywords')); mass_updates(IMAGES_TABLE, array('primary' => array('id'), 'update' => $update_fields), $datas, MASS_UPDATES_SKIP_EMPTY); } set_tags_of($tags_of); }
/** * Get tags ids from a list of raw tags (existing tags or new tags). * * In $raw_tags we receive something like array('~~6~~', '~~59~~', 'New * tag', 'Another new tag') The ~~34~~ means that it is an existing * tag. We added the surrounding ~~ to permit creation of tags like "10" * or "1234" (numeric characters only) * * @param string|string[] $raw_tags - array or comma separated string * @param boolean $allow_create * @return int[] */ function get_tag_ids($raw_tags, $allow_create = true) { $tag_ids = array(); if (!is_array($raw_tags)) { $raw_tags = explode(',', $raw_tags); } foreach ($raw_tags as $raw_tag) { if (preg_match('/^~~(\\d+)~~$/', $raw_tag, $matches)) { $tag_ids[] = $matches[1]; } elseif ($allow_create) { // we have to create a new tag $tag_ids[] = tag_id_from_tag_name($raw_tag); } } return $tag_ids; }
/** * API method * Adds a image (simple way) * @param mixed[] $params * @option int[] category * @option string name (optional) * @option string author (optional) * @option string comment (optional) * @option int level * @option string|string[] tags * @option int image_id (optional) */ function ws_images_addSimple($params, $service) { global $conf; if (!isset($_FILES['image'])) { return new PwgError(405, 'The image (file) is missing'); } if ($params['image_id'] > 0) { $query = ' SELECT COUNT(*) FROM ' . IMAGES_TABLE . ' WHERE id = ' . $params['image_id'] . ' ;'; list($count) = pwg_db_fetch_row(pwg_query($query)); if ($count == 0) { return new PwgError(404, 'image_id not found'); } } include_once PHPWG_ROOT_PATH . 'admin/include/functions_upload.inc.php'; $image_id = add_uploaded_file($_FILES['image']['tmp_name'], $_FILES['image']['name'], $params['category'], 8, $params['image_id'] > 0 ? $params['image_id'] : null); $info_columns = array('name', 'author', 'comment', 'level', 'date_creation'); $update = array(); foreach ($info_columns as $key) { if (isset($params[$key])) { $update[$key] = $params[$key]; } } single_update(IMAGES_TABLE, $update, array('id' => $image_id)); if (isset($params['tags']) and !empty($params['tags'])) { include_once PHPWG_ROOT_PATH . 'admin/include/functions.php'; $tag_ids = array(); if (is_array($params['tags'])) { foreach ($params['tags'] as $tag_name) { $tag_ids[] = tag_id_from_tag_name($tag_name); } } else { $tag_names = preg_split('~(?<!\\\\),~', $params['tags']); foreach ($tag_names as $tag_name) { $tag_ids[] = tag_id_from_tag_name(preg_replace('#\\\\*,#', ',', $tag_name)); } } add_tags($tag_ids, array($image_id)); } $url_params = array('image_id' => $image_id); if (!empty($params['category'])) { $query = ' SELECT id, name, permalink FROM ' . CATEGORIES_TABLE . ' WHERE id = ' . $params['category'][0] . ' ;'; $result = pwg_query($query); $category = pwg_db_fetch_assoc($result); $url_params['section'] = 'categories'; $url_params['category'] = $category; } // update metadata from the uploaded file (exif/iptc), even if the sync // was already performed by add_uploaded_file(). require_once PHPWG_ROOT_PATH . 'admin/include/functions_metadata.php'; sync_metadata(array($image_id)); return array('image_id' => $image_id, 'url' => make_picture_url($url_params)); }
array_push($tag_names, $response['address']['county']); } if (isset($response['address']['state']) and $sync_options['osm_tag_address_state']) { array_push($tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'] . ":" . $response['address']['state'])); array_push($tag_names, $response['address']['state']); } if (isset($response['address']['country']) and $sync_options['osm_tag_address_country']) { array_push($tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'] . ":" . $response['address']['country'])); array_push($tag_names, $response['address']['country']); } if (isset($response['address']['postcode']) and $sync_options['osm_tag_address_postcode']) { array_push($tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'] . ":" . $response['address']['postcode'])); array_push($tag_names, $response['address']['postcode']); } if (isset($response['address']['country_code']) and $sync_options['osm_tag_address_country_code']) { array_push($tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'] . ":" . $response['address']['country_code'])); array_push($tag_names, $response['address']['country_code']); } //print_r($tag_ids); //print_r($tag_names); if (!empty($tag_ids) and !empty($tag_names)) { if (!$sync_options['simulate']) { add_tags($tag_ids, [$image['id']]); } $datas[] = $image['id']; $infos[] = "Set tags '" . osm_pprint_r($tag_names) . "' for " . $image['name']; } else { $warnings = "No valid tags for " . $image['name'] . " available tag: " . osm_pprint_r(array_keys($response['address'])); } } //die("Done one image");
$images = hash_from_query($query, 'id'); $datas = array(); $errors = array(); $warnings = array(); $infos = array(); foreach ($images as $image) { // Fech reverse location from API $condition = $forecast->getHistoricalConditions($image['latitude'], $image['longitude'], $image['date']); if (!isset($condition) or $condition === 'false') { $errors[] = "Error fetching weather condition data for " . $image['name']; } //print_r($condition); // If reponse include icon if (isset($condition) and isset($condition->icon) and !empty($condition->icon)) { if (!$sync_options['simulate']) { $id = tag_id_from_tag_name($sync_options['fc_tag_group'] . ":" . $condition->icon); add_tags([$id], [$image['id']]); } $infos[] = "Set tag '" . $condition->icon . "' for " . $image['name']; $datas[] = $image['id']; } else { $warnings[] = "No valid tags for " . $image['name']; } //die("Done one image"); } // Images loop // Send sync result to template $template->assign('sync_errors', $errors); $template->assign('sync_warnings', $warnings); $template->assign('sync_infos', $infos); // Send result to templates