fix gist.github.com clone urls
[phorkie.git] / www / fork-remote.php
1 <?php
2 namespace phorkie;
3 /**
4  * Fork a remote repository.
5  * Displays a URL selection form when multiple git urls have been found
6  */
7 require_once 'www-header.php';
8
9 $error = null;
10 $urls  = null;
11 if (isset($_REQUEST['remote_url'])) {
12     if (substr($_REQUEST['remote_url'], 0, 9) == 'web+fork:') {
13         $_REQUEST['remote_url'] = substr($_REQUEST['remote_url'], 9);
14     }
15
16     $fr = new ForkRemote($_REQUEST['remote_url']);
17     if (false === $fr->parse()) {
18         //no url found
19         $error = $fr->error;
20     } else if (false !== ($gitUrl = $fr->getUniqueGitUrl())) {
21         if (isset($_POST['orig_url'])) {
22             $fr->setUrl($_POST['orig_url']);
23         }
24         $forker = new Forker();
25         try {
26             $new = $forker->forkRemote(
27                 $gitUrl['url'], $fr->getUrl(), $gitUrl['title']
28             );
29             redirect($new->getLink('display', null, true));
30         } catch (\Exception $e) {
31             $error = $e->getMessage();
32         }
33     } else {
34         //multiple urls found
35         $urls = $fr->getGitUrls();
36     }
37 }
38
39 $selsize = 0;
40 if (is_array($urls)) {
41     foreach ($urls as $group) {
42         ++$selsize;
43         if (count($group) > 1) {
44             $selsize += count($group);
45         }
46     }
47 }
48
49 render(
50     'fork-remote',
51     array(
52         'remote_url' => isset($_REQUEST['remote_url']) ? $_REQUEST['remote_url'] : '',
53         'error'      => $error,
54         'urls'       => $urls,
55         'urlselsize' => $selsize,
56     )
57 );
58 ?>