source: extensions/flickr2piwigo/include/ws_functions.inc.php @ 16085

Last change on this file since 16085 was 16085, checked in by mistic100, 12 years ago

add curl download, and display error if no download method (curl or allow_url_fopen) available

File size: 4.5 KB
RevLine 
[16071]1<?php
2if (!defined('FLICKR_PATH')) die('Hacking attempt!');
3
4function flickr_add_ws_method($arr)
5{
6  $service = &$arr[0];
7 
8  $service->addMethod(
9    'pwg.images.addFlickr',
10    'ws_images_addFlickr',
11    array(
12      'category' => array('default' => null),   
13      'id' => array('default' => null),
14      'fills' => array('default' =>null),
15      ),
16    'Used by Flickr2Piwigo, fills € (fill_name,fill_posted,fill_taken,fill_author,fill_tags)'
17    );
18}
19
20function ws_images_addFlickr($photo, &$service)
21{
22  if (!is_admin())
23  {
24    return new PwgError(403, 'Forbidden');
25  }
26 
27  global $conf;
28  $conf['flickr2piwigo'] = unserialize($conf['flickr2piwigo']);
29 
30  if ( empty($conf['flickr2piwigo']['api_key']) or empty($conf['flickr2piwigo']['secret_key']) )
31  {
32    return new PwgError(500, l10n('Please fill your API keys on the configuration tab'));
33  }
34 
35  include_once(PHPWG_ROOT_PATH . 'admin/include/functions.php');
36  include_once(PHPWG_ROOT_PATH . 'admin/include/functions_upload.inc.php');
37 
38  // init flickr API
39  include_once(FLICKR_PATH . 'include/phpFlickr/phpFlickr.php');
40  $flickr = new phpFlickr($conf['flickr2piwigo']['api_key'], $conf['flickr2piwigo']['secret_key']);
41  $flickr->enableCache('fs', FLICKR_FS_CACHE);
42 
43  // user
44  $u = $flickr->test_login();
45  if ( $u === false or empty($_SESSION['phpFlickr_auth_token']) )
46  {
47    return new PwgError(403, l10n('API not authenticated'));
48  }
49 
50  // photos infos
51  $photo_f = $flickr->photos_getInfo($photo['id']);
52  $photo = array_merge($photo, $photo_f['photo']);
53  $photo['url'] = $flickr->get_biggest_size($photo['id'], 'original');
54  $photo['path'] = FLICKR_FS_CACHE . 'flickr-'.$u['username'].'-'.$photo['id'].'.'.get_extension($photo['url']);
55 
56  // copy file
[16085]57  if (download_remote_file($photo['url'], $photo['path']) == false)
[16071]58  {
[16085]59    return new PwgError(500, l10n('No download method available'));
[16071]60  }
61 
62  // category
63  if (!preg_match('#^[0-9]+$#', $photo['category']))
64  {
65    $categories_names = explode(',', $photo['category']);
66   
67    $photo['category'] = array();
68    foreach ($categories_names as $category_name)
69    {
70      $query = '
71SELECT id FROM '.CATEGORIES_TABLE.'
72  WHERE LOWER(name) = "'.strtolower($category_name).'"
73;';
74      $result = pwg_query($query);
75     
76      if (pwg_db_num_rows($result))
77      {
78        list($cat_id) = pwg_db_fetch_row($result);
79        array_push($photo['category'], $cat_id);
80      }
81      else
82      {
83       
84        $cat = create_virtual_category($category_name);
85        array_push($photo['category'], $cat['id']);
86      }
87    }
88  }
89  else
90  {
91    $photo['category'] = array($photo['category']);
92  }
93 
94  // add photo
95  $photo['image_id'] = add_uploaded_file($photo['path'], basename($photo['path']), $photo['category']);
96 
97  // do some updates
98  if (!empty($photo['fills']))
99  {
100    $photo['fills'] = rtrim($photo['fills'], ',');
101    $photo['fills'] = explode(',', $photo['fills']);
102 
103    $updates = array();
104    if (in_array('fill_name', $photo['fills']))   $updates['name'] = $photo['title']; 
105    if (in_array('fill_posted', $photo['fills'])) $updates['date_available'] = date('Y-d-m H:i:s', $photo['dates']['posted']);
106    if (in_array('fill_taken', $photo['fills']))  $updates['date_creation'] = $photo['dates']['taken'];
107    if (in_array('fill_author', $photo['fills'])) $updates['author'] = $photo['owner']['username'];
108   
109    if (count($updates))
110    {
111      single_update(
112        IMAGES_TABLE,
113        $updates,
114        array('id' => $photo['image_id'])
115        );
116    }
117   
118    if ( !empty($photo['tags']['tag']) and in_array('fill_tags', $photo['fills']) )
119    {
120      $raw_tags = array_map(create_function('$t', 'return $t["_content"];'), $photo['tags']['tag']);
121      $raw_tags = implode(',', $raw_tags);
122      set_tags(get_tag_ids($raw_tags), $photo['image_id']);
123    }
124  }
125 
126  return sprintf(l10n('%s imported'), $photo['title']);
127}
128
[16085]129function download_remote_file($src, $dest)
130{
131  if (function_exists('curl_init'))
132  {
133    $newf = fopen($dest, "wb");
134    $ch = curl_init();
135   
136    curl_setopt($ch, CURLOPT_URL, $src);
137    curl_setopt($ch, CURLOPT_HEADER, 0);
138    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
139    curl_setopt($ch, CURLOPT_FILE, $newf);
140   
141    curl_exec($ch);
142    curl_close($ch);
143    fclose($newf);
144   
145    return true;
146  }
147  else if (ini_get('allow_url_fopen'))
148  {
149    $file = fopen($src, "rb");
150    $newf = fopen($dest, "wb");
151   
152    while (!feof($file))
153    {
154      fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
155    }
156   
157    fclose($file);
158    fclose($newf);
159   
160    return true;
161  }
162 
163  return false;
164}
165
166
[16071]167?>
Note: See TracBrowser for help on using the repository browser.