diff options
Diffstat (limited to 'admin/update.php')
-rw-r--r-- | admin/update.php | 881 |
1 files changed, 369 insertions, 512 deletions
diff --git a/admin/update.php b/admin/update.php index e77dd2c72..ba4f823ac 100644 --- a/admin/update.php +++ b/admin/update.php @@ -25,15 +25,15 @@ // | USA. | // +-----------------------------------------------------------------------+ -include_once( PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php' ); +include_once( PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php'); //------------------------------------------------------------------- functions -function ordering( $id_uppercat ) +function ordering( $id_uppercat) { $rank = 1; $query = 'SELECT id'; $query.= ' FROM '.CATEGORIES_TABLE; - if ( !is_numeric( $id_uppercat ) ) + if ( !is_numeric( $id_uppercat)) { $query.= ' WHERE id_uppercat IS NULL'; } @@ -43,20 +43,20 @@ function ordering( $id_uppercat ) } $query.= ' ORDER BY rank ASC, dir ASC'; $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $result = mysql_query( $query); + while ( $row = mysql_fetch_array( $result)) { $query = 'UPDATE '.CATEGORIES_TABLE; $query.= ' SET rank = '.$rank; $query.= ' WHERE id = '.$row['id']; $query.= ';'; - mysql_query( $query ); + mysql_query( $query); $rank++; - ordering( $row['id'] ); + ordering( $row['id']); } } -function insert_local_category( $id_uppercat ) +function insert_local_category($id_uppercat) { global $conf, $page, $user, $lang; @@ -65,30 +65,32 @@ function insert_local_category( $id_uppercat ) // 0. retrieving informations on the category to display $cat_directory = PHPWG_ROOT_PATH.'galleries'; - if ( is_numeric( $id_uppercat ) ) + if (is_numeric($id_uppercat)) { $query = 'SELECT name,uppercats,dir FROM '.CATEGORIES_TABLE; $query.= ' WHERE id = '.$id_uppercat; $query.= ';'; - $row = mysql_fetch_array( mysql_query( $query ) ); + $row = mysql_fetch_array( mysql_query( $query)); $uppercats = $row['uppercats']; $name = $row['name']; $dir = $row['dir']; - $upper_array = explode( ',', $uppercats ); + $upper_array = explode( ',', $uppercats); $local_dir = ''; $database_dirs = array(); - $query = 'SELECT id,dir FROM '.CATEGORIES_TABLE; - $query.= ' WHERE id IN ('.$uppercats.')'; - $query.= ';'; - $result = mysql_query( $query ); - while( $row = mysql_fetch_array( $result ) ) + $query = ' +SELECT id,dir FROM '.CATEGORIES_TABLE.' + WHERE id IN ('.$uppercats.') +;'; + $result = mysql_query( $query); + while ($row = mysql_fetch_array($result)) { $database_dirs[$row['id']] = $row['dir']; } - foreach ( $upper_array as $id ) { + foreach ($upper_array as $id) + { $local_dir.= $database_dirs[$id].'/'; } @@ -102,51 +104,72 @@ function insert_local_category( $id_uppercat ) // 2. we search pictures of the category only if the update is for all // or a cat_id is specified - if ( isset( $page['cat'] ) or $_GET['update'] == 'all' ) + if (isset($page['cat']) or $_GET['update'] == 'all') { - $output.= insert_local_image( $cat_directory, $id_uppercat ); + $output.= insert_local_element($cat_directory, $id_uppercat); } } - $sub_dirs = get_category_directories( $cat_directory ); + $sub_dirs = get_category_directories($cat_directory); $sub_category_dirs = array(); - $query = 'SELECT id,dir FROM '.CATEGORIES_TABLE; - $query.= ' WHERE site_id = 1'; - if (!is_numeric($id_uppercat)) $query.= ' AND id_uppercat IS NULL'; - else $query.= ' AND id_uppercat = '.$id_uppercat; - $query.= ' AND dir IS NOT NULL'; // virtual categories not taken - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $query = ' +SELECT id,dir FROM '.CATEGORIES_TABLE.' + WHERE site_id = 1 +'; + if (!is_numeric($id_uppercat)) + { + $query.= ' AND id_uppercat IS NULL'; + } + else + { + $query.= ' AND id_uppercat = '.$id_uppercat; + } + $query.= ' + AND dir IS NOT NULL'; // virtual categories not taken + $query.= ' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) { $sub_category_dirs[$row['id']] = $row['dir']; } // 3. we have to remove the categories of the database not present anymore - foreach ( $sub_category_dirs as $id => $dir ) { - if ( !in_array( $dir, $sub_dirs ) ) delete_category( $id ); + foreach ($sub_category_dirs as $id => $dir) + { + if (!in_array($dir, $sub_dirs)) + { + delete_category($id); + } } // array of new categories to insert $inserts = array(); - foreach ( $sub_dirs as $sub_dir ) { + foreach ($sub_dirs as $sub_dir) + { // 5. Is the category already existing ? we create a subcat if not // existing - $category_id = array_search( $sub_dir, $sub_category_dirs ); - if ( !is_numeric( $category_id ) ) + $category_id = array_search($sub_dir, $sub_category_dirs); + if (!is_numeric($category_id)) { - if ( preg_match( '/^[a-zA-Z0-9-_.]+$/', $sub_dir ) ) + if (preg_match('/^[a-zA-Z0-9-_.]+$/', $sub_dir)) { - $name = str_replace( '_', ' ', $sub_dir ); + $name = str_replace('_', ' ', $sub_dir); $value = "('".$sub_dir."','".$name."',1"; - if ( !is_numeric( $id_uppercat ) ) $value.= ',NULL'; - else $value.= ','.$id_uppercat; + if (!is_numeric($id_uppercat)) + { + $value.= ',NULL'; + } + else + { + $value.= ','.$id_uppercat; + } $value.= ",'undef'"; $value.= ')'; - array_push( $inserts, $value ); + array_push($inserts, $value); } else { @@ -157,98 +180,149 @@ function insert_local_category( $id_uppercat ) } // we have to create the category - if ( count( $inserts ) > 0 ) + if (count($inserts) > 0) { - $query = 'INSERT INTO '.CATEGORIES_TABLE; - $query.= ' (dir,name,site_id,id_uppercat,uppercats) VALUES '; - $query.= implode( ',', $inserts ); - $query.= ';'; - mysql_query( $query ); + $query = ' +INSERT INTO '.CATEGORIES_TABLE.' + (dir,name,site_id,id_uppercat,uppercats) VALUES +'; + $query.= implode(',', $inserts); + $query.= ' +;'; + mysql_query($query); // updating uppercats field - $query = 'UPDATE '.CATEGORIES_TABLE; - $query.= ' SET uppercats = '; - if ( $uppercats != '' ) $query.= "CONCAT('".$uppercats."',',',id)"; - else $query.= 'id'; - $query.= ' WHERE id_uppercat '; - if (!is_numeric($id_uppercat)) $query.= 'IS NULL'; - else $query.= '= '.$id_uppercat; - $query.= ';'; - mysql_query( $query ); + $query = ' +UPDATE '.CATEGORIES_TABLE.' + SET uppercats = '; + if ($uppercats != '') + { + $query.= "CONCAT('".$uppercats."',',',id)"; + } + else + { + $query.= 'id'; + } + $query.= ' + WHERE id_uppercat '; + if (!is_numeric($id_uppercat)) + { + $query.= 'IS NULL'; + } + else + { + $query.= '= '.$id_uppercat; + } + $query.= ' +;'; + mysql_query($query); } // Recursive call on the sub-categories (not virtual ones) - $query = 'SELECT id'; - $query.= ' FROM '.CATEGORIES_TABLE; - $query.= ' WHERE site_id = 1'; - if (!is_numeric($id_uppercat)) $query.= ' AND id_uppercat IS NULL'; - else $query.= ' AND id_uppercat = '.$id_uppercat; - $query.= ' AND dir IS NOT NULL'; // virtual categories not taken - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $query = ' +SELECT id + FROM '.CATEGORIES_TABLE.' + WHERE site_id = 1 +'; + if (!is_numeric($id_uppercat)) + { + $query.= ' AND id_uppercat IS NULL'; + } + else { - $output.= insert_local_category( $row['id'] ); + $query.= ' AND id_uppercat = '.$id_uppercat; + } + $query.= ' + AND dir IS NOT NULL'; // virtual categories not taken + $query.= ' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) + { + $output.= insert_local_category($row['id']); } - if ( is_numeric( $id_uppercat ) ) + if (is_numeric($id_uppercat)) { $output.= '</ul>'; } return $output; } -function insert_local_image( $dir, $category_id ) +function insert_local_element($dir, $category_id) { - global $lang,$conf,$count_new; + global $lang,$conf,$count_new, $count_deleted; $output = ''; - // fs means filesystem : $fs_pictures contains pictures in the filesystem - // found in $dir, $fs_thumbnails contains thumbnails... - $fs_pictures = get_picture_files( $dir ); - $fs_thumbnails = get_thumb_files( $dir.'thumbnail' ); - - // we have to delete all the images from the database that : - // - are not in the directory anymore - // - don't have the associated thumbnail available anymore - $query = 'SELECT id,file,tn_ext'; - $query.= ' FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + // fs means FileSystem : $fs_files contains files in the filesystem found + // in $dir that can be managed by PhpWebGallery (see get_pwg_files + // function), $fs_thumbnails contains thumbnails, $fs_representatives + // contains potentially representative pictures for non picture files + $fs_files = get_pwg_files($dir); + $fs_thumbnails = get_thumb_files($dir); + $fs_representatives = get_representative_files($dir); + + // element deletion + $to_delete_elements = array(); + // deletion of element if the correspond file doesn't exist anymore + $query = ' +SELECT id,file + FROM '.IMAGES_TABLE.' + WHERE storage_category_id = '.$category_id.' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) { - $pic_to_delete = false; - if ( !in_array( $row['file'], $fs_pictures ) ) + if (!in_array($row['file'], $fs_files)) { $output.= $row['file']; $output.= ' <span style="font-weight:bold;">'; $output.= $lang['update_disappeared'].'</span><br />'; - $pic_to_delete = true; + array_push($to_delete_elements, $row['id']); } - + } + // in picture case, we also delete the element if the thumbnail doesn't + // existe anymore + $query = ' +SELECT id,file,tn_ext + FROM '.IMAGES_TABLE.' + WHERE storage_category_id = '.$category_id.' + AND ('.implode(' OR ', + array_map( + create_function('$s', 'return "file LIKE \'%".$s."\'";') + , $conf['picture_ext'])).') +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) + { $thumbnail = $conf['prefix_thumbnail']; - $thumbnail.= get_filename_wo_extension( $row['file'] ); + $thumbnail.= get_filename_wo_extension($row['file']); $thumbnail.= '.'.$row['tn_ext']; - if ( !in_array( $thumbnail, $fs_thumbnails ) ) + if (!in_array($thumbnail, $fs_thumbnails)) { $output.= $row['file']; $output.= ' : <span style="font-weight:bold;">'; $output.= $lang['update_disappeared_tn'].'</span><br />'; - $pic_to_delete = true; + array_push($to_delete_elements, $row['id']); } - - if ( $pic_to_delete ) delete_image( $row['id'] ); } - $registered_pictures = array(); - $query = 'SELECT file FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $to_delete_elements = array_unique($to_delete_elements); + $count_deleted+= count($to_delete_elements); + if ($count_deleted > 0) { - array_push( $registered_pictures, $row['file'] ); + delete_elements($to_delete_elements); + } + + $registered_elements = array(); + $query = ' +SELECT file FROM '.IMAGES_TABLE.' + WHERE storage_category_id = '.$category_id.' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) + { + array_push($registered_elements, $row['file']); } // validated pictures are picture uploaded by users, validated by an admin @@ -256,443 +330,243 @@ function insert_local_image( $dir, $category_id ) $validated_pictures = array(); $unvalidated_pictures = array(); - $query = 'SELECT file,infos,validated'; - $query.= ' FROM '.WAITING_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $query = ' +SELECT file,infos,validated + FROM '.WAITING_TABLE.' + WHERE storage_category_id = '.$category_id.' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) { - if ( $row['validated'] == 'true' ) + if ($row['validated'] == 'true') + { $validated_pictures[$row['file']] = $row['infos']; + } else - array_push( $unvalidated_pictures, $row['file'] ); + { + array_push($unvalidated_pictures, $row['file']); + } } // we only search among the picture present in the filesystem and not // present in the database yet. If we know that this picture is known as // an uploaded one but not validated, it's not tested neither - $unregistered_pictures = array_diff( $fs_pictures - ,$registered_pictures - ,$unvalidated_pictures ); + $unregistered_elements = array_diff($fs_files + ,$registered_elements + ,$unvalidated_pictures); $inserts = array(); - foreach ( $unregistered_pictures as $unregistered_picture ) { - if ( preg_match( '/^[a-zA-Z0-9-_.]+$/', $unregistered_picture ) ) + foreach ($unregistered_elements as $unregistered_element) + { + if (preg_match('/^[a-zA-Z0-9-_.]+$/', $unregistered_element)) { - $file_wo_ext = get_filename_wo_extension( $unregistered_picture ); + $file_wo_ext = get_filename_wo_extension($unregistered_element); $tn_ext = ''; - foreach ( $conf['picture_ext'] as $ext ) { + foreach ($conf['picture_ext'] as $ext) + { $test = $conf['prefix_thumbnail'].$file_wo_ext.'.'.$ext; - if ( !in_array( $test, $fs_thumbnails ) ) continue; - else { $tn_ext = $ext; break; } + if (!in_array($test, $fs_thumbnails)) + { + continue; + } + else + { + $tn_ext = $ext; + break; + } + } + + // 2 cases : the element is a picture or not. Indeed, for a picture + // thumbnail is mandatory and for non picture element, thumbnail and + // representative is optionnal + if (in_array(get_extension($unregistered_element), $conf['picture_ext'])) + { + // if we found a thumnbnail corresponding to our picture... + if ($tn_ext != '') + { + $image_size = @getimagesize($dir.$unregistered_element); + // (file, storage_category_id, date_available, tn_ext, filesize, + // width, height, name, author, comment, date_creation, + // representative_ext)' + $value = '('; + $value.= "'".$unregistered_element."'"; + $value.= ','.$category_id; + $value.= ",'".date('Y-m-d')."'"; + $value.= ",'".$tn_ext."'"; + $value.= ','.floor(filesize($dir.$unregistered_element) / 1024); + $value.= ','.$image_size[0]; + $value.= ','.$image_size[1]; + if (isset($validated_pictures[$unregistered_element])) + { + // retrieving infos from the XML description from waiting table + $infos = nl2br($validated_pictures[$unregistered_element]); + + $unixtime = getAttribute($infos, 'date_creation'); + if ($unixtime != '') + { + $date_creation ="'".date('Y-m-d',$unixtime)."'"; + } + else + { + $date_creation = 'NULL'; + } + + $value.= ",'".getAttribute($infos, 'name')."'"; + $value.= ",'".getAttribute($infos, 'author')."'"; + $value.= ",'".getAttribute($infos, 'comment')."'"; + $value.= ','.$date_creation; + + // deleting the waiting element + $query = ' +DELETE FROM '.WAITING_TABLE.' + WHERE file = \''.$unregistered_element.'\' + AND storage_category_id = '.$category_id.' +;'; + mysql_query($query); + } + else + { + $value.= ",'','','',NULL"; + } + $value.= ',NULL'; // representative_ext + $value.= ')'; + + $count_new++; + $output.= $unregistered_element; + $output.= ' <span style="font-weight:bold;">'; + $output.= $lang['update_research_added'].'</span>'; + $output.= ' ('.$lang['update_research_tn_ext'].' '.$tn_ext.')'; + $output.= '<br />'; + array_push($inserts, $value); + } + else + { + $output.= '<span style="color:red;">'; + $output.= $lang['update_missing_tn'].' : '.$unregistered_element; + $output.= ' (<span style="font-weight:bold;">'; + $output.= $conf['prefix_thumbnail']; + $output.= get_filename_wo_extension($unregistered_element); + $output.= '.XXX</span>'; + $output.= ', XXX = '; + $output.= implode(', ', $conf['picture_ext']); + $output.= ')</span><br />'; + } } - // if we found a thumnbnail corresponding to our picture... - if ( $tn_ext != '' ) + else { - $image_size = @getimagesize( $dir.$unregistered_picture ); + $representative_ext = ''; + foreach ($conf['picture_ext'] as $ext) + { + $test = $conf['prefix_thumbnail'].$file_wo_ext.'.'.$ext; + if (!in_array($test, $fs_thumbnails)) + { + continue; + } + else + { + $representative_ext = $ext; + break; + } + } + // (file, storage_category_id, date_available, tn_ext, filesize, - // width, height, name, author, comment, date_creation)' + // width, height, name, author, comment, date_creation, + // representative_ext)' $value = '('; - $value.= "'".$unregistered_picture."'"; + $value.= "'".$unregistered_element."'"; $value.= ','.$category_id; - $value.= ",'".date( 'Y-m-d' )."'"; - $value.= ",'".$tn_ext."'"; - $value.= ','.floor( filesize( $dir.$unregistered_picture) / 1024 ); - $value.= ','.$image_size[0]; - $value.= ','.$image_size[1]; - if ( isset( $validated_pictures[$unregistered_picture] ) ) + $value.= ",'".date('Y-m-d')."'"; + if ( $tn_ext != '' ) { - // retrieving infos from the XML description from waiting table - $infos = nl2br( $validated_pictures[$unregistered_picture] ); - - $unixtime = getAttribute( $infos, 'date_creation' ); - if ($unixtime != '') $date_creation ="'".date('Y-m-d',$unixtime)."'"; - else $date_creation = 'NULL'; - - $value.= ",'".getAttribute( $infos, 'name' )."'"; - $value.= ",'".getAttribute( $infos, 'author' )."'"; - $value.= ",'".getAttribute( $infos, 'comment')."'"; - $value.= ','.$date_creation; - - // deleting the waiting element - $query = 'DELETE FROM '.WAITING_TABLE; - $query.= " WHERE file = '".$unregistered_picture."'"; - $query.= ' AND storage_category_id = '.$category_id; - $query.= ';'; - mysql_query( $query ); + $value.= ",'".$tn_ext."'"; } else { - $value.= ",'','','',NULL"; + $value.= ',NULL'; + } + $value.= ','.floor(filesize($dir.$unregistered_element) / 1024); + $value.= ',NULL'; + $value.= ',NULL'; + $value.= ',NULL'; + $value.= ',NULL'; + $value.= ',NULL'; + $value.= ',NULL'; + if ( $representative_ext != '' ) + { + $value.= ",'".$representative_ext."'"; + } + else + { + $value.= ',NULL'; } $value.= ')'; - + $count_new++; - $output.= $unregistered_picture; + $output.= $unregistered_element; $output.= ' <span style="font-weight:bold;">'; $output.= $lang['update_research_added'].'</span>'; - $output.= ' ('.$lang['update_research_tn_ext'].' '.$tn_ext.')'; $output.= '<br />'; - array_push( $inserts, $value ); - } - else - { - $output.= '<span style="color:red;">'; - $output.= $lang['update_missing_tn'].' : '.$unregistered_picture; - $output.= ' (<span style="font-weight:bold;">'; - $output.= $conf['prefix_thumbnail']; - $output.= get_filename_wo_extension( $unregistered_picture ); - $output.= '.XXX</span>'; - $output.= ', XXX = '; - $output.= implode( ', ', $conf['picture_ext'] ); - $output.= ')</span><br />'; + array_push($inserts, $value); } } else { - $output.= '<span style="color:red;">"'.$unregistered_picture.'" : '; + $output.= '<span style="color:red;">"'.$unregistered_element.'" : '; $output.= $lang['update_wrong_dirname'].'</span><br />'; } } - - if ( count( $inserts ) > 0 ) - { - // inserts all found pictures - $query = 'INSERT INTO '.IMAGES_TABLE; - $query.= ' (file,storage_category_id,date_available,tn_ext'; - $query.= ',filesize,width,height'; - $query.= ',name,author,comment,date_creation)'; - $query.= ' VALUES '; - $query.= implode( ',', $inserts ); - $query.= ';'; - mysql_query( $query ); - - // what are the ids of the pictures in the $category_id ? - $ids = array(); - - $query = 'SELECT id'; - $query.= ' FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - array_push( $ids, $row['id'] ); - } - - // recreation of the links between this storage category pictures and - // its storage category - $query = 'DELETE FROM '.IMAGE_CATEGORY_TABLE; - $query.= ' WHERE category_id = '.$category_id; - $query.= ' AND image_id IN ('.implode( ',', $ids ).')'; - $query.= ';'; - mysql_query( $query ); - - $query = 'INSERT INTO '.IMAGE_CATEGORY_TABLE; - $query.= '(category_id,image_id) VALUES '; - foreach ( $ids as $num => $image_id ) { - if ( $num > 0 ) $query.= ','; - $query.= '('.$category_id.','.$image_id.')'; - } - $query.= ';'; - mysql_query( $query ); - } - return $output; -} - -// remote_images verifies if a file named "listing.xml" is present is the -// admin directory. If it is the case, creation of a remote picture storage -// site if it doesn't already exists. Then, the function calls -// insert_remote_category for this remote site on the root category. -function remote_images() -{ - global $conf, $lang, $vtp, $sub; - - // 1. is there a file listing.xml ? - if ( !( $xml_content = getXmlCode( './admin/listing.xml' ) ) ) - { - return false; - } - $url = getContent( getChild( $xml_content, 'url' ) ); - $vtp->setVar( $sub, 'remote_update.url', $url ); - - // 2. is the site already existing ? - $query = 'SELECT id FROM '.SITES_TABLE; - $query.= " WHERE galleries_url = '".$url."'"; - $query.= ';'; - $result = mysql_query( $query ); - if ( mysql_num_rows($result ) == 0 ) - { - // we have to register this site in the database - $query = 'INSERT INTO '.SITES_TABLE; - $query.= " (galleries_url) VALUES ('".$url."')"; - $query.= ';'; - mysql_query( $query ); - $site_id = mysql_insert_id(); - } - else - { - // we get the already registered id - $row = mysql_fetch_array( $result ); - $site_id = $row['id']; - } - - // 3. available dirs in the file - $categories = insert_remote_category( $xml_content, $site_id, 'NULL', 0 ); - $vtp->setVar( $sub, 'remote_update.categories', $categories ); -} - -// insert_remote_category searchs the "dir" node of the xml_dir given and -// insert the contained categories if the are not in the database yet. The -// function also deletes the categories that are in the database and not in -// the xml_file. -function insert_remote_category( $xml_content, $site_id, $id_uppercat, $level ) -{ - global $conf, $page, $user, $lang; - - $uppercats = ''; - $output = ''; - // 0. retrieving informations on the category to display - $cat_directory = '../galleries'; - - if ( is_numeric( $id_uppercat ) ) - { - $query = 'SELECT name,uppercats,dir'; - $query.= ' FROM '.CATEGORIES_TABLE; - $query.= ' WHERE id = '.$id_uppercat; - $query.= ';'; - $row = mysql_fetch_array( mysql_query( $query ) ); - $uppercats = $row['uppercats']; - $name = $row['name']; - - // 1. display the category name to update - $src = './template/'.$user['template'].'/admin/images/puce.gif'; - $output = '<img src="'.$src.'" alt=">" />'; - $output.= '<span style="font-weight:bold;">'.$name.'</span>'; - $output.= ' [ '.$row['dir'].' ]'; - $output.= '<div class="retrait">'; - - // 2. we search pictures of the category only if the update is for all - // or a cat_id is specified - $output.= insert_remote_image( $xml_content, $id_uppercat ); - } - - // $xml_dirs contains dir names contained in the xml file for this - // id_uppercat - $xml_dirs = array(); - $temp_dirs = getChildren( $xml_content, 'dir'.$level ); - foreach ( $temp_dirs as $temp_dir ) { - array_push( $xml_dirs, getAttribute( $temp_dir, 'name' ) ); - } - - // $database_dirs contains dir names contained in the database for this - // id_uppercat and site_id - $database_dirs = array(); - $query = 'SELECT id,dir FROM '.CATEGORIES_TABLE; - $query.= ' WHERE site_id = '.$site_id; - if (!is_numeric($id_uppercat)) $query.= ' AND id_uppercat IS NULL'; - else $query.= ' AND id_uppercat = '.$id_uppercat; - $query.= ' AND dir IS NOT NULL'; // virtual categories not taken - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - $database_dirs[$row['id']] = $row['dir']; - } - - // 3. we have to remove the categories of the database not present anymore - foreach ( $database_dirs as $id => $dir ) { - if ( !in_array( $dir, $xml_dirs ) ) delete_category( $id ); - } - - // array of new categories to insert - $inserts = array(); - - foreach ( $xml_dirs as $xml_dir ) { - // 5. Is the category already existing ? we create a subcat if not - // existing - $category_id = array_search( $xml_dir, $database_dirs ); - if ( !is_numeric( $category_id ) ) - { - $name = str_replace( '_', ' ', $xml_dir ); - - $value = "('".$xml_dir."','".$name."',".$site_id; - if ( !is_numeric( $id_uppercat ) ) $value.= ',NULL'; - else $value.= ','.$id_uppercat; - $value.= ",'undef'"; - $value.= ')'; - array_push( $inserts, $value ); - } - } - - // we have to create the category - if ( count( $inserts ) > 0 ) - { - $query = 'INSERT INTO '.CATEGORIES_TABLE; - $query.= ' (dir,name,site_id,id_uppercat,uppercats) VALUES '; - $query.= implode( ',', $inserts ); - $query.= ';'; - mysql_query( $query ); - // updating uppercats field - $query = 'UPDATE '.CATEGORIES_TABLE; - $query.= ' SET uppercats = '; - if ( $uppercats != '' ) $query.= "CONCAT('".$uppercats."',',',id)"; - else $query.= 'id'; - $query.= ' WHERE id_uppercat '; - if (!is_numeric($id_uppercat)) $query.= 'IS NULL'; - else $query.= '= '.$id_uppercat; - $query.= ';'; - mysql_query( $query ); - } - - // Recursive call on the sub-categories (not virtual ones) - $query = 'SELECT id,dir'; - $query.= ' FROM '.CATEGORIES_TABLE; - $query.= ' WHERE site_id = '.$site_id; - if (!is_numeric($id_uppercat)) $query.= ' AND id_uppercat IS NULL'; - else $query.= ' AND id_uppercat = '.$id_uppercat; - $query.= ' AND dir IS NOT NULL'; // virtual categories not taken - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - $database_dirs[$row['dir']] = $row['id']; - } - foreach ( $temp_dirs as $temp_dir ) { - $dir = getAttribute( $temp_dir, 'name' ); - $id_uppercat = $database_dirs[$dir]; - $output.= insert_remote_category( $temp_dir, $site_id, - $id_uppercat,$level+1 ); - } - - if ( is_numeric( $id_uppercat ) ) $output.= '</div>'; - - return $output; -} - -// insert_remote_image searchs the "root" node of the xml_dir given and -// insert the contained pictures if the are not in the database yet. -function insert_remote_image( $xml_dir, $category_id ) -{ - global $count_new,$lang; - - $output = ''; - $root = getChild( $xml_dir, 'root' ); - - $fs_pictures = array(); - $xml_pictures = getChildren( $root, 'picture' ); - foreach ( $xml_pictures as $xml_picture ) { - array_push( $fs_pictures, getAttribute( $xml_picture, 'file' ) ); - } - // we have to delete all the images from the database that are not in the - // directory anymore (not in the XML anymore) - $query = 'SELECT id,file FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - if ( !in_array( $row['file'], $fs_pictures ) ) - { - $output.= $row['file']; - $output.= ' <span style="font-weight:bold;">'; - $output.= $lang['update_disappeared'].'</span><br />'; - delete_image( $row['id'] ); - } - } - - $database_pictures = array(); - $query = 'SELECT file FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) - { - array_push( $database_pictures, $row['file'] ); - } - - $inserts = array(); - $xml_pictures = getChildren( $root, 'picture' ); - foreach ( $xml_pictures as $xml_picture ) { - // <picture file="albatros.jpg" tn_ext="png" filesize="35" width="640" - // height="480" /> - $file = getAttribute( $xml_picture, 'file' ); - - // is the picture already existing in the database ? - if ( !in_array( $file, $database_pictures ) ) - { - $tn_ext = getAttribute( $xml_picture, 'tn_ext' ); - // (file, storage_category_id, date_available, tn_ext, filesize, - // width, height) - $value = '('; - $value.= "'".$file."'"; - $value.= ','.$category_id; - $value.= ",'".date( 'Y-m-d' )."'"; - $value.= ",'".$tn_ext."'"; - $value.= ','.getAttribute( $xml_picture, 'filesize' ); - $value.= ','.getAttribute( $xml_picture, 'width' ); - $value.= ','.getAttribute( $xml_picture, 'height' ); - $value.= ')'; - - $count_new++; - $output.= $file; - $output.= ' <span style="font-weight:bold;">'; - $output.= $lang['update_research_added'].'</span>'; - $output.= ' ('.$lang['update_research_tn_ext'].' '.$tn_ext.')'; - $output.= '<br />'; - array_push( $inserts, $value ); - } - } - - if ( count( $inserts ) > 0 ) + if (count($inserts) > 0) { // inserts all found pictures - $query = 'INSERT INTO '.IMAGES_TABLE; - $query.= ' (file,storage_category_id,date_available,tn_ext'; - $query.= ',filesize,width,height)'; - $query.= ' VALUES '; - $query.= implode( ',', $inserts ); - $query.= ';'; - mysql_query( $query ); + $query = ' +INSERT INTO '.IMAGES_TABLE.' + (file,storage_category_id,date_available,tn_ext,filesize,width,height + ,name,author,comment,date_creation,representative_ext) + VALUES + '.implode(',', $inserts).' +;'; + mysql_query($query); // what are the ids of the pictures in the $category_id ? $ids = array(); - $query = 'SELECT id FROM '.IMAGES_TABLE; - $query.= ' WHERE storage_category_id = '.$category_id; - $query.= ';'; - $result = mysql_query( $query ); - while ( $row = mysql_fetch_array( $result ) ) + $query = ' +SELECT id + FROM '.IMAGES_TABLE.' + WHERE storage_category_id = '.$category_id.' +;'; + $result = mysql_query($query); + while ($row = mysql_fetch_array($result)) { - array_push( $ids, $row['id'] ); + array_push($ids, $row['id']); } // recreation of the links between this storage category pictures and // its storage category - $query = 'DELETE FROM '.IMAGE_CATEGORY_TABLE; - $query.= ' WHERE category_id = '.$category_id; - $query.= ' AND image_id IN ('.implode( ',', $ids ).')'; - $query.= ';'; - mysql_query( $query ); - - $query = 'INSERT INTO '.IMAGE_CATEGORY_TABLE; - $query.= '(category_id,image_id) VALUES '; - foreach ( $ids as $num => $image_id ) { - if ( $num > 0 ) $query.= ','; - $query.= '('.$category_id.','.$image_id.')'; + $query = ' +DELETE FROM '.IMAGE_CATEGORY_TABLE.' + WHERE category_id = '.$category_id.' + AND image_id IN ('.implode(',', $ids).') +;'; + mysql_query($query); + + foreach ($ids as $num => $image_id) + { + $ids[$num] = '('.$category_id.','.$image_id.')'; } - $query.= ';'; - mysql_query( $query ); + $query = ' +INSERT INTO '.IMAGE_CATEGORY_TABLE.' + (category_id,image_id) VALUES + '.implode(',', $ids).' +;'; + mysql_query($query); } - return $output; } - //----------------------------------------------------- template initialization -$template->set_filenames( array('update'=>'admin/update.tpl') ); +$template->set_filenames(array('update'=>'admin/update.tpl')); $template->assign_vars(array( 'L_UPDATE_TITLE'=>$lang['update_default_title'], @@ -702,67 +576,50 @@ $template->assign_vars(array( 'L_NEW_CATEGORY'=>$lang['update_research_conclusion'], 'L_DEL_CATEGORY'=>$lang['update_deletion_conclusion'], - 'U_CAT_UPDATE'=>add_session_id( PHPWG_ROOT_PATH.'admin.php?page=update&update=cats' ), - 'U_ALL_UPDATE'=>add_session_id( PHPWG_ROOT_PATH.'admin.php?page=update&update=all' ) - )); + 'U_CAT_UPDATE'=>add_session_id(PHPWG_ROOT_PATH.'admin.php?page=update&update=cats'), + 'U_ALL_UPDATE'=>add_session_id(PHPWG_ROOT_PATH.'admin.php?page=update&update=all') + )); //-------------------------------------------- introduction : choices of update // Display choice if "update" var is not specified -if (!isset( $_GET['update'] )) +if (!isset($_GET['update'])) { $template->assign_block_vars('introduction',array()); } //-------------------------------------------------- local update : ./galleries else { - check_cat_id( $_GET['update'] ); + check_cat_id($_GET['update']); $start = get_moment(); $count_new = 0; $count_deleted = 0; - if ( isset( $page['cat'] ) ) + if (isset($page['cat'])) { - $categories = insert_local_category( $page['cat'] ); + $categories = insert_local_category($page['cat']); } else { - $categories = insert_local_category( 'NULL' ); + $categories = insert_local_category('NULL'); } $end = get_moment(); - //echo get_elapsed_time( $start, $end ).' for update <br />'; + //echo get_elapsed_time($start, $end).' for update <br />'; $template->assign_block_vars('update',array( 'CATEGORIES'=>$categories, 'NEW_CAT'=>$count_new, 'DEL_CAT'=>$count_deleted - )); -} -//------------------------------------------------- remote update : listing.xml -if ( @is_file( './admin/listing.xml' ) ) -{ - $count_new = 0; - $count_deleted = 0; - $vtp->addSession( $sub, 'remote_update' ); - - $start = get_moment(); - remote_images(); - $end = get_moment(); - echo get_elapsed_time( $start, $end ).' for remote_images<br />'; - - $vtp->setVar( $sub, 'remote_update.count_new', $count_new ); - $vtp->setVar( $sub, 'remote_update.count_deleted', $count_deleted ); - - $vtp->closeSession( $sub, 'remote_update' ); + )); } //---------------------------------------- update informations about categories -if ( isset( $_GET['update'] ) - or isset( $page['cat'] ) - or @is_file( './listing.xml' ) && DEBUG) +if (isset($_GET['update']) + or isset($page['cat']) + or @is_file('./listing.xml') && DEBUG) { $start = get_moment(); - update_category( 'all' ); + update_category('all'); ordering('NULL'); $end = get_moment(); - echo get_elapsed_time( $start, $end ).' for update_category( all )<br />'; + echo get_elapsed_time($start, $end).' for update_category(all)<br />'; } //----------------------------------------------------------- sending html code $template->assign_var_from_handle('ADMIN_CONTENT', 'update'); |