Ejemplo n.º 1
0
 $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);
}
Ejemplo n.º 3
0
/**
 * 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;
}
Ejemplo n.º 4
0
/**
 * 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));
}
Ejemplo n.º 5
0
         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");
Ejemplo n.º 6
0
 $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