Completed
Push — master ( 8612fa...f1c4fe )
by Sergey
06:46 queued 03:23
created

UrlBuilder::getFollowingUrlByType()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 12
rs 9.4285
cc 2
eloc 7
nc 2
nop 1
1
<?php
2
3
namespace seregazhuk\PinterestBot\Helpers;
4
5
/**
6
 * Class UrlHelper.
7
 */
8
class UrlBuilder
9
{
10
    /**
11
     * Login
12
     */
13
    const RESOURCE_LOGIN = 'resource/UserSessionResource/create/';
14
15
    /**
16
     * Password
17
     */
18
    const RESOURCE_RESET_PASSWORD_SEND_LINK = 'resource/UserResetPasswordResource/create/';
19
    const RESOURCE_RESET_PASSWORD_UPDATE = 'resource/ResetPasswordFromEmailResource/update/';
20
21
    /**
22
     * Boards
23
     */
24
    const RESOURCE_GET_BOARDS = 'resource/BoardsResource/get/';
25
    const RESOURCE_GET_BOARD = 'resource/BoardResource/get';
26
    const RESOURCE_GET_BOARD_FEED = 'resource/BoardFeedResource/get/';
27
    const RESOURCE_PROFILE_BOARDS = 'resource/ProfileBoardsResource/get/';
28
    const RESOURCE_FOLLOW_BOARD = 'resource/BoardFollowResource/create/';
29
    const RESOURCE_UNFOLLOW_BOARD = 'resource/BoardFollowResource/delete/';
30
    const RESOURCE_DELETE_BOARD = 'resource/BoardResource/delete/';
31
    const RESOURCE_CREATE_BOARD = 'resource/BoardResource/create/';
32
    const RESOURCE_UPDATE_BOARD = 'resource/BoardResource/update/';
33
    const RESOURCE_BOARD_FOLLOWERS = 'resource/BoardFollowersResource/get/';
34
    const RESOURCE_FOLLOWING_BOARDS = 'resource/BoardFollowingResource/get/';
35
    const RESOURCE_TITLE_SUGGESTIONS = 'resource/BoardTitleSuggestionsResource/get';
36
37
    /**
38
     * Pins
39
     */
40
    const RESOURCE_CREATE_PIN = 'resource/PinResource/create/';
41
    const RESOURCE_UPDATE_PIN = 'resource/PinResource/update/';
42
    const RESOURCE_REPIN = 'resource/RepinResource/create/';
43
    const RESOURCE_USER_FOLLOWERS = 'resource/UserFollowersResource/get/';
44
    const RESOURCE_DELETE_PIN = 'resource/PinResource/delete/';
45
    const RESOURCE_LIKE_PIN = 'resource/PinLikeResource/create/';
46
    const RESOURCE_UNLIKE_PIN = 'resource/PinLikeResource/delete/';
47
    const RESOURCE_COMMENT_PIN = 'resource/PinCommentResource/create/';
48
    const RESOURCE_COMMENT_DELETE_PIN = 'resource/PinCommentResource/delete/';
49
    const RESOURCE_PIN_INFO = 'resource/PinResource/get/';
50
    const RESOURCE_DOMAIN_FEED = 'resource/DomainFeedResource/get';
51
    const RESOURCE_ACTIVITY = 'resource/AggregatedActivityFeedResource/get';
52
    const RESOURCE_USER_FEED = 'resource/UserHomefeedResource/get/';
53
    const RESOURCE_RELATED_PINS = 'resource/RelatedPinFeedResource/get';
54
    const RESOURCE_VISUAL_SIMILAR_PINS = 'resource/VisualLiveSearchResource/get';
55
    const RESOURCE_BULK_COPY = 'resource/BulkEditResource/create/';
56
    const RESOURCE_BULK_MOVE = 'resource/BulkEditResource/update/';
57
    const RESOURCE_BULK_DELETE = 'resource/BulkEditResource/delete/';
58
59
    /**
60
     * Pinners
61
     */
62
    const RESOURCE_FOLLOW_USER = 'resource/UserFollowResource/create/';
63
    const RESOURCE_UNFOLLOW_USER = 'resource/UserFollowResource/delete/';
64
    const RESOURCE_USER_INFO = 'resource/UserResource/get/';
65
    const RESOURCE_USER_FOLLOWING = 'resource/UserFollowingResource/get/';
66
    const RESOURCE_USER_PINS = 'resource/UserPinsResource/get/';
67
    const RESOURCE_USER_LIKES = 'resource/UserLikesResource/get/';
68
    const RESOURCE_USER_TRIED = 'resource/DidItUserFeedResource/get/';
69
70
71
    /**
72
     * Search
73
     */
74
    const RESOURCE_SEARCH = 'resource/BaseSearchResource/get/';
75
    const RESOURCE_SEARCH_WITH_PAGINATION = 'resource/SearchResource/get/';
76
77
    /**
78
     * Interests.
79
     */
80
    const RESOURCE_FOLLOW_INTEREST = 'resource/InterestFollowResource/create/';
81
    const RESOURCE_UNFOLLOW_INTEREST = 'resource/InterestFollowResource/delete/';
82
    const RESOURCE_FOLLOWING_INTERESTS = 'resource/InterestFollowingResource/get/';
83
84
    /**
85
     * Conversations.
86
     */
87
    const RESOURCE_SEND_MESSAGE = 'resource/ConversationsResource/create/';
88
    const RESOURCE_GET_LAST_CONVERSATIONS = 'resource/ConversationsResource/get/';
89
90
    /**
91
     * UserSettings
92
     */
93
    const RESOURCE_UPDATE_USER_SETTINGS = 'resource/UserSettingsResource/update/';
94
    const RESOURCE_GET_USER_SETTINGS = 'resource/UserSettingsResource/get/';
95
    const RESOURCE_CHANGE_PASSWORD = 'resource/UserPasswordResource/update/';
96
    const RESOURCE_DEACTIVATE_ACCOUNT = 'resource/DeactivateAccountResource/create/';
97
    const RESOURCE_BLOCK_USER = 'resource/UserBlockResource/create/';
98
    const RESOURCE_CLEAR_SEARCH_HISTORY = 'resource/TypeaheadClearRecentResource/delete/';
99
100
    /**
101
     * News
102
     */
103
    const RESOURCE_GET_LATEST_NEWS = 'resource/NetworkStoriesResource/get/';
104
    const RESOURCE_GET_NOTIFICATIONS = 'resource/NewsHubResource/get/';
105
106
    /**
107
     * Registration
108
     */
109
    const RESOURCE_CREATE_REGISTER = 'resource/UserRegisterResource/create/';
110
    const RESOURCE_CHECK_EMAIL = 'resource/EmailExistsResource/get';
111
    const RESOURCE_SET_ORIENTATION = 'resource/OrientationContextResource/create/';
112
    const RESOURCE_UPDATE_REGISTRATION_TRACK = 'resource/UserRegisterTrackActionResource/update/';
113
    const RESOURCE_REGISTRATION_COMPLETE = 'resource/UserExperienceCompletedResource/update/';
114
    const RESOURCE_CONVERT_TO_BUSINESS = 'resource/PartnerResource/update/';
115
116
    /**
117
     * Uploads
118
     */
119
    const IMAGE_UPLOAD = 'upload-image/';
120
121
    /**
122
     * Categories
123
     */
124
    const RESOURCE_GET_CATEGORIES = 'resource/CategoriesResource/get/';
125
    const RESOURCE_GET_CATEGORY = 'resource/CategoryResource/get/';
126
    const RESOURCE_GET_CATEGORIES_RELATED = 'resource/RelatedInterestsResource/get/';
127
    const RESOURCE_GET_CATEGORY_FEED = 'resource/CategoryFeedResource/get';
128
129
    /**
130
     * Topics
131
     */
132
    const RESOURCE_GET_TOPIC_FEED = 'resource/TopicFeedResource/get';
133
    const RESOURCE_GET_TOPIC = 'resource/TopicResource/get';
134
135
    /**
136
     * Invite
137
     */
138
    const RESOURCE_INVITE = 'resource/EmailInviteSentResource/create/';
139
140
    const URL_BASE = 'https://uk.pinterest.com/';
141
    const HOST = 'uk.pinterest.com';
142
143
    const FOLLOWING_INTERESTS = 'interests';
144
    const FOLLOWING_PEOPLE = 'people';
145
    const FOLLOWING_BOARDS = 'boards';
146
147
    /**
148
     * @param array $request
149
     *
150
     * @return mixed
151
     */
152
    public static function buildRequestString($request)
153
    {
154
        return self::fixEncoding(http_build_query($request));
155
    }
156
157
    /**
158
     * Appends resource url to base pinterest url.
159
     *
160
     * @param string $resourceUrl
161
     *
162
     * @return string
163
     */
164
    public static function buildApiUrl($resourceUrl)
165
    {
166
        if(strpos($resourceUrl, 'http') !== false) {
167
            return $resourceUrl;
168
        }
169
170
        return self::URL_BASE . $resourceUrl;
171
    }
172
173
    /**
174
     * Fix URL-encoding for some characters.
175
     *
176
     * @param string $str
177
     *
178
     * @return string
179
     */
180
    public static function fixEncoding($str)
181
    {
182
        return str_replace(
183
            ['%28', '%29', '%7E'], ['(', ')', '~'], $str
184
        );
185
    }
186
187
188
    /**
189
     * @param string $type
190
     * @return string|null
191
     */
192
    public static function getFollowingUrlByType($type)
193
    {
194
        $urls = [
195
            self::FOLLOWING_INTERESTS => self::RESOURCE_FOLLOWING_INTERESTS,
196
            self::FOLLOWING_BOARDS    => self::RESOURCE_FOLLOWING_BOARDS,
197
            self::FOLLOWING_PEOPLE    => self::RESOURCE_USER_FOLLOWING,
198
        ];
199
200
        if(array_key_exists($type, $urls)) return $urls[$type];
201
202
        return null;
203
    }
204
}
205