Version 1
[yaffs-website] / vendor / php-instagram-api / php-instagram-api / Instagram / CurrentUser.php
diff --git a/vendor/php-instagram-api/php-instagram-api/Instagram/CurrentUser.php b/vendor/php-instagram-api/php-instagram-api/Instagram/CurrentUser.php
new file mode 100644 (file)
index 0000000..18a3173
--- /dev/null
@@ -0,0 +1,415 @@
+<?php
+
+/**
+* Instagram PHP
+* @author Galen Grover <galenjr@gmail.com>
+* @license http://opensource.org/licenses/mit-license.php The MIT License
+*/
+
+namespace Instagram;
+
+use \Instagram\Collection\MediaCollection;
+use \Instagram\Collection\LikedMediaCollection;
+use \Instagram\Collection\UserCollection;
+
+/**
+ * Current User
+ *
+ * Holds the currently logged in user
+ *
+ * @see \Instagram\Instagram->getCurrentUser()
+ * {@link https://github.com/galen/PHP-Instagram-API/blob/master/Examples/current_user.php}
+ * {@link http://galengrover.com/projects/instagram/?example=current_user.php}
+ */
+class CurrentUser extends \Instagram\User {
+
+    /**
+     * Holds relationship info for the current user
+     *
+     * @access protected
+     * @var array
+     */
+    protected $relationships = array();
+
+    /**
+     * Holds liked info for the current user
+     *
+     * Current user likes are stored in media objects
+     * If a media is liked after a media has been fetched the like will not be a part of the media object
+     *
+     * @access protected
+     * @var array
+     */
+    protected $liked = array();
+
+    /**
+     * Holds unliked info for the current user
+     *
+     * @access protected
+     * @var array
+     */
+    protected $unliked = array();
+
+    /**
+     * Get the API ID
+     *
+     * @return string Returns "self"
+     * @access public
+     */
+    public function getApiId() {
+        return 'self';
+    }
+
+    /**
+     * Does the current use like a media
+     *
+     * @param \Instagram\Media $media Media to query for a like from the current user
+     * @access public
+     */
+    public function likes( \Instagram\Media $media ) {
+        return
+            isset( $this->liked[$media->getId()] ) ||
+            (
+                isset( $media->getData()->user_has_liked ) &&
+                (bool)$media->getData()->user_has_liked === true &&
+                !isset( $this->unliked[$media->getId()] )
+            );
+    }
+
+    /**
+     * Add like from current user
+     *
+     * @param \Instagram\Media|string $media Media to add a like to from the current user
+     * @access public
+     */
+    public function addLike( $media ) {
+        if ( $media instanceof \Instagram\Media ) {
+            $media = $media->getId();
+        }
+        $this->proxy->like( $media );
+        unset( $this->unliked[$media] );
+        $this->liked[$media] = true;
+    }
+
+    /**
+     * Delete like from current user
+     *
+     * @param \Instagram\Media|string $media Media to delete a like to from the current user
+     * @access public
+     */
+    public function deleteLike( $media ) {
+        if ( $media instanceof \Instagram\Media ) {
+            $media = $media->getId();
+        }
+        $this->proxy->unLike( $media );
+        unset( $this->liked[$media] );
+        $this->unliked[$media] = true;
+    }
+
+    /**
+     * Add a comment
+     *
+     * @param \Instagram\Media|string Media to add a comment to
+     * @param string $text Comment text
+     * @access public
+     */
+    public function addMediaComment( $media, $text ) {
+        if ( $media instanceof \Instagram\Media ) {
+            $media = $media->getId();
+        }
+        $this->proxy->addMediaComment( $media, $text );
+    }
+
+    /**
+     * Delete a comment
+     *
+     * @param \Instagram\Media|string Media to delete a comment from
+     * @param string $text Comment text
+     * @access public
+     */
+    public function deleteMediaComment( $media, $comment ) {
+        if ( $media instanceof \Instagram\Media ) {
+            $media = $media->getId();
+        }
+        if ( $comment instanceof \Instagram\Comment ) {
+            $comment = $comment->getId();
+        }
+        $this->proxy->deleteMediaComment( $media, $comment );
+    }
+
+    /**
+     * Update relationship with a user
+     *
+     * Internal function that updates relationships
+     *
+     * @see \Instagram\CurrentUser::follow
+     * @see \Instagram\CurrentUser::unFollow
+     * @see \Instagram\CurrentUser::getRelationship
+     * @see \Instagram\CurrentUser::approveFollowRequest
+     * @see \Instagram\CurrentUser::ignoreFollowRequest
+     * @see \Instagram\CurrentUser::block
+     * @see \Instagram\CurrentUser::unblock
+     *
+     * @param \Instagram\User|string User object or user id whose relationship you'd like to update
+     * @access protected
+     */
+    protected function updateRelationship( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        if ( !isset( $this->relationships[ $user ] ) ) {
+            $this->relationships[ $user ] = $this->proxy->getRelationshipToCurrentUser( $user );
+        }
+    }
+
+    /**
+     * Follow user
+     *
+     * @param \Instagram\User|string User object or user id who should be followed
+     * @return boolean
+     */
+    public function follow( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user );
+        $response = $this->proxy->modifyRelationship( $user, 'follow' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Approve follower
+     *
+     * @param \Instagram\User|string $user User object or user id who should be approved for following
+     * @return boolean
+     */
+    public function approveFollowRequest( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user ); 
+        $response = $this->proxy->modifyRelationship( $user, 'approve' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Ignore follower
+     *
+     * @param \Instagram\User|string $user User object or user id who should be ignored
+     * @return boolean
+     */
+    public function ignoreFollowRequest( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user ); 
+        $response = $this->proxy->modifyRelationship( $user, 'ignore' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Unfollow user
+     *
+     * @param \Instagram\User|string $user User object or user id who should be unfollowed
+     * @return boolean
+     */
+    public function unFollow( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user ); 
+        $response = $this->proxy->modifyRelationship( $user, 'unfollow' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Block user
+     *
+     * @param \Instagram\User|string $user User object or user id who should be blocked
+     * @return boolean
+     */
+    public function block( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user ); 
+        $response = $this->proxy->modifyRelationship( $user, 'block' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Unblock user
+     *
+     * @param \Instagram\User|string $user User object or user id who should be unblocked
+     * @return boolean
+     */
+    public function unblock( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user ); 
+        $response = $this->proxy->modifyRelationship( $user, 'unblock' );
+        foreach( $response as $r => $v ) {
+            $this->relationships[ $user ]->$r = $v;
+        }
+        return true;
+    }
+
+    /**
+     * Check if the current user can view a user
+     *
+     * @return bool
+     * @access public
+     */
+    public function canViewUser( $user_id ) {
+        $relationship = $this->proxy->getRelationshipToCurrentUser( $user_id );
+        if ( $this->getId() == $user_id || !(bool)$relationship->target_user_is_private || $relationship->outgoing_status == 'follows' ) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Get relationship
+     *
+     * Get the complete relationship to a user
+     *
+     * @param \Instagram\User|string $user User object or user id to get the relationship details of
+     * @return StdClass
+     */
+    public function getRelationship( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        $this->updateRelationship( $user );
+        return $this->relationships[ $user ];
+    }
+
+    /**
+     * Get follow request
+     *
+     * Get the users that have requested to follow the current user
+     *
+     * @return \Instagram\Collection\UserCollection
+     */
+    public function getFollowRequests() {
+        return new UserCollection( $this->proxy->getFollowRequests(), $this->proxy );
+    }
+
+    /**
+     * Check outgoing request status
+     *
+     * Check if the current user is currently waiting approval of a follow request
+     *
+     * @param \Instagram\User|string $user User object or user id to check the status of
+     * @return boolean
+     */
+    public function isAwaitingFollowApprovalFrom( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        return $this->getRelationship( $user )->outgoing_status == 'requested';
+    }
+
+    /**
+     * Check incoming request status
+     *
+     * Check if the current user has been requested to be followed by a user
+     *
+     * @param \Instagram\User|string $user User object or user id to check the status of
+     * @return boolean
+     */
+    public function hasBeenRequestedBy( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        return $this->getRelationship( $user )->incoming_status == 'requested_by';
+    }
+
+    /**
+     * Check following status
+     *
+     * Check if the current user is blocking a user
+     *
+     * @param \Instagram\User|string $user User object or user id to check the following status of
+     * @return boolean
+     */
+    public function isBlocking( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        return $this->getRelationship( $user )->incoming_status == 'blocked_by_you';
+    }
+
+    /**
+     * Check following status
+     *
+     * Check if hte current user is following a user
+     *
+     * @param \Instagram\User|string $user User object or user id to check the following status of
+     * @return boolean
+     */
+    public function isFollowing( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        return $this->getRelationship( $user )->outgoing_status == 'follows';
+    }
+
+    /**
+     * Check followed by status
+     *
+     * Check if the current user is followed by a user
+     *
+     * @param \Instagram\User|string $user User object or user id to check the followed by status of
+     * @return boolean
+     */
+    public function isFollowedBy( $user ) {
+        if ( $user instanceof \Instagram\User ) {
+            $user = $user->getId();
+        }
+        return $this->getRelationship( $user )->incoming_status == 'followed_by';
+    }
+
+    /**
+     * Get the current user's feed
+     *
+     * This can be paginated with the next_max_id param obtained from MediaCollection->getNext()
+     *
+     * @param array $params Optional params to pass to the endpoint
+     * @return \Instagram\Collection\MediaCollection
+     * @access public
+     */
+    public function getFeed( array $params = null ) {
+        return new MediaCollection( $this->proxy->getFeed( $params ), $this->proxy );
+    }
+
+    /**
+     * Get the current user's liked media
+     *
+     * This can be paginated with the next_max_like_id param obtained from MediaCollection->getNext()
+     *
+     * @param array $params Optional params to pass to the endpoint
+     * @return \Instagram\Collection\MediaCollection
+     * @access public
+     */
+    public function getLikedMedia( array $params = null ) {
+        return  new LikedMediaCollection( $this->proxy->getLikedMedia( $params ), $this->proxy );
+    }
+
+}
\ No newline at end of file