Ignore:
Timestamp:
Jan 12, 2013, 3:13:08 PM (8 years ago)
Author:
mistic100
Message:
  • add webservices
  • add mail function
  • add admin list
  • add admin export function
  • try to deal with Gthumb+
  • activate multisize dropdown menu of collection page

TODO : use webservices instead of toggle_image.php

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/UserCollections/include/UserCollection.class.php

    r17519 r20090  
    1212   * @param: array images
    1313   */
    14   function __construct($col_id, $images=array(), $name=null, $active=false, $public=false)
     14  function __construct($col_id, $images=array(), $name=null, $active=false, $public=false, $user_id=null)
    1515  {
    1616    global $user;
     17   
     18    if (empty($user_id)) {
     19      $user_id = $user['id'];
     20    }
    1721   
    1822    $this->data = array(
    1923      'id' => 0,
    20       'user_id' => $user['id'],
     24      'user_id' => $user_id,
    2125      'name' => null,
    2226      'date_creation' => '0000-00-00 00:00:00',
     
    2832    $this->images = array();
    2933   
    30     // access from public id
     34    // access from public id (access permission is checked line 66)
    3135    if ( strlen($col_id) == 10 and strpos($col_id, 'uc') === 0 )
    3236    {
     
    8488        pwg_query($query);
    8589     
     90        // select images of the collection
    8691        $query = '
    8792SELECT image_id
     
    9196        $this->images = array_from_query($query, 'image_id');
    9297       
    93         if ($this->data['nb_images'] != count($this->images))
    94         {
    95           $this->updateParam('nb_images', count($this->images));
    96         }
     98        $this->updateParam('nb_images', count($this->images));
    9799      }
    98100      else
     
    130132      $this->data['id'] = pwg_db_insert_id();
    131133     
    132       $date = pwg_query('SELECT FROM_UNIXTIME(NOW());');
     134      $date = pwg_query('SELECT NOW();');
    133135      list($this->data['date_creation']) = pwg_db_fetch_row($date);
    134136     
     
    164166  function updateParam($name, $value)
    165167  {
    166     $this->data[$name] = $value;
    167     pwg_query('UPDATE '.COLLECTIONS_TABLE.' SET '.$name.' = "'.$value.'" WHERE id = '.$this->data['id'].';');
     168    if ($value != $this->data[$name])
     169    {
     170      $this->data[$name] = $value;
     171      pwg_query('UPDATE '.COLLECTIONS_TABLE.' SET '.$name.' = "'.pwg_db_real_escape_string($value).'" WHERE id = '.$this->data['id'].';');
     172    }
    168173  }
    169174 
     
    246251      );
    247252     
     253    $query = '
     254UPDATE '.COLLECTION_IMAGES_TABLE.'
     255  SET add_date = NOW()
     256  WHERE
     257    col_id = '.$this->data['id'].'
     258    AND image_id IN ('.implode(',', $image_ids).')
     259    AND add_date IS NULL
     260';
     261    pwg_query($query);
     262     
    248263    $this->updateParam('nb_images', count($this->images));
    249264  }
     
    291306      'ACTIVE' => (bool)$this->data['active'],
    292307      'PUBLIC' => (bool)$this->data['public'],
    293       'DATE_CREATION' => format_date($this->data['date_creation'], true),
     308      'DATE_CREATION' => $this->data['date_creation'],
    294309      'U_PUBLIC' => USER_COLLEC_PUBLIC . 'view/'.$this->data['public_id'],
    295310      'IS_TEMP' =>  $this->data['name'] == 'temp',
     
    298313    return $set;
    299314  }
     315 
     316  /**
     317   * Send the collection by email
     318   * @param: array
     319   *          - sender_name
     320   *          - sender_email
     321   *          - recipient_email
     322   *          - recipient_name
     323   *          - nb_images
     324   *          - message
     325   * @return: array errors
     326   */
     327  function sendEmail($comm, $key)
     328  {
     329    global $conf, $page, $template;
     330   
     331    $errors = array();
     332   
     333    $comm = array_map('stripslashes', $comm);
     334
     335    $comment_action='validate';
     336   
     337    // check key
     338    if (!verify_ephemeral_key(@$key))
     339    {
     340      array_push($errors, l10n('Invalid or expired security key'));
     341      $comment_action='reject';
     342    }
     343
     344    // check author
     345    if (empty($comm['sender_name']))
     346    {
     347      array_push($errors, l10n('Please enter your name'));
     348      $comment_action='reject';
     349    }     
     350    if (empty($comm['recipient_name']))
     351    {
     352      array_push($errors, l10n('Please enter the recipient name'));
     353      $comment_action='reject';
     354    }
     355   
     356    // check email
     357    if (empty($comm['sender_email']))
     358    {
     359      array_push($errors, l10n('Please enter your e-mail'));
     360      $comment_action='reject';
     361    }
     362    else if ( !empty($comm['sender_email']) and !uc_check_email_validity($comm['sender_email']) )
     363    {
     364      array_push($errors, l10n('mail address must be like xxx@yyy.eee (example : jack@altern.org)'));
     365      $comment_action='reject';
     366    }
     367    if (empty($comm['recipient_email']))
     368    {
     369      array_push($errors, l10n('Please enter the recipient e-mail'));
     370      $comment_action='reject';
     371    }
     372    else if ( !empty($comm['recipient_email']) and !uc_check_email_validity($comm['recipient_email']) )
     373    {
     374      array_push($errors, l10n('mail address must be like xxx@yyy.eee (example : jack@altern.org)'));
     375      $comment_action='reject';
     376    }
     377     
     378    // check content
     379    if (!empty($comm['message']))
     380    {
     381      $comm['message'] = nl2br($comm['message']);
     382    }
     383   
     384    include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
     385   
     386    if ($comment_action == 'validate')
     387    {
     388      // format subject
     389      $subject = '['.$conf['gallery_title'].'] '.sprintf(l10n('A photo collection by %s'), $comm['sender_name']);
     390      $subject = encode_mime_header($subject);
     391           
     392      // format expeditor
     393      $args['from'] = format_email($comm['sender_name'], $comm['sender_email']);
     394      $args['to'] = format_email($comm['recipient_name'], $comm['recipient_email']);
     395     
     396      // hearders
     397      $headers = 'From: '.$args['from']."\n"; 
     398      $headers.= 'MIME-Version: 1.0'."\n";
     399      $headers.= 'X-Mailer: Piwigo Mailer'."\n";
     400      $headers.= 'Content-Transfer-Encoding: 8bit'."\n";
     401      $headers.= 'Content-Type: text/html; charset="'.get_pwg_charset().'";'."\n";
     402           
     403      // mail content
     404      $content = $this->getMailContent($comm);
     405      $content = wordwrap($content, 70, "\n", true);
     406     
     407      // send mail
     408      $result =
     409        trigger_event('send_mail',
     410          false, /* Result */
     411          trigger_event('send_mail_to', $args['to']),
     412          trigger_event('send_mail_subject', $subject),
     413          trigger_event('send_mail_content', $content),
     414          trigger_event('send_mail_headers', $headers),
     415          $args
     416        );
     417     
     418      if ($result == false)
     419      {
     420        $_SESSION['page_errors'][] = l10n('Error while sending e-mail');
     421      }
     422      else
     423      {
     424        $_SESSION['page_infos'][] = l10n('E-mail sent successfully');
     425      }
     426     
     427      redirect();
     428    }
     429   
     430    return $errors;
     431  }
     432 
     433  /**
     434   * get mail content for sendMail()
     435   */
     436  function getMailContent($params)
     437  {
     438    global $user, $conf, $template;
     439   
     440    // switch to guest user
     441    $user_save = $user;
     442    $user = build_user($conf['guest_id'], true);
     443   
     444    // get pictures
     445    $query = '
     446SELECT
     447    id,
     448    file,
     449    name,
     450    path
     451  FROM '.IMAGES_TABLE.' AS i
     452    JOIN '.IMAGE_CATEGORY_TABLE.' AS ci ON ci.image_id = i.id
     453  WHERE id IN ('.implode(',', $this->images).')
     454    '.get_sql_condition_FandF(array(
     455                'forbidden_categories' => 'category_id',
     456                'forbidden_images' => 'id'
     457                ),
     458              'AND'
     459              ).'
     460  GROUP BY i.id
     461  ORDER BY '.DB_RANDOM_FUNCTION.'()
     462  LIMIT '.$params['nb_images'].'
     463;';
     464    $pictures = hash_from_query($query, 'id');
     465   
     466    // switch back to current user
     467    $user = $user_save;
     468    unset($user_save);
     469 
     470    // picture sinfos
     471    set_make_full_url();
     472    $tpl_vars = array();
     473    foreach ($pictures as $row)
     474    {
     475      $name = render_element_name($row);
     476     
     477      $tpl_vars[] = array(
     478        'TN_ALT' => htmlspecialchars(strip_tags($name)),
     479        'NAME' => $name,
     480        'URL' => make_picture_url(array('image_id' => $row['id'])),
     481        'THUMB' => DerivativeImage::url(IMG_SQUARE, $row),
     482        );
     483    }
     484   
     485    // template
     486    $mail_css = file_get_contents(dirname(__FILE__).'/../template/mail.css');
     487   
     488    $template->assign(array(
     489      'GALLERY_URL' => get_gallery_home_url(),
     490      'PHPWG_URL' => PHPWG_URL,
     491      'UC_MAIL_CSS' => str_replace("\n", null, $mail_css),
     492      'MAIL_TITLE' => $this->getParam('name').' ('.sprintf(l10n('by %s'), $params['sender_name']).')',
     493      'COL_URL' => USER_COLLEC_PUBLIC . 'view/'.$this->data['public_id'],
     494      'PARAMS' => $params,
     495      'derivative_params' => ImageStdParams::get_by_type(IMG_SQUARE),
     496      'thumbnails' => $tpl_vars,
     497      ));
     498     
     499    $template->set_filename('uc_mail', dirname(__FILE__).'/../template/mail.tpl');
     500    $content = $template->parse('uc_mail', true);
     501 
     502    unset_make_full_url();
     503   
     504    return $content;
     505  }
     506
     507  /**
     508   * generate a listing of the collection
     509   */
     510  function serialize($params)
     511  {     
     512    $content = null;
     513     
     514    // get images infos
     515    $query = '
     516SELECT
     517    id,
     518    file,
     519    name,
     520    path
     521  FROM '.IMAGES_TABLE.'
     522  WHERE id IN('.implode(',', $this->images).')
     523  ORDER BY id
     524;';
     525    $pictures = hash_from_query($query, 'id');
     526   
     527    if (count($pictures))
     528    {
     529      // generate csv
     530      set_make_full_url();
     531      $root_url = get_root_url();
     532     
     533      $fp = fopen('php://temp', 'r+');
     534      foreach ($pictures as $row)
     535      {
     536        $element = array();
     537        foreach ($params as $field)
     538        {
     539          switch ($field)
     540          {
     541          case 'id':
     542            $element[] = $row['id']; break;
     543          case 'file':
     544            $element[] = $row['file']; break;
     545          case 'name':
     546            $element[] = render_element_name($row); break;
     547          case 'url':
     548            $element[] = make_picture_url(array('image_id'=>$row['id'], 'image_file'=>$row['file'])); break;
     549          case 'path':
     550            $element[] = $root_url.ltrim($row['path'], './'); break;
     551          }
     552        }
     553        if (!empty($element))
     554        {
     555          fputcsv($fp, $element);
     556        }
     557      }
     558     
     559      rewind($fp);
     560      $content = stream_get_contents($fp);
     561      fclose($fp);
     562     
     563      unset_make_full_url();
     564    }
     565   
     566    return $content;
     567  }
    300568}
    301569
Note: See TracChangeset for help on using the changeset viewer.