diff options
Diffstat (limited to 'Zotlabs/Module/Admin.php')
-rw-r--r-- | Zotlabs/Module/Admin.php | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index e1eaa6e0e..d23b508f0 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -1,5 +1,8 @@ <?php namespace Zotlabs\Module; + +use PHPGit\Git as Git; + /** * @file mod/admin.php * @brief Hubzilla's admin controller. @@ -36,6 +39,10 @@ class Admin extends \Zotlabs\Web\Controller { $this->admin_page_channels_post($a); break; case 'plugins': + if (argc() > 2 && argv(2) === 'addrepo') { + $this->admin_page_plugins_post('addrepo'); + break; + } if (argc() > 2 && is_file("addon/" . argv(2) . "/" . argv(2) . ".php")){ @include_once("addon/" . argv(2) . "/" . argv(2) . ".php"); @@ -1343,6 +1350,16 @@ class Admin extends \Zotlabs\Web\Controller { usort($plugins,'self::plugin_sort'); + + $admin_plugins_add_repo_form= replace_macros( + get_markup_template('admin_plugins_addrepo.tpl'), array( + '$post' => 'admin/plugins/addrepo', + '$desc' => t('Enter the public git repository URL of the plugin repo.'), + '$repoURL' => array('repoURL', t('Plugin repo git URL'), '', ''), + '$submit' => t('Download Plugin Repo') + ) + ); + $t = get_markup_template('admin_plugins.tpl'); return replace_macros($t, array( '$title' => t('Administration'), @@ -1353,6 +1370,9 @@ class Admin extends \Zotlabs\Web\Controller { '$plugins' => $plugins, '$disabled' => t('Disabled - version incompatibility'), '$form_security_token' => get_form_security_token('admin_plugins'), + '$addrepo' => t('Add Plugin Repo'), + '$expandform' => false, + '$form' => $admin_plugins_add_repo_form )); } @@ -1647,6 +1667,58 @@ class Admin extends \Zotlabs\Web\Controller { )); } + function admin_page_plugins_post($action) { + switch($action) { + case 'addrepo': + + if(array_key_exists('repoURL',$_REQUEST)) { + require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies + logger('Repo URL submitted: ' . $_REQUEST['repoURL']); + $repoURL = $_REQUEST['repoURL']; + $urlpath = parse_url($repoURL, PHP_URL_PATH); + $lastslash = strrpos($urlpath, '/') + 1; + $gitext = strrpos($urlpath, '.'); + if ($gitext) { + $reponame = substr($urlpath, $lastslash, $gitext - $lastslash); + } else { + logger('invalid git repo URL'); + notice('Invalid git repo URL'); + break; + } + $storepath = realpath(__DIR__ . '/../../store/'); + //logger('storepath: ' . $storepath); + $repopath = $storepath . '/pluginrepos/' . $reponame; + + if (!file_exists($repopath)) { + //logger('repopath does not exist'); + if (mkdir($repopath, 0770, true)) { + //logger('repopath created'); + $git = new Git(); + //logger('new git object created'); + $cloned = $git->clone($repoURL, $repopath); + if (!$cloned) { + logger('git clone failed'); + notice('Repo coule not be cloned. Filesystem path error.'); + json_return_and_die(array('message' => 'Repo coule not be cloned. Filesystem path error.', 'success' => false)); + } + json_return_and_die(array('message' => 'Successfully cloned to: ' . $repopath , 'success' => true)); + } else { + logger('repopath could not be created'); + notice('Repo coule not be cloned. Filesystem path error.'); + json_return_and_die(array('message' => 'Repo coule not be cloned. Filesystem path error', 'success' => false)); + } + } else { + json_return_and_die(array('message' => 'Repo already exists at: ' . $repopath, 'success' => true)); + } + } else { + json_return_and_die(array('message' => 'No repo URL provided', 'success' => false)); + } + break; + default: + break; + } + } + function admin_page_profs_post(&$a) { if(array_key_exists('basic',$_REQUEST)) { |