Changeset 17671


Ignore:
Timestamp:
08/30/12 18:02:48 (7 years ago)
Author:
plg
Message:

new feature: ability to select the property to update (title, description, author, tags)

new feature: ability to select the separator (tab, space, comma, semicolon)

Location:
extensions/properties_mass_update
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • extensions/properties_mass_update/admin_update.php

    r15389 r17671  
    3131 
    3232// +-----------------------------------------------------------------------+ 
    33 // | Check Access and exit when user status is not ok                      | 
     33// | Checks                                                                | 
    3434// +-----------------------------------------------------------------------+ 
    3535 
    3636check_status(ACCESS_ADMINISTRATOR); 
    3737 
     38$regex_for_separator = array( 
     39  'tab' => '/^([^\t]+)\t+(.*)$/', 
     40  'space' => '/^([^\s]+)\s+(.*)$/', 
     41  'comma' => '/^([^,]+),+(.*)$/', 
     42  'semicolon' => '/^([^;]+);+(.*)$/', 
     43  ); 
     44 
     45if (isset($_POST['submit'])) 
     46{ 
     47  if (!in_array($_POST['separator'], array_keys($regex_for_separator))) 
     48  { 
     49    die('Hacking attempt!'); 
     50  } 
     51 
     52  if (!in_array($_POST['property'], array('name', 'comment', 'author', 'tags'))) 
     53  { 
     54    die('Hacking attempt!'); 
     55  } 
     56} 
     57 
    3858// +-----------------------------------------------------------------------+ 
    39 // |                                actions                                | 
     59// | Actions                                                               | 
    4060// +-----------------------------------------------------------------------+ 
    4161 
     
    6080      $raw_lines = explode("\n", $raw); 
    6181       
    62       $query = 'SELECT file FROM '.IMAGES_TABLE.';'; 
     82      $query = 'SELECT id, file FROM '.IMAGES_TABLE.';'; 
    6383      $existing_files = hash_from_query($query, 'file'); 
    6484             
     
    6686      $update_files = array(); 
    6787      $missing_files = array(); 
     88      $tags_of = array(); 
    6889       
    6990      foreach ($raw_lines as $raw_line) 
    7091      { 
    71         if (!preg_match('/^([^\t]+)\t+(.*)$/', $raw_line, $matches)) 
     92        if (!preg_match($regex_for_separator[$_POST['separator']], $raw_line, $matches)) 
    7293        { 
    7394          continue; 
     
    81102 
    82103        if (isset($existing_files[$matches[1]])) 
    83         {         
     104        { 
    84105          $update_files[$matches[1]] = true; 
     106          $image_id = $existing_files[$matches[1]]['id']; 
     107 
     108          if ('tags' == $_POST['property']) 
     109          { 
     110            $tags_of[$image_id] = array(); 
     111            $raw_tags = explode(',', $matches[2]); 
     112            foreach ($raw_tags as $tag) 
     113            { 
     114              $tag = trim($tag); 
     115              if (empty($tag)) 
     116              { 
     117                continue; 
     118              } 
     119              $tag_id = tag_id_from_tag_name($tag); 
     120              array_push($tags_of[$image_id], $tag_id); 
     121            } 
     122          } 
     123          else 
     124          { 
     125            array_push( 
     126              $updates, 
     127              array( 
     128                'id' => $image_id, 
     129                $_POST['property'] => pwg_db_real_escape_string($matches[2]), // TODO right trim 
     130                ) 
     131              ); 
     132          } 
    85133        } 
    86134        else 
    87135        { 
    88136          $missing_files[$matches[1]] = true; 
    89           continue; 
    90137        } 
    91          
    92         array_push( 
    93           $updates, 
     138      } 
     139       
     140      if ('tags' == $_POST['property']) 
     141      { 
     142        set_tags_of($tags_of); 
     143      } 
     144      else 
     145      { 
     146        mass_updates( 
     147          IMAGES_TABLE, 
    94148          array( 
    95             'file' => pwg_db_real_escape_string($matches[1]), 
    96             'comment' => pwg_db_real_escape_string($matches[2]), // TODO right trim 
    97             ) 
     149            'primary' => array('id'), 
     150            'update' => array($_POST['property']), 
     151            ), 
     152          $updates 
    98153          ); 
    99154      } 
    100        
    101       mass_updates( 
    102         IMAGES_TABLE, 
    103           array( 
    104             'primary' => array('file'), 
    105             'update' => array('comment'), 
    106           ), 
    107           $updates 
    108         ); 
    109155 
    110156      $endtime = get_moment(); 
     
    115161        sprintf( 
    116162          l10n('%d photos updated'), 
    117           count($updates) 
     163          count(array_keys($update_files)) 
    118164          ) 
    119165        ); 
     
    134180  else 
    135181  { 
    136     array_push($page['errors'], $_FILES['mascarille_update']['error']); 
     182    array_push($page['errors'], $_FILES['update']['error']); 
    137183  } 
    138184} 
  • extensions/properties_mass_update/admin_update.tpl

    r15389 r17671  
    1111  </p> 
    1212<input type="file" name="update"> 
     13</fieldset> 
     14 
     15<fieldset> 
     16  <legend>{'Options'|@translate}</legend> 
     17 
     18  <p style="margin:0 0 15px 0;"> 
     19    <strong>{'Separator'|@translate}</strong> 
     20    <br> 
     21    <select name="separator"> 
     22      <option value="tab">{'tab'|@translate}</option> 
     23      <option value="space">{'space'|@translate}</option> 
     24      <option value="comma">, ({'comma'|@translate})</option> 
     25      <option value="semicolon">; ({'semicolon'|@translate})</option> 
     26    </select> 
     27  </p> 
     28 
     29  <p style="margin:0;"> 
     30    <strong>{'Property to update'|@translate}</strong> 
     31    <br> 
     32    <select name="property"> 
     33      <option value="name">{'Title'|@translate}</option> 
     34      <option value="comment">{'Description'|@translate}</option> 
     35      <option value="author">{'Author'|@translate}</option> 
     36      <option value="tags">{'Tags'|@translate} {'(comma separated)'|@translate}</option> 
     37    </select> 
     38  </p> 
     39 
     40</fieldset> 
     41 
    1342<p style="text-align:left"> 
    1443<input class="submit" type="submit" name="validate" value="{'Submit'|@translate}"> 
    1544</p> 
    16 </fieldset> 
    1745</form> 
  • extensions/properties_mass_update/language/en_UK/plugin.lang.php

    r15389 r17671  
    99$lang['Wrong file, please select a plain text file'] = 'Wrong file, please select a plain text file'; 
    1010$lang['Update'] = 'Update'; 
     11$lang['tab'] = 'tabulation'; 
     12$lang['space'] = 'space'; 
     13$lang['comma'] = 'comma'; 
     14$lang['semicolon'] = 'semicolon'; 
     15$lang['(comma separated)'] = '(comma separated)'; 
    1116?> 
  • extensions/properties_mass_update/language/fr_FR/plugin.lang.php

    r15508 r17671  
    2121// | USA.                                                                  | 
    2222// +-----------------------------------------------------------------------+ 
     23 
    2324$lang['%d photos are missing in Piwigo: %s'] = '%d photos sont manquantes dans Piwigo : %s'; 
    2425$lang['%d photos updated'] = '%d photos mises à jour'; 
     
    3031$lang['Update'] = 'Mettre à jour'; 
    3132$lang['Wrong file, please select a plain text file'] = 'Mauvais type de fichier, veuillez sélectionner un fichier texte'; 
     33$lang['tab'] = 'tabulation'; 
     34$lang['space'] = 'espace'; 
     35$lang['comma'] = 'virgule'; 
     36$lang['semicolon'] = 'point virgule'; 
     37$lang['(comma separated)'] = '(séparés par des virgules)'; 
    3238?> 
Note: See TracChangeset for help on using the changeset viewer.