first work on remote fork notifications with linkback (webmention/pingback)
[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(
23                 $gitUrl['url'], $fr->getUrl(), $gitUrl['title']
24             );
25             redirect($new->getLink('display', null, true));
26         } catch (\Exception $e) {
27             $error = $e->getMessage();
28         }
29     } else {
30         //multiple urls found
31         $urls = $fr->getGitUrls();
32     }
33 }
34
35 $selsize = 0;
36 if (is_array($urls)) {
37     foreach ($urls as $group) {
38         ++$selsize;
39         if (count($group) > 1) {
40             $selsize += count($group);
41         }
42     }
43 }
44
45 render(
46     'fork-remote',
47     array(
48         'remote_url' => isset($_POST['remote_url']) ? $_POST['remote_url'] : '',
49         'error'      => $error,
50         'urls'       => $urls,
51         'urlselsize' => $selsize,
52     )
53 );
54 ?>