forked from robertmarsal/moodle-repository_bitbucket
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lib.php
128 lines (111 loc) · 3.63 KB
/
lib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This plugin is used to access a bitbucket repository
*
* @package repository
* @subpackage bitbucket
* @copyright 2012 Robert Boloc
* @author Robert Boloc <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once($CFG->dirroot . '/repository/lib.php');
require_once($CFG->dirroot . '/repository/bitbucket/bitbucket.php');
class repository_bitbucket extends repository {
/**
* Username preference identifier
*/
const USERNAME = 'bitbucket_username';
/**
* Bitbucket api client instance
*
* @var bitbucket
*/
private $client;
/**
* Checks if username is set
*
* @return boolean
*/
public function check_login() {
$username = get_user_preferences(self::USERNAME, '');
if (empty($username)) {
$username = optional_param('bitbucket_username', '', PARAM_ALPHANUM);
}
if ($username) {
set_user_preference(self::USERNAME, $username);
$this->client = new bitbucket($username);
return true;
}
return false;
}
/**
* Prints the login form
*
* @return \stdClass
*/
public function print_login() {
$login = array();
$form = new stdClass();
$form->type = 'text';
$form->label = get_string('search', 'repository_bitbucket');
$form->name = 'bitbucket_username';
$login['login'] = array($form);
return $login;
}
/**
* Builds the file tree, navigation, and options
*
* @param string $path
* @param int $page
* @return array
*/
public function get_listing($path = '', $page = '') {
$listing = array();
$listing['dynload'] = true;
$listing['nosearch'] = true;
$listing['path'] = array(
array('name' => get_string('repositories', 'repository_bitbucket'),
'path' => ''));
if (empty($path)) {
$listing['list'] = $this->client->get_repositories();
} else {
$fragments = explode('/', $path);
if (count($fragments) == 1) {
$listing['path'][] = array('name' => $fragments[0], 'path' => $fragments[0]);
$listing['list'] = $this->client->get_branches($fragments[0]);
} else if (count($fragments) > 1) {
$previous = '';
foreach ($fragments as $fragment) {
$listing['path'][] = array('name' => $fragment, 'path' => $previous.$fragment);
$previous .= $fragment.'/';
}
$listing['list'] = $this->client->get_path_listing($path);
}
}
return $listing;
}
/**
* Unsets the username
*
* @return boolean
*/
public function logout() {
$this->username = '';
unset_user_preference(self::USERNAME);
return $this->print_login();
}
}