From 0d4231f0e31d529a97ad19dc3bdb4eb039f463a5 Mon Sep 17 00:00:00 2001 From: nicolasconnault Date: Fri, 31 Oct 2008 09:14:06 +0000 Subject: [PATCH] MDL-16341 Finished flickr plugin --- lang/en_utf8/portfolio_flickr.php | 1 + lib/flickrlib.php | 52 +++++++++++++++++++++++-------- portfolio/type/flickr/lib.php | 30 ++++++++++-------- 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/lang/en_utf8/portfolio_flickr.php b/lang/en_utf8/portfolio_flickr.php index a7e7b8568a..3bf5817219 100644 --- a/lang/en_utf8/portfolio_flickr.php +++ b/lang/en_utf8/portfolio_flickr.php @@ -19,4 +19,5 @@ $string['screenshot'] = 'Screenshots'; $string['other'] = 'Art, illustration, CGI, or other non-photographic images'; $string['hidefrompublicsearches'] = 'Hide these images from public searches?'; $string['set'] = 'Set'; +$string['uploadfailed'] = 'Failed to upload image(s) to flickr.com: $a'; ?> diff --git a/lib/flickrlib.php b/lib/flickrlib.php index f5bcc0729c..14473e3569 100755 --- a/lib/flickrlib.php +++ b/lib/flickrlib.php @@ -70,18 +70,39 @@ class phpFlickr { function request ($command, $args = array()) { - if ($command == 'upload') { - $filecontent = $args['photo']; - unset($args['photo']); - } - //Sends a request to Flickr's REST endpoint via POST. if (substr($command,0,7) != "flickr.") { $command = "flickr." . $command; } //Process arguments, including method and login data. - $args = array_merge(array("method" => $command, "format" => "php_serial", "api_key" => $this->api_key), $args); + if ($command == 'flickr.upload') { + $photo = $args['photo']; + if (empty($args['is_public'])) { + $args['is_public'] = 0; + } + if (empty($args['is_friend'])) { + $args['is_friend'] = 0; + } + if (empty($args['is_family'])) { + $args['is_family'] = 0; + } + if (empty($args['hidden'])) { + $args['hidden'] = 1; + } + $args = array("api_key" => $this->api_key, + "title" => $args['title'], + "description" => $args['description'], + "tags" => $args['tags'], + "is_public" => $args['is_public'], + "is_friend" => $args['is_friend'], + "is_family" => $args['is_family'], + "safety_level" => $args['safety_level'], + "content_type" => $args['content_type'], + "hidden" => $args['hidden']); + } else { + $args = array_merge(array("method" => $command, "format" => "php_serial", "api_key" => $this->api_key), $args); + } if (!empty($this->token)) { $args = array_merge($args, array("auth_token" => $this->token)); @@ -90,9 +111,7 @@ class phpFlickr { ksort($args); $auth_sig = ""; foreach ($args as $key => $data) { - if ($key != 'photo') { - $auth_sig .= $key . $data; - } + $auth_sig .= $key . $data; } if (!empty($this->secret)) { @@ -103,12 +122,19 @@ class phpFlickr { //$this->req->addHeader("Connection", "Keep-Alive"); if ($command != 'flickr.upload') { $ret = $this->curl->post($this->REST, $args); + $this->parsed_response = $this->clean_text_nodes(unserialize($ret)); } else { - $ret = $this->curl->post($this->Upload, $args); - print_object($ret);die(); + $args['photo'] = $photo; + $xml = simplexml_load_string($this->curl->post($this->Upload, $args)); + + if ($xml['stat'] == 'fail') { + $this->parsed_response = array('stat' => (string) $xml['stat'], 'code' => (int) $xml->err['code'], 'message' => (string) $xml->err['msg']); + } elseif ($xml['stat'] == 'ok') { + $this->parsed_response = array('stat' => (string) $xml['stat'], 'photoid' => (int) $xml->photoid); + $this->response = true; + } } - $this->parsed_response = $this->clean_text_nodes(unserialize($ret)); if ($this->parsed_response['stat'] == 'fail') { if ($this->die_on_error) die("The Flickr API returned the following error: #{$this->parsed_response['code']} - {$this->parsed_response['message']}"); else { @@ -201,7 +227,7 @@ class phpFlickr { return unserialize(file_get_contents('http://phpflickr.com/geodata/?format=php&lat=' . $lat . '&lon=' . $lon)); } - function auth ($perms = "read", $remember_uri = true) + function auth ($perms = "write", $remember_uri = true) { // Redirects to Flickr's authentication piece if there is no valid token. // If remember_uri is set to false, the callback script (included) will diff --git a/portfolio/type/flickr/lib.php b/portfolio/type/flickr/lib.php index 4e8e6e6aa6..dd64cae0f7 100755 --- a/portfolio/type/flickr/lib.php +++ b/portfolio/type/flickr/lib.php @@ -26,20 +26,24 @@ class portfolio_plugin_flickr extends portfolio_plugin_push_base { $filesize = $file->get_filesize(); if ($file->is_valid_image()) { - $return = $this->flickr->request ('upload', array('photo' => $file->get_content(), - 'title' => $this->get_export_config('title'), - 'description' => $this->get_export_config('description'), - 'tags' => $this->get_export_config('tags'), - 'is_public' => $this->get_export_config('is_public'), - 'is_friend' => $this->get_export_config('is_friend'), - 'is_family' => $this->get_export_config('is_family'))); - - // TODO if a set was requested, attach the photo to that set - if ($return && $this->get_export_config('set')) { - // + $return = $this->flickr->request ('upload', array('photo' => $file, + 'title' => $this->get_export_config('title'), + 'description' => $this->get_export_config('description'), + 'tags' => $this->get_export_config('tags'), + 'is_public' => $this->get_export_config('is_public'), + 'is_friend' => $this->get_export_config('is_friend'), + 'is_family' => $this->get_export_config('is_family'), + 'safety_level' => $this->get_export_config('safety_level'), + 'content_type' => $this->get_export_config('content_type'), + 'hidden' => $this->get_export_config('hidden'))); + if ($return) { + // Attach photo to a set if requested + if ($this->get_export_config('set')) { + $this->flickr->photosets_addPhoto($this->get_export_config('set'), $this->flickr->parsed_response['photoid']); + } + } else { + throw new portfolio_plugin_exception('uploadfailed', 'portfolio_flickr', $this->flickr->error_code . ': ' . $this->flickr->error_msg); } - // DEBUG!!! - var_dump($return);die(); } } } -- 2.39.5