1<?php 2/** 3 * @package Joomla.Platform 4 * @subpackage GitHub 5 * 6 * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. 7 * @license GNU General Public License version 2 or later; see LICENSE 8 */ 9 10defined('JPATH_PLATFORM') or die; 11 12/** 13 * GitHub API Activity class for the Joomla Platform. 14 * 15 * @since 3.3 (CMS) 16 * @deprecated 4.0 Use the `joomla/github` package via Composer instead 17 * 18 * @documentation https://developer.github.com/v3/repos 19 * 20 * @property-read JGithubPackageRepositoriesCollaborators $collaborators GitHub API object for collaborators. 21 * @property-read JGithubPackageRepositoriesComments $comments GitHub API object for comments. 22 * @property-read JGithubPackageRepositoriesCommits $commits GitHub API object for commits. 23 * @property-read JGithubPackageRepositoriesContents $contents GitHub API object for contents. 24 * @property-read JGithubPackageRepositoriesDownloads $downloads GitHub API object for downloads. 25 * @property-read JGithubPackageRepositoriesForks $forks GitHub API object for forks. 26 * @property-read JGithubPackageRepositoriesHooks $hooks GitHub API object for hooks. 27 * @property-read JGithubPackageRepositoriesKeys $keys GitHub API object for keys. 28 * @property-read JGithubPackageRepositoriesMerging $merging GitHub API object for merging. 29 * @property-read JGithubPackageRepositoriesStatuses $statuses GitHub API object for statuses. 30 */ 31class JGithubPackageRepositories extends JGithubPackage 32{ 33 protected $name = 'Repositories'; 34 35 protected $packages = array('collaborators', 'comments', 'commits', 'contents', 'downloads', 'forks', 'hooks', 'keys', 'merging', 'statuses'); 36 37 /** 38 * List your repositories. 39 * 40 * List repositories for the authenticated user. 41 * 42 * @param string $type Sort type. all, owner, public, private, member. Default: all. 43 * @param string $sort Sort field. created, updated, pushed, full_name, default: full_name. 44 * @param string $direction Sort direction. asc or desc, default: when using full_name: asc, otherwise desc. 45 * 46 * @throws RuntimeException 47 * 48 * @return object 49 */ 50 public function getListOwn($type = 'all', $sort = 'full_name', $direction = '') 51 { 52 if (false == in_array($type, array('all', 'owner', 'public', 'private', 'member'))) 53 { 54 throw new RuntimeException('Invalid type'); 55 } 56 57 if (false == in_array($sort, array('created', 'updated', 'pushed', 'full_name'))) 58 { 59 throw new RuntimeException('Invalid sort field'); 60 } 61 62 // Sort direction default: when using full_name: asc, otherwise desc. 63 $direction = ($direction) ? : (('full_name' == $sort) ? 'asc' : 'desc'); 64 65 if (false == in_array($direction, array('asc', 'desc'))) 66 { 67 throw new RuntimeException('Invalid sort order'); 68 } 69 70 // Build the request path. 71 $path = '/user/repos' 72 . '?type=' . $type 73 . '&sort=' . $sort 74 . '&direction=' . $direction; 75 76 // Send the request. 77 return $this->processResponse( 78 $this->client->get($this->fetchUrl($path)) 79 ); 80 } 81 82 /** 83 * List user repositories. 84 * 85 * List public repositories for the specified user. 86 * 87 * @param string $user The user name. 88 * @param string $type Sort type. all, owner, member. Default: all. 89 * @param string $sort Sort field. created, updated, pushed, full_name, default: full_name. 90 * @param string $direction Sort direction. asc or desc, default: when using full_name: asc, otherwise desc. 91 * 92 * @throws RuntimeException 93 * 94 * @return object 95 */ 96 public function getListUser($user, $type = 'all', $sort = 'full_name', $direction = '') 97 { 98 if (false == in_array($type, array('all', 'owner', 'member'))) 99 { 100 throw new RuntimeException('Invalid type'); 101 } 102 103 if (false == in_array($sort, array('created', 'updated', 'pushed', 'full_name'))) 104 { 105 throw new RuntimeException('Invalid sort field'); 106 } 107 108 // Sort direction default: when using full_name: asc, otherwise desc. 109 $direction = ($direction) ? : (('full_name' == $sort) ? 'asc' : 'desc'); 110 111 if (false == in_array($direction, array('asc', 'desc'))) 112 { 113 throw new RuntimeException('Invalid sort order'); 114 } 115 116 // Build the request path. 117 $path = '/users/' . $user . '/repos' 118 . '?type=' . $type 119 . '&sort=' . $sort 120 . '&direction=' . $direction; 121 122 // Send the request. 123 return $this->processResponse( 124 $this->client->get($this->fetchUrl($path)) 125 ); 126 } 127 128 /** 129 * List organization repositories. 130 * 131 * List repositories for the specified org. 132 * 133 * @param string $org The name of the organization. 134 * @param string $type Sort type. all, public, private, forks, sources, member. Default: all. 135 * 136 * @throws RuntimeException 137 * 138 * @return object 139 */ 140 public function getListOrg($org, $type = 'all') 141 { 142 if (false == in_array($type, array('all', 'public', 'private', 'forks', 'sources', 'member'))) 143 { 144 throw new RuntimeException('Invalid type'); 145 } 146 147 // Build the request path. 148 $path = '/orgs/' . $org . '/repos' 149 . '?type=' . $type; 150 151 // Send the request. 152 return $this->processResponse( 153 $this->client->get($this->fetchUrl($path)) 154 ); 155 } 156 157 /** 158 * List all repositories. 159 * 160 * This provides a dump of every repository, in the order that they were created. 161 * 162 * @param integer $id The integer ID of the last Repository that you’ve seen. 163 * 164 * @throws RuntimeException 165 * 166 * @return object 167 */ 168 public function getList($id = 0) 169 { 170 // Build the request path. 171 $path = '/repositories'; 172 $path .= ($id) ? '?since=' . (int) $id : ''; 173 174 // Send the request. 175 return $this->processResponse( 176 $this->client->get($this->fetchUrl($path)) 177 ); 178 } 179 180 /** 181 * Create a new repository for the authenticated user or an organization. 182 * OAuth users must supply repo scope. 183 * 184 * @param string $name The repository name. 185 * @param string $org The organization name (if needed). 186 * @param string $description The repository description. 187 * @param string $homepage The repository homepage. 188 * @param boolean $private Set true to create a private repository, false to create a public one. 189 * Creating private repositories requires a paid GitHub account. 190 * @param boolean $hasIssues Set true to enable issues for this repository, false to disable them. 191 * @param boolean $hasWiki Set true to enable the wiki for this repository, false to disable it. 192 * @param boolean $hasDownloads Set true to enable downloads for this repository, false to disable them. 193 * @param integer $teamId The id of the team that will be granted access to this repository. 194 * This is only valid when creating a repo in an organization. 195 * @param boolean $autoInit true to create an initial commit with empty README. 196 * @param string $gitignoreTemplate Desired language or platform .gitignore template to apply. 197 * Use the name of the template without the extension. For example, 198 * “Haskell” Ignored if auto_init parameter is not provided. 199 * 200 * @return object 201 */ 202 public function create($name, $org = '', $description = '', $homepage = '', $private = false, $hasIssues = false, 203 $hasWiki = false, $hasDownloads = false, $teamId = 0, $autoInit = false, $gitignoreTemplate = '') 204 { 205 $path = ($org) 206 // Create a repository for an organization 207 ? '/orgs/' . $org . '/repos' 208 // Create a repository for a user 209 : '/user/repos'; 210 211 $data = array( 212 'name' => $name, 213 'description' => $description, 214 'homepage' => $homepage, 215 'private' => $private, 216 'has_issues' => $hasIssues, 217 'has_wiki' => $hasWiki, 218 'has_downloads' => $hasDownloads, 219 'team_id' => $teamId, 220 'auto_init' => $autoInit, 221 'gitignore_template' => $gitignoreTemplate, 222 ); 223 224 // Send the request. 225 return $this->processResponse( 226 $this->client->post($this->fetchUrl($path), json_encode($data)), 227 201 228 ); 229 } 230 231 /** 232 * Get a repository. 233 * 234 * @param string $owner Repository owner. 235 * @param string $repo Repository name. 236 * 237 * @return object 238 */ 239 public function get($owner, $repo) 240 { 241 // Build the request path. 242 $path = '/repos/' . $owner . '/' . $repo; 243 244 // Send the request. 245 return $this->processResponse( 246 $this->client->get($this->fetchUrl($path)) 247 ); 248 } 249 250 /** 251 * Edit a repository. 252 * 253 * @param string $owner Repository owner. 254 * @param string $repo Repository name. 255 * @param string $name The repository name. 256 * @param string $description The repository description. 257 * @param string $homepage The repository homepage. 258 * @param boolean $private Set true to create a private repository, false to create a public one. 259 * Creating private repositories requires a paid GitHub account. 260 * @param boolean $hasIssues Set true to enable issues for this repository, false to disable them. 261 * @param boolean $hasWiki Set true to enable the wiki for this repository, false to disable it. 262 * @param boolean $hasDownloads Set true to enable downloads for this repository, false to disable them. 263 * @param string $defaultBranch Update the default branch for this repository 264 * 265 * @return object 266 */ 267 public function edit($owner, $repo, $name, $description = '', $homepage = '', $private = false, $hasIssues = false, 268 $hasWiki = false, $hasDownloads = false, $defaultBranch = '') 269 { 270 $path = '/repos/' . $owner . '/' . $repo; 271 272 $data = array( 273 'name' => $name, 274 'description' => $description, 275 'homepage' => $homepage, 276 'private' => $private, 277 'has_issues' => $hasIssues, 278 'has_wiki' => $hasWiki, 279 'has_downloads' => $hasDownloads, 280 'default_branch' => $defaultBranch, 281 ); 282 283 // Send the request. 284 return $this->processResponse( 285 $this->client->patch($this->fetchUrl($path), json_encode($data)) 286 ); 287 } 288 289 /** 290 * List contributors. 291 * 292 * @param string $owner Repository owner. 293 * @param string $repo Repository name. 294 * @param boolean $anon Set to 1 or true to include anonymous contributors in results. 295 * 296 * @return object 297 */ 298 public function getListContributors($owner, $repo, $anon = false) 299 { 300 // Build the request path. 301 $path = '/repos/' . $owner . '/' . $repo . '/contributors'; 302 303 $path .= ($anon) ? '?anon=true' : ''; 304 305 // Send the request. 306 return $this->processResponse( 307 $this->client->get($this->fetchUrl($path)) 308 ); 309 } 310 311 /** 312 * List languages. 313 * 314 * List languages for the specified repository. The value on the right of a language is the number of bytes of code 315 * written in that language. 316 * 317 * @param string $owner Repository owner. 318 * @param string $repo Repository name. 319 * 320 * @return object 321 */ 322 public function getListLanguages($owner, $repo) 323 { 324 // Build the request path. 325 $path = '/repos/' . $owner . '/' . $repo . '/languages'; 326 327 // Send the request. 328 return $this->processResponse( 329 $this->client->get($this->fetchUrl($path)) 330 ); 331 } 332 333 /** 334 * List Teams 335 * 336 * @param string $owner Repository owner. 337 * @param string $repo Repository name. 338 * 339 * @return object 340 */ 341 public function getListTeams($owner, $repo) 342 { 343 // Build the request path. 344 $path = '/repos/' . $owner . '/' . $repo . '/teams'; 345 346 // Send the request. 347 return $this->processResponse( 348 $this->client->get($this->fetchUrl($path)) 349 ); 350 } 351 352 /** 353 * List Tags. 354 * 355 * @param string $owner Repository owner. 356 * @param string $repo Repository name. 357 * 358 * @return object 359 */ 360 public function getListTags($owner, $repo) 361 { 362 // Build the request path. 363 $path = '/repos/' . $owner . '/' . $repo . '/tags'; 364 365 // Send the request. 366 return $this->processResponse( 367 $this->client->get($this->fetchUrl($path)) 368 ); 369 } 370 371 /** 372 * List Branches. 373 * 374 * @param string $owner Repository owner. 375 * @param string $repo Repository name. 376 * 377 * @return object 378 */ 379 public function getListBranches($owner, $repo) 380 { 381 // Build the request path. 382 $path = '/repos/' . $owner . '/' . $repo . '/branches'; 383 384 // Send the request. 385 return $this->processResponse( 386 $this->client->get($this->fetchUrl($path)) 387 ); 388 } 389 390 /** 391 * Get a Branch. 392 * 393 * @param string $owner Repository owner. 394 * @param string $repo Repository name. 395 * @param string $branch Branch name. 396 * 397 * @return object 398 */ 399 public function getBranch($owner, $repo, $branch) 400 { 401 // Build the request path. 402 $path = '/repos/' . $owner . '/' . $repo . '/branches/' . $branch; 403 404 // Send the request. 405 return $this->processResponse( 406 $this->client->get($this->fetchUrl($path)) 407 ); 408 } 409 410 /** 411 * Delete a Repository. 412 * 413 * Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required. 414 * 415 * @param string $owner Repository owner. 416 * @param string $repo Repository name. 417 * 418 * @return object 419 */ 420 public function delete($owner, $repo) 421 { 422 // Build the request path. 423 $path = '/repos/' . $owner . '/' . $repo; 424 425 // Send the request. 426 return $this->processResponse( 427 $this->client->delete($this->fetchUrl($path)) 428 ); 429 } 430} 431