/** * 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); }
$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))); } // +-----------------------------------------------------------------------+ // | template initialization | // +-----------------------------------------------------------------------+ $template->set_filenames(array('update' => 'site_update.tpl')); $result_title = ''; if (isset($simulate) and $simulate) { $result_title .= '[' . l10n('Simulation') . '] '; } // used_metadata string is displayed to inform admin which metadata will be // used from files for synchronization $used_metadata = implode(', ', $site_reader->get_metadata_attributes());
/** * Set tags to an image. * Warning: given tags are all tags associated to the image, not additionnal tags. * * @param int[] $tags * @param int $image_id */ function set_tags($tags, $image_id) { set_tags_of(array($image_id => $tags)); }