Catch remote forking errors and display them
[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($_POST['remote_url'])) {
12     $fr = new ForkRemote($_POST['remote_url']);
13     if (false === $fr->parse()) {
14         //no url found
15         $error = $fr->error;
16     } else if (false !== ($gitUrl = $fr->getUniqueGitUrl())) {
17         if (isset($_POST['orig_url'])) {
18             $fr->setUrl($_POST['orig_url']);
19         }
20         $forker = new Forker();
21         try {
22             $new = $forker->forkRemote($gitUrl, $fr->getUrl());
23             redirect($new->getLink('display', null, true));
24         } catch (\Exception $e) {
25             $error = $e->getMessage();
26         }
27     } else {
28         //multiple urls found
29         $urls = $fr->getGitUrls();
30     }
31 }
32
33 $selsize = 0;
34 if (is_array($urls)) {
35     foreach ($urls as $group) {
36         ++$selsize;
37         if (count($group) > 1) {
38             $selsize += count($group);
39         }
40     }
41 }
42
43 render(
44     'fork-remote',
45     array(
46         'remote_url' => isset($_POST['remote_url']) ? $_POST['remote_url'] : '',
47         'error'      => $error,
48         'urls'       => $urls,
49         'urlselsize' => $selsize,
50     )
51 );
52 ?>