diff options
Diffstat (limited to 'Zotlabs/Module')
-rw-r--r-- | Zotlabs/Module/Admin.php | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index e1eaa6e0e..68508fdb0 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -1,5 +1,8 @@ <?php namespace Zotlabs\Module; + +use \Zotlabs\Storage\GitRepo as GitRepo; + /** * @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,25 @@ 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') + ) + ); + $newRepoModalID = random_string(3); + $newRepoModal = replace_macros( + get_markup_template('generic_modal.tpl'), array( + '$id' => $newRepoModalID, + '$title' => t('Install new repo'), + '$ok' => t('OK'), + '$cancel' => t('Cancel') + ) + ); + $t = get_markup_template('admin_plugins.tpl'); return replace_macros($t, array( '$title' => t('Administration'), @@ -1353,6 +1379,11 @@ 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, + '$newRepoModal' => $newRepoModal, + '$newRepoModalID' => $newRepoModalID )); } @@ -1647,6 +1678,36 @@ class Admin extends \Zotlabs\Web\Controller { )); } + function admin_page_plugins_post($action) { + switch($action) { + case 'addrepo': + require_once('library/markdown.php'); + if(array_key_exists('repoURL',$_REQUEST)) { + require __DIR__ . '/../../library/PHPGit.autoload.php'; // Load PHPGit dependencies + logger('Repo URL submitted: ' . $_REQUEST['repoURL']); + $repoURL = $_REQUEST['repoURL']; + $git = new GitRepo('sys', $repoURL, true); + + $repo = $git->probeRepo($git->path); + $repo['readme'] = $repo['manifest'] = null; + foreach ($git->git->tree('master') as $object) { + if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) { + $repo['readme'] = Markdown($git->git->cat->blob($object['hash'])); + } else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') { + $repo['manifest'] = $git->git->cat->blob($object['hash']); + } + } + json_return_and_die(array('repo'=> $repo, 'message' => '', '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)) { |