Пример #1
0
 /**
  * Добавление фотографии.
  *
  * <h1>Примеры</h1>
  *
  * <h2>Простой пример загрузки фотографии</h2>
  * <code>
  * <?php
  * $photo = $api->createPhoto( array(
  *     'image' => $_SERVER['DOCUMENT_ROOT'] . '/assets/images/forest.jpg',
  *     'title' => 'Красивая фотография леса'
  * ) );
  * ?>
  * </code>
  *
  * <h2>Загрузка фотографии в определенный альбом</h2>
  * <code>
  * <?php
  * $photo = $api->createPhoto( array(
  *     'image' => $_SERVER['DOCUMENT_ROOT'] . '/assets/images/forest.jpg',
  *     'title' => 'Красивая фотография леса'
  * ), 123456 );
  * ?>
  * </code>
  *
  * <h2>Загрузка фотографии в с геопривязкой</h2>
  * <code>
  * <?php
  * $photo = $api->createPhoto( array(
  *     'image' => $_SERVER['DOCUMENT_ROOT'] . '/assets/images/forest.jpg',
  *     'title' => 'Красивая фотография леса',
  *     'geo'   => array(55.75396, 37.620393),
  *   //'geo'   => '55.75396 37.620393', // Можно задать и строкой
  * ) );
  * ?>
  * </code>
  *
  * <h2>Загрузка фотографии в с тегами</h2>
  * <code>
  * <?php
  * $photo = $api->createPhoto( array(
  *     'image' => $_SERVER['DOCUMENT_ROOT'] . '/assets/images/forest.jpg',
  *     'title' => 'Красивая фотография леса',
  *     'tags'  => array('Лес', 'Природа', 'Лето'),
  *   //'tags'  => 'Лес, Природа, Лето' // Можно задать и строкой
  * ) );
  * ?>
  * </code>
  *
  * <h2>Собираем все вместе</h2>
  * <code>
  * <?php
  * $photo = $api->createPhoto( array(
  *     'image'             => $_SERVER['DOCUMENT_ROOT'] . '/assets/images/forest.jpg',
  *     'title'             => 'Красивая фотография леса',
  *     'geo'               => array(55.75396, 37.620393),
  *     'tags'              => array('Лес', 'Природа', 'Лето'),
  *     'isAdult'           => false,     // Материал для взрослых
  *     'isDisableComments' => true,      // Указание на отключение комментариев
  *     'isHideOriginal'    => true,      // Указание на то, что нужно скрыть оригинал
  *     'access'            => 'private', // Может быть 'public', 'friends', 'private'
  * ) );
  * ?>
  * </code>
  *
  * @param array    $data         Данные фотографии
  *                               <ul>
  *                               <li> ['image']             <i><u>string</u></i>                       Путь до изображения <b>(Обязательный)</b></li>
  *                               <li> ['title']             <i><u>string</u></i>                       Название изображения <b>(Обязательный)</b></li>
  *                               <li> ['geo']               <i><u>string|string[]</u></i>              Координаты</li>
  *                               <li> ['tags']              <i><u>string|string[]</u></i>              Теги</li>
  *                               <li> ['isAdult']           <i><u>bool</u></i>                         Метриал для взрослых</li>
  *                               <li> ['isDisableComments'] <i><u>bool</u></i>                         Отключить комментарии</li>
  *                               <li> ['isHideOriginal']    <i><u>bool</u></i>                         Скрывать оригинал изображения</li>
  *                               <li> ['access']            <i><u>'public'|'friends'|'private'</u></i> Уровень доступа</li>
  *                               </ul>
  *
  * @param int|null $albumId      Id родительского альбома. Если null, то фото будет загружено в корень
  *
  * @return \Yandex\Fotki\Api\Photo Добавленная фотография
  * @throws \Yandex\Fotki\Exception\Api\Photo Если произошла ошибка во время загрузки фотографии
  */
 public function createPhoto($data, $albumId = null)
 {
     $url = $albumId ? sprintf("http://api-fotki.yandex.ru/api/users/%s/album/%s/photos/?format=json", $this->_login, intval($albumId)) : sprintf("http://api-fotki.yandex.ru/api/users/%s/photos/?format=json", $this->_login);
     $oAuthToken = $this->_transport->getOAuthToken();
     $fimpToken = $this->_transport->getFimpToken();
     $headers = array('Accept' => "application/json", 'Authorization' => $oAuthToken ? "OAuth {$oAuthToken}" : "FimpToken realm=\"fotki.yandex.ru\", token=\"{$fimpToken}\"");
     $response = Request::post($url, $headers, array('image' => File::add($data['image'])));
     if ($response->code === 201) {
         $responseBody = json_decode(json_encode($response->body), true);
         $photo = new Photo($this->_transport, $responseBody['links']['self']);
         $photo->initWithData($responseBody);
         //@formatter:off
         $photo->setTitle(isset($data['title']) ? $data['title'] : $photo->getTitle());
         $photo->setSummary(isset($data['summary']) ? $data['summary'] : $photo->getSummary());
         $photo->setIsAdult(isset($data['isAdult']) ? $data['isAdult'] : $photo->isAdult());
         $photo->setIsHideOriginal(isset($data['isHideOriginal']) ? $data['isHideOriginal'] : $photo->isHideOriginal());
         $photo->setIsDisableComments(isset($data['isDisableComments']) ? $data['isDisableComments'] : $photo->isDisableComments());
         $photo->setAccess(isset($data['access']) ? $data['access'] : $photo->getAccess());
         $photo->setGeo(isset($data['geo']) ? $data['geo'] : $photo->getGeo());
         $photo->setTags(isset($data['tags']) ? $data['tags'] : $photo->getTags());
         //@formatter:on
         return $this->updatePhoto($photo);
     } else {
         throw new \Yandex\Fotki\Exception\Api\Photo($response->body, $response->code);
     }
 }