forked from joomla/Component-Builder
Update master #1
15
CHANGELOG.md
15
CHANGELOG.md
@ -10,3 +10,18 @@
|
||||
- We fixed the readme placeholder issue #978.
|
||||
- We fixed the empty server url issue #978.
|
||||
- Fixed Package import to now use the phplibsec version 3
|
||||
|
||||
# v3.1.24
|
||||
|
||||
- Fix the update server #978 issue.
|
||||
- Fixed the change log to load all entries, not just the last one.
|
||||
- Fixed #983 so that database updates are created when adding a new adminview
|
||||
- Moved a few builder arrays to the Compiler Registry
|
||||
- Adds super powers to JCB
|
||||
- Adds Gitea API library
|
||||
- Improves Power filters
|
||||
- Fix #991 to add the Utilities service class
|
||||
- Adds Superpower Key (SPK) replacement feature
|
||||
- Adds Superpower search (GREP) feature
|
||||
- Adds Power Insert/Update Classes
|
||||
- Fix #995 that all update sites are using the correct URL
|
18
README.md
18
README.md
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
||||
|
||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.19) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.24) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||
|
||||
@ -106,8 +106,8 @@ Where can you get support and help?
|
||||
- [Hello World](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45).
|
||||
- [Discussions](https://github.com/vdm-io/Joomla-Component-Builder/discussions).
|
||||
- [Wiki](https://git.vdm.dev/joomla/Component-Builder/wiki).
|
||||
- [Issues](https://git.vdm.dev/joomla/Component-Builder/issues).
|
||||
- [Issues Stream](https://t.me/jcb_issues). ^^
|
||||
- [Issues](https://git.vdm.dev/joomla/Component-Builder/issues). ^^
|
||||
- [Issues Stream](https://t.me/jcb_issues).
|
||||
- [Updates](https://t.me/jcb_updates).
|
||||
- [User Group](https://t.me/jcb_group).
|
||||
- [Announcement](https://t.me/Joomla_component_builder).
|
||||
@ -144,14 +144,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 27th February, 2023
|
||||
+ *Version*: 3.1.19
|
||||
+ *Last Build*: 2nd May, 2023
|
||||
+ *Version*: 3.1.24
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **366135**
|
||||
+ *Field count*: **2021**
|
||||
+ *File count*: **2339**
|
||||
+ *Folder count*: **411**
|
||||
+ *Line count*: **557762**
|
||||
+ *Field count*: **2041**
|
||||
+ *File count*: **3930**
|
||||
+ *Folder count*: **432**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||
|
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
||||
|
||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.19) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.24) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||
|
||||
@ -106,8 +106,8 @@ Where can you get support and help?
|
||||
- [Hello World](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45).
|
||||
- [Discussions](https://github.com/vdm-io/Joomla-Component-Builder/discussions).
|
||||
- [Wiki](https://git.vdm.dev/joomla/Component-Builder/wiki).
|
||||
- [Issues](https://git.vdm.dev/joomla/Component-Builder/issues).
|
||||
- [Issues Stream](https://t.me/jcb_issues). ^^
|
||||
- [Issues](https://git.vdm.dev/joomla/Component-Builder/issues). ^^
|
||||
- [Issues Stream](https://t.me/jcb_issues).
|
||||
- [Updates](https://t.me/jcb_updates).
|
||||
- [User Group](https://t.me/jcb_group).
|
||||
- [Announcement](https://t.me/Joomla_component_builder).
|
||||
@ -144,14 +144,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 27th February, 2023
|
||||
+ *Version*: 3.1.19
|
||||
+ *Last Build*: 2nd May, 2023
|
||||
+ *Version*: 3.1.24
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **366135**
|
||||
+ *Field count*: **2021**
|
||||
+ *File count*: **2339**
|
||||
+ *Folder count*: **411**
|
||||
+ *Line count*: **557762**
|
||||
+ *Field count*: **2041**
|
||||
+ *File count*: **3930**
|
||||
+ *Folder count*: **432**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||
|
@ -483,7 +483,10 @@
|
||||
<action name="placeholder.export" title="COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT" description="COM_COMPONENTBUILDER_PLACEHOLDERS_EXPORT_DESC" />
|
||||
<action name="placeholder.import" title="COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT" description="COM_COMPONENTBUILDER_PLACEHOLDERS_IMPORT_DESC" />
|
||||
<action name="placeholder.submenu" title="COM_COMPONENTBUILDER_PLACEHOLDERS_SUBMENU" description="COM_COMPONENTBUILDER_PLACEHOLDERS_SUBMENU_DESC" />
|
||||
<action name="power.init" title="COM_COMPONENTBUILDER_POWER_INIT_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_POWER_INIT_BUTTON_ACCESS_DESC" />
|
||||
<action name="power.reset" title="COM_COMPONENTBUILDER_POWER_RESET_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_POWER_RESET_BUTTON_ACCESS_DESC" />
|
||||
<action name="power.run_expansion" title="COM_COMPONENTBUILDER_POWER_RUN_EXPANSION_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_POWER_RUN_EXPANSION_BUTTON_ACCESS_DESC" />
|
||||
<action name="power.sync" title="COM_COMPONENTBUILDER_POWER_SYNC_BUTTON_ACCESS" description="COM_COMPONENTBUILDER_POWER_SYNC_BUTTON_ACCESS_DESC" />
|
||||
<action name="power.access" title="COM_COMPONENTBUILDER_POWERS_ACCESS" description="COM_COMPONENTBUILDER_POWERS_ACCESS_DESC" />
|
||||
<action name="power.batch" title="COM_COMPONENTBUILDER_POWERS_BATCH_USE" description="COM_COMPONENTBUILDER_POWERS_BATCH_USE_DESC" />
|
||||
<action name="power.create" title="COM_COMPONENTBUILDER_POWERS_CREATE" description="COM_COMPONENTBUILDER_POWERS_CREATE_DESC" />
|
||||
|
196
admin/config.xml
196
admin/config.xml
@ -679,6 +679,202 @@
|
||||
default=""
|
||||
/>
|
||||
</fieldset>
|
||||
<fieldset
|
||||
name="super_power_custom_config"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_SUPER_POWER">
|
||||
|
||||
<!-- Note_not_ready_super_powers Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_not_ready_super_powers" label="COM_COMPONENTBUILDER_CONFIG_NOTE_NOT_READY_SUPER_POWERS_LABEL" heading="h2" class="alert alert-error note_not_ready_super_powers" />
|
||||
<!-- Super_powers_documentation Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="super_powers_documentation"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_DOCUMENTATION_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_DOCUMENTATION_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="0">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_CONFIG_SHOW</option>
|
||||
<option value="0">
|
||||
COM_COMPONENTBUILDER_CONFIG_HIDE</option>
|
||||
</field>
|
||||
<!-- Note_super_powers Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_super_powers" label="COM_COMPONENTBUILDER_CONFIG_NOTE_SUPER_POWERS_LABEL" description="COM_COMPONENTBUILDER_CONFIG_NOTE_SUPER_POWERS_DESCRIPTION" heading="h4" class="alert alert-info note_super_powers" showon="super_powers_documentation:1" />
|
||||
<!-- Powers_repository Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="powers_repository"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_POWERS_REPOSITORY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_POWERS_REPOSITORY_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="0"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_CONFIG_YES</option>
|
||||
<option value="0">
|
||||
COM_COMPONENTBUILDER_CONFIG_NO</option>
|
||||
</field>
|
||||
<!-- Super_powers_repositories Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="super_powers_repositories"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_REPOSITORIES_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_REPOSITORIES_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="0"
|
||||
required="true"
|
||||
showon="powers_repository:1">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_CONFIG_YES</option>
|
||||
<option value="0">
|
||||
COM_COMPONENTBUILDER_CONFIG_NO</option>
|
||||
</field>
|
||||
<!-- Note_super_powers_repositories Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_super_powers_repositories" label="COM_COMPONENTBUILDER_CONFIG_NOTE_SUPER_POWERS_REPOSITORIES_LABEL" description="COM_COMPONENTBUILDER_CONFIG_NOTE_SUPER_POWERS_REPOSITORIES_DESCRIPTION" heading="h4" class="alert alert-info note_super_powers_repositories" showon="powers_repository:1[AND]super_powers_repositories:1" />
|
||||
<!-- Approved_paths Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
name="approved_paths"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_APPROVED_PATHS_LABEL"
|
||||
layout="joomla.form.field.subform.repeatable-table"
|
||||
multiple="true"
|
||||
buttons="add,remove,move"
|
||||
icon="list"
|
||||
max="30"
|
||||
min="1"
|
||||
showon="powers_repository:1[AND]super_powers_repositories:1">
|
||||
<form hidden="true" name="list_approved_paths_modal" repeat="true">
|
||||
<!-- Owner Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="owner"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_OWNER_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
class="text_area span12"
|
||||
readonly="false"
|
||||
filter="CMD"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_OWNER_HINT"
|
||||
autocomplete="on"
|
||||
/>
|
||||
<!-- Repo Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="repo"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_REPO_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
class="text_area span12"
|
||||
readonly="false"
|
||||
filter="CMD"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_REPO_HINT"
|
||||
autocomplete="on"
|
||||
/>
|
||||
<!-- Branch Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="branch"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_BRANCH_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
default="default"
|
||||
class="text_area span12"
|
||||
readonly="false"
|
||||
filter="CMD"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_BRANCH_HINT"
|
||||
autocomplete="on"
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Note_powers_repository_path Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_powers_repository_path" label="COM_COMPONENTBUILDER_CONFIG_NOTE_POWERS_REPOSITORY_PATH_LABEL" description="COM_COMPONENTBUILDER_CONFIG_NOTE_POWERS_REPOSITORY_PATH_DESCRIPTION" heading="h4" class="alert alert-info note_powers_repository_path" showon="powers_repository:1" />
|
||||
<!-- Local_powers_repository_path Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="local_powers_repository_path"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_DESCRIPTION"
|
||||
class="text_area"
|
||||
readonly="false"
|
||||
disabled="false"
|
||||
required="false"
|
||||
filter="PATH"
|
||||
message="COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_MESSAGE"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_HINT"
|
||||
autocomplete="on"
|
||||
showon="powers_repository:1"
|
||||
/>
|
||||
<!-- Add_custom_gitea_url Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="add_custom_gitea_url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_ADD_CUSTOM_GITEA_URL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_ADD_CUSTOM_GITEA_URL_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="1">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_CONFIG_GITVDMDEV</option>
|
||||
<option value="2">
|
||||
COM_COMPONENTBUILDER_CONFIG_CUSTOMGITEA</option>
|
||||
</field>
|
||||
<!-- Note_custom_gitea_url Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_custom_gitea_url" label="COM_COMPONENTBUILDER_CONFIG_NOTE_CUSTOM_GITEA_URL_LABEL" description="COM_COMPONENTBUILDER_CONFIG_NOTE_CUSTOM_GITEA_URL_DESCRIPTION" heading="h3" class="alert alert-success note_custom_gitea_url" showon="add_custom_gitea_url:2" />
|
||||
<!-- Custom_gitea_url Field. Type: Url. (joomla) -->
|
||||
<field
|
||||
type="url"
|
||||
name="custom_gitea_url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_URL_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
default="https://git.vdm.dev"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_URL_DESCRIPTION"
|
||||
class="text_area"
|
||||
filter="url"
|
||||
validated="url"
|
||||
scheme="http,https"
|
||||
message="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_URL_MESSAGE"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_URL_HINT"
|
||||
autocomplete="on"
|
||||
showon="add_custom_gitea_url:2"
|
||||
/>
|
||||
<!-- Custom_gitea_token Field. Type: Password. (joomla) -->
|
||||
<field
|
||||
type="password"
|
||||
name="custom_gitea_token"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_TOKEN_LABEL"
|
||||
size="128"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_TOKEN_DESCRIPTION"
|
||||
message="Error! Please add token here."
|
||||
class="text_area"
|
||||
readonly="false"
|
||||
disabled="false"
|
||||
required="false"
|
||||
filter="STRING"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_CUSTOM_GITEA_TOKEN_HINT"
|
||||
autocomplete="off"
|
||||
showon="add_custom_gitea_url:2"
|
||||
/>
|
||||
<!-- Super_powers_core Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="super_powers_core"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_CORE_LABEL"
|
||||
size="70"
|
||||
maxlength="150"
|
||||
default="joomla/super-powers"
|
||||
class="text_area"
|
||||
filter="PATH"
|
||||
hint="COM_COMPONENTBUILDER_CONFIG_SUPER_POWERS_CORE_HINT"
|
||||
autocomplete="on"
|
||||
showon="add_custom_gitea_url:2"
|
||||
/>
|
||||
</fieldset>
|
||||
<fieldset
|
||||
name="compiler_custom_config"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_COMPILER">
|
||||
|
@ -42,6 +42,94 @@ class ComponentbuilderControllerPower extends FormController
|
||||
parent::__construct($config);
|
||||
}
|
||||
|
||||
public function syncPowers()
|
||||
{
|
||||
// Check for request forgeries
|
||||
JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
|
||||
|
||||
// get IDS of the selected powers
|
||||
$item = $this->input->post->get('jform', array(), 'array');
|
||||
|
||||
// check if there is any selections
|
||||
if (empty($item['id']))
|
||||
{
|
||||
// set error message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_NOT_SAVED').'</h1>';
|
||||
$message .= '<p>'.JText::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = \JRoute::_(
|
||||
'index.php?option=com_componentbuilder&view=power'
|
||||
. $this->getRedirectToItemAppend(), false
|
||||
);
|
||||
$this->setRedirect($redirect_url, $message, 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if user has the right
|
||||
$user = JFactory::getUser();
|
||||
if($user->authorise('power.sync', 'com_componentbuilder'))
|
||||
{
|
||||
// set success message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_THIS_SYNC_FEATURE_IS_STILL_UNDER_DEVELOPMENT').'</h1>';
|
||||
$message .= '<p>'.JText::sprintf('COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_SOON_ANDOR_FOLLOW_THE_PROGRESS_ON_SGITVDMDEVA', '<a href="https://git.vdm.dev/joomla/Component-Builder/issues/984" target="_blank">').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = \JRoute::_(
|
||||
'index.php?option=com_componentbuilder&view=power'
|
||||
. $this->getRedirectToItemAppend($item['id']), false
|
||||
);
|
||||
$this->setRedirect($redirect_url, $message);
|
||||
return true;
|
||||
}
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url);
|
||||
return false;
|
||||
}
|
||||
|
||||
public function resetPowers()
|
||||
{
|
||||
// Check for request forgeries
|
||||
JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
|
||||
|
||||
// get IDS of the selected powers
|
||||
$item = $this->input->post->get('jform', array(), 'array');
|
||||
|
||||
// check if there is any selections
|
||||
if (empty($item['id']))
|
||||
{
|
||||
// set error message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_NOT_SAVED').'</h1>';
|
||||
$message .= '<p>'.JText::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = \JRoute::_(
|
||||
'index.php?option=com_componentbuilder&view=power'
|
||||
. $this->getRedirectToItemAppend(), false
|
||||
);
|
||||
$this->setRedirect($redirect_url, $message, 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if user has the right
|
||||
$user = JFactory::getUser();
|
||||
if($user->authorise('power.reset', 'com_componentbuilder'))
|
||||
{
|
||||
// set success message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_THIS_RESET_FEATURE_IS_STILL_UNDER_DEVELOPMENT').'</h1>';
|
||||
$message .= '<p>'.JText::sprintf('COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_SOON_ANDOR_FOLLOW_THE_PROGRESS_ON_SGITVDMDEVA', '<a href="https://git.vdm.dev/joomla/Component-Builder/issues/984" target="_blank">').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = \JRoute::_(
|
||||
'index.php?option=com_componentbuilder&view=power'
|
||||
. $this->getRedirectToItemAppend($item['id']), false
|
||||
);
|
||||
$this->setRedirect($redirect_url, $message);
|
||||
return true;
|
||||
}
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method override to check if you can add a new record.
|
||||
*
|
||||
|
@ -84,4 +84,108 @@ class ComponentbuilderControllerPowers extends AdminController
|
||||
return false;
|
||||
}
|
||||
|
||||
public function initPowers()
|
||||
{
|
||||
// Check for request forgeries
|
||||
JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
|
||||
// check if user has the right
|
||||
$user = JFactory::getUser();
|
||||
if($user->authorise('power.init', 'com_componentbuilder'))
|
||||
{
|
||||
// set success message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_THIS_INIT_FEATURE_IS_STILL_UNDER_DEVELOPMENT').'</h1>';
|
||||
$message .= '<p>'.JText::sprintf('COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_SOON_ANDOR_FOLLOW_THE_PROGRESS_ON_SGITVDMDEVA', '<a href="https://git.vdm.dev/joomla/Component-Builder/issues/984" target="_blank">').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url, $message);
|
||||
return true;
|
||||
}
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url);
|
||||
return false;
|
||||
}
|
||||
|
||||
public function syncPowers()
|
||||
{
|
||||
// Check for request forgeries
|
||||
JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
|
||||
|
||||
// get IDS of the selected powers
|
||||
$pks = $this->input->post->get('cid', [], 'array');
|
||||
|
||||
// Sanitize the input
|
||||
JArrayHelper::toInteger($pks);
|
||||
|
||||
// check if there is any selections
|
||||
if ($pks == [])
|
||||
{
|
||||
// set error message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').'</h1>';
|
||||
$message .= '<p>'.JText::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url, $message, 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if user has the right
|
||||
$user = JFactory::getUser();
|
||||
if($user->authorise('power.sync', 'com_componentbuilder'))
|
||||
{
|
||||
// set success message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_THIS_SYNC_FEATURE_IS_STILL_UNDER_DEVELOPMENT').'</h1>';
|
||||
$message .= '<p>'.JText::sprintf('COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_SOON_ANDOR_FOLLOW_THE_PROGRESS_ON_SGITVDMDEVA', '<a href="https://git.vdm.dev/joomla/Component-Builder/issues/984" target="_blank">').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url, $message);
|
||||
return true;
|
||||
}
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url);
|
||||
return false;
|
||||
}
|
||||
|
||||
public function resetPowers()
|
||||
{
|
||||
// Check for request forgeries
|
||||
JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
|
||||
|
||||
// get IDS of the selected powers
|
||||
$pks = $this->input->post->get('cid', [], 'array');
|
||||
|
||||
// Sanitize the input
|
||||
JArrayHelper::toInteger($pks);
|
||||
|
||||
// check if there is any selections
|
||||
if ($pks == [])
|
||||
{
|
||||
// set error message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').'</h1>';
|
||||
$message .= '<p>'.JText::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url, $message, 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if user has the right
|
||||
$user = JFactory::getUser();
|
||||
if($user->authorise('power.reset', 'com_componentbuilder'))
|
||||
{
|
||||
// set success message
|
||||
$message = '<h1>'.JText::_('COM_COMPONENTBUILDER_THIS_RESET_FEATURE_IS_STILL_UNDER_DEVELOPMENT').'</h1>';
|
||||
$message .= '<p>'.JText::sprintf('COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_SOON_ANDOR_FOLLOW_THE_PROGRESS_ON_SGITVDMDEVA', '<a href="https://git.vdm.dev/joomla/Component-Builder/issues/984" target="_blank">').'</p>';
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url, $message);
|
||||
return true;
|
||||
}
|
||||
// set redirect
|
||||
$redirect_url = JRoute::_('index.php?option=com_componentbuilder&view=powers', false);
|
||||
$this->setRedirect($redirect_url);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -603,6 +603,31 @@ class Compiler extends Infusion
|
||||
}
|
||||
}
|
||||
}
|
||||
// do super powers details if found
|
||||
if (ArrayHelper::check(CFactory::_('Power')->superpowers))
|
||||
{
|
||||
foreach (CFactory::_('Power')->superpowers as $path => $powers)
|
||||
{
|
||||
$key = StringHelper::safe($path);
|
||||
if (CFactory::_('Utilities.Files')->exists($key))
|
||||
{
|
||||
// update the power files
|
||||
foreach (CFactory::_('Utilities.Files')->get($key) as $power_file)
|
||||
{
|
||||
if (File::exists($power_file['path']))
|
||||
{
|
||||
$this->setFileContent(
|
||||
$power_file['name'], $power_file['path'],
|
||||
$bom, $key
|
||||
);
|
||||
}
|
||||
}
|
||||
// free up some memory
|
||||
CFactory::_('Utilities.Files')->remove($key);
|
||||
CFactory::_('Content')->remove_($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -680,6 +705,9 @@ class Compiler extends Infusion
|
||||
&$view)
|
||||
);
|
||||
|
||||
// inject any super powers found
|
||||
$answer = CFactory::_('Power.Injector')->power($answer);
|
||||
|
||||
// add answer back to file
|
||||
CFactory::_('Utilities.File')->write($path, $answer);
|
||||
|
||||
@ -1384,7 +1412,7 @@ class Compiler extends Infusion
|
||||
if ($found && !$foundEnd)
|
||||
{
|
||||
$replace[] = (int) $lineBites[$lineNumber];
|
||||
// we musk keep last three lines to dynamic find target entry
|
||||
// we must keep last three lines to dynamic find target entry
|
||||
$fingerPrint[$lineNumber] = trim($lineContent);
|
||||
// check lines each time if it fits our target
|
||||
if (count((array) $fingerPrint) === $sizeEnd
|
||||
@ -1413,7 +1441,7 @@ class Compiler extends Infusion
|
||||
{
|
||||
$replace[] = (int) $lineBites[$lineNumber];
|
||||
}
|
||||
// we musk keep last three lines to dynamic find target entry
|
||||
// we must keep last three lines to dynamic find target entry
|
||||
$fingerPrint[$lineNumber] = trim($lineContent);
|
||||
// check lines each time if it fits our target
|
||||
if (count((array) $fingerPrint) === $size && !$found)
|
||||
@ -1535,7 +1563,7 @@ class Compiler extends Infusion
|
||||
$code = PHP_EOL . $commentType . implode(
|
||||
$_commentType . PHP_EOL . $commentType, $code
|
||||
) . $_commentType . PHP_EOL;
|
||||
// get place holders
|
||||
// get placeholders
|
||||
$placeholder = CFactory::_('Placeholder')->keys(
|
||||
(int) $target['comment_type'] . $target['type'], $target['id']
|
||||
);
|
||||
@ -1554,37 +1582,55 @@ class Compiler extends Infusion
|
||||
$this->addDataToFile($file, $data, (int) array_sum($bitBucket));
|
||||
}
|
||||
|
||||
// Thanks to http://stackoverflow.com/a/16813550/1429677
|
||||
protected function addDataToFile($file, $data, $position, $replace = null)
|
||||
/**
|
||||
* Inserts or replaces data in a file at a specific position.
|
||||
* Thanks to http://stackoverflow.com/a/16813550/1429677
|
||||
*
|
||||
* @param string $file The path of the file to modify
|
||||
* @param string $data The data to insert or replace
|
||||
* @param int $position The position in the file where the data should be inserted or replaced
|
||||
* @param int|null $replace The number of bytes to replace; if null, data will be inserted
|
||||
*
|
||||
* @return void
|
||||
* @throws RuntimeException if unable to open the file
|
||||
*/
|
||||
protected function addDataToFile(string $file, string $data, int $position, ?int $replace = null)
|
||||
{
|
||||
// start the process
|
||||
$fpFile = fopen($file, "rw+");
|
||||
$fpTemp = fopen('php://temp', "rw+");
|
||||
// make a copy of the file
|
||||
stream_copy_to_stream($fpFile, $fpTemp);
|
||||
// move to the position where we should add the data
|
||||
fseek($fpFile, $position);
|
||||
// Add the data
|
||||
fwrite($fpFile, (string) $data);
|
||||
// truncate file at the end of the data that was added
|
||||
$remove = MathHelper::bc(
|
||||
'add', $position, mb_strlen((string) $data, '8bit')
|
||||
);
|
||||
ftruncate($fpFile, $remove);
|
||||
// check if this was a replacement of data
|
||||
if ($replace)
|
||||
// Open the file and a temporary stream
|
||||
$actual_file = fopen($file, "rw+");
|
||||
if ($actual_file === false)
|
||||
{
|
||||
$position = MathHelper::bc(
|
||||
'add', $position, $replace
|
||||
);
|
||||
throw new RuntimeException("Unable to open the file: {$file}");
|
||||
}
|
||||
// move to the position of the data that should remain below the new data
|
||||
fseek($fpTemp, $position);
|
||||
// copy that remaining data to the file
|
||||
stream_copy_to_stream($fpTemp, $fpFile); // @Jack
|
||||
// done close both files
|
||||
fclose($fpFile);
|
||||
fclose($fpTemp);
|
||||
|
||||
$temp_file = fopen('php://temp', "rw+");
|
||||
|
||||
// Make a copy of the file in the temporary stream
|
||||
stream_copy_to_stream($actual_file, $temp_file);
|
||||
|
||||
// Move to the position where the data should be added
|
||||
fseek($actual_file, $position);
|
||||
|
||||
// Add the data
|
||||
fwrite($actual_file, $data);
|
||||
|
||||
// Truncate the file at the end of the added data if replacing
|
||||
$data_length = mb_strlen($data, '8bit');
|
||||
$remove = MathHelper::bc('add', $position, $data_length);
|
||||
ftruncate($actual_file, $remove);
|
||||
|
||||
// check if this was a replacement of data
|
||||
$position = MathHelper::bc('add', $position, $replace ?: 0);
|
||||
|
||||
// Move to the position of the remaining data in the temporary stream
|
||||
fseek($temp_file, $position);
|
||||
|
||||
// Copy the remaining data from the temporary stream to the file
|
||||
stream_copy_to_stream($temp_file, $actual_file);
|
||||
|
||||
// Close both file handles
|
||||
fclose($actual_file);
|
||||
fclose($temp_file);
|
||||
|
||||
// any help to improve this is welcome...
|
||||
}
|
||||
|
@ -1144,8 +1144,13 @@ class Get
|
||||
));
|
||||
}
|
||||
|
||||
// get powers *+*+*+*+*+*+*+*PRO
|
||||
// load powers *+*+*+*+*+*+*+*
|
||||
CFactory::_('Power')->load($this->linkedPowers);
|
||||
// load any other super powers that was found
|
||||
if (($super_powers = CFactory::_('Power.Extractor')->get_()) !== null)
|
||||
{
|
||||
CFactory::_('Power')->load($super_powers);
|
||||
}
|
||||
// set the percentage when a language can be added
|
||||
$this->percentageLanguageAdd = (int) $this->params->get(
|
||||
'percentagelanguageadd', 50
|
||||
|
@ -34,6 +34,7 @@ class Fields extends Structure
|
||||
* Metadate Switch
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.meta_data');
|
||||
*/
|
||||
public $metadataBuilder = array();
|
||||
|
||||
@ -41,6 +42,7 @@ class Fields extends Structure
|
||||
* View access Switch
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.access_switch');
|
||||
*/
|
||||
public $accessBuilder = array();
|
||||
|
||||
@ -48,6 +50,7 @@ class Fields extends Structure
|
||||
* edit view tabs counter
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.tab_counter');
|
||||
*/
|
||||
public $tabCounter = array();
|
||||
|
||||
@ -55,6 +58,7 @@ class Fields extends Structure
|
||||
* layout builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.layout');
|
||||
*/
|
||||
public $layoutBuilder = array();
|
||||
|
||||
@ -62,6 +66,7 @@ class Fields extends Structure
|
||||
* permissions builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.has_permissions');
|
||||
*/
|
||||
public $hasPermissions = array();
|
||||
|
||||
@ -83,6 +88,7 @@ class Fields extends Structure
|
||||
* list of fields that are not being escaped
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.do_not_escape');
|
||||
*/
|
||||
public $doNotEscape = array();
|
||||
|
||||
@ -90,6 +96,7 @@ class Fields extends Structure
|
||||
* list of classes used in the list view for the fields
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->set('builder.list_field_class');
|
||||
*/
|
||||
public $listFieldClass = array();
|
||||
|
||||
@ -97,6 +104,7 @@ class Fields extends Structure
|
||||
* tags builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.tags');
|
||||
*/
|
||||
public $tagsBuilder = array();
|
||||
|
||||
@ -104,6 +112,7 @@ class Fields extends Structure
|
||||
* query builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.database_tables');
|
||||
*/
|
||||
public $queryBuilder = array();
|
||||
|
||||
@ -111,6 +120,7 @@ class Fields extends Structure
|
||||
* unique keys for database field
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.database_unique_keys');
|
||||
*/
|
||||
public $dbUniqueKeys = array();
|
||||
|
||||
@ -118,6 +128,7 @@ class Fields extends Structure
|
||||
* unique guid swtich
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.database_unique_guid');
|
||||
*/
|
||||
public $dbUniqueGuid = array();
|
||||
|
||||
@ -125,6 +136,7 @@ class Fields extends Structure
|
||||
* keys for database field
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.database_keys');
|
||||
*/
|
||||
public $dbKeys = array();
|
||||
|
||||
@ -132,6 +144,7 @@ class Fields extends Structure
|
||||
* history builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.history');
|
||||
*/
|
||||
public $historyBuilder = array();
|
||||
|
||||
@ -139,6 +152,7 @@ class Fields extends Structure
|
||||
* alias builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 CFactory::_('Registry')->get('builder.alias');
|
||||
*/
|
||||
public $aliasBuilder = array();
|
||||
|
||||
@ -146,6 +160,7 @@ class Fields extends Structure
|
||||
* title builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 CFactory::_('Registry')->get('builder.title');
|
||||
*/
|
||||
public $titleBuilder = array();
|
||||
|
||||
@ -161,6 +176,7 @@ class Fields extends Structure
|
||||
* custom Builder List
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.custom_list');
|
||||
*/
|
||||
public $customBuilderList = array();
|
||||
|
||||
@ -168,6 +184,7 @@ class Fields extends Structure
|
||||
* Hidden Fields Builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.hidden_fields');
|
||||
*/
|
||||
public $hiddenFieldsBuilder = array();
|
||||
|
||||
@ -175,6 +192,7 @@ class Fields extends Structure
|
||||
* INT Field Builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.integer_fields');
|
||||
*/
|
||||
public $intFieldsBuilder = array();
|
||||
|
||||
@ -182,6 +200,7 @@ class Fields extends Structure
|
||||
* Dynamic Fields Builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.dynamic_fields');
|
||||
*/
|
||||
public $dynamicfieldsBuilder = array();
|
||||
|
||||
@ -189,6 +208,7 @@ class Fields extends Structure
|
||||
* Main text Builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.main_text_field');
|
||||
*/
|
||||
public $maintextBuilder = array();
|
||||
|
||||
@ -203,6 +223,7 @@ class Fields extends Structure
|
||||
* Custom Field Links Builder
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.custom_field_links');
|
||||
*/
|
||||
public $customFieldLinksBuilder = array();
|
||||
|
||||
@ -357,6 +378,7 @@ class Fields extends Structure
|
||||
* Set Field Names
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.field_names');
|
||||
*/
|
||||
public $fieldsNames = array();
|
||||
|
||||
@ -364,6 +386,7 @@ class Fields extends Structure
|
||||
* Default Fields set to publishing
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->set('builder.new_publishing_fields');
|
||||
*/
|
||||
public $newPublishingFields = array();
|
||||
|
||||
@ -371,6 +394,7 @@ class Fields extends Structure
|
||||
* Default Fields set to publishing
|
||||
*
|
||||
* @var array
|
||||
* @deprecated 3.3 Use CFactory::_('Registry')->get('builder.moved_publishing_fields');
|
||||
*/
|
||||
public $movedPublishingFields = array();
|
||||
|
||||
@ -395,12 +419,13 @@ class Fields extends Structure
|
||||
// add metadata to the view
|
||||
if (isset($view['metadata']) && $view['metadata'])
|
||||
{
|
||||
$this->metadataBuilder[$nameSingleCode] = $nameListCode;
|
||||
CFactory::_('Registry')->set('builder.meta_data.' . $nameSingleCode, $nameListCode);
|
||||
}
|
||||
// add access to the view
|
||||
if (isset($view['access']) && $view['access'])
|
||||
{
|
||||
$this->accessBuilder[$nameSingleCode] = $nameListCode;
|
||||
CFactory::_('Registry')->set('builder.access_switch.' . $nameSingleCode, true);
|
||||
CFactory::_('Registry')->set('builder.access_switch_list.' . $nameListCode, true);
|
||||
}
|
||||
// main lang prefix
|
||||
$langView = CFactory::_('Config')->lang_prefix . '_'
|
||||
@ -647,7 +672,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Id Field. Type: Text (joomla) -->";
|
||||
// if id is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['id']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.id'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<field";
|
||||
$fieldSet[] = Indent::_(3) . "name=" . '"id"';
|
||||
@ -661,7 +686,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if created is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.created'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Date Created Field. Type: Calendar (joomla) -->";
|
||||
@ -684,7 +709,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if created_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created_by']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.created_by'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " User Created Field. Type: User (joomla) -->";
|
||||
@ -704,7 +729,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.published'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Published Field. Type: List (joomla) -->";
|
||||
@ -731,7 +756,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if modified is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.modified'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Date Modified Field. Type: Calendar (joomla) -->";
|
||||
@ -746,7 +771,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if modified_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified_by']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.modified_by'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " User Modified Field. Type: User (joomla) -->";
|
||||
@ -764,11 +789,8 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// check if view has access
|
||||
if (isset($this->accessBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->accessBuilder[$nameSingleCode]
|
||||
)
|
||||
&& !isset($this->fieldsNames[$nameSingleCode]['access']))
|
||||
if (CFactory::_('Registry')->exists('builder.access_switch.' . $nameSingleCode)
|
||||
&& !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.access'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Access Field. Type: Accesslevel (joomla) -->";
|
||||
@ -787,7 +809,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if ordering is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['ordering']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.ordering'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Ordering Field. Type: Numbers (joomla) -->";
|
||||
@ -810,7 +832,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if version is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['version']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.version'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Version Field. Type: Text (joomla) -->";
|
||||
@ -830,13 +852,10 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->metadataBuilder[$nameSingleCode]
|
||||
))
|
||||
if (CFactory::_('Registry')->isString('builder.meta_data.' . $nameSingleCode))
|
||||
{
|
||||
// metakey
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metakey']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.metakey'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Metakey Field. Type: Textarea (joomla) -->";
|
||||
@ -854,7 +873,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// metadesc
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metadesc']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.metadesc'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(2) . "<!--" . Line::_(__Line__, __Class__)
|
||||
. " Metadesc Field. Type: Textarea (joomla) -->";
|
||||
@ -874,7 +893,7 @@ class Fields extends Structure
|
||||
}
|
||||
// fix the permissions field "title" issue gh-629
|
||||
// check if the the title is not already set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['title'])
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.title')
|
||||
&& $this->hasPermissionsSet($view, $nameSingleCode))
|
||||
{
|
||||
// set the field/tab name
|
||||
@ -916,14 +935,11 @@ class Fields extends Structure
|
||||
// close fieldset
|
||||
$fieldSet[] = Indent::_(1) . "</fieldset>";
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->metadataBuilder[$nameSingleCode]
|
||||
))
|
||||
if (CFactory::_('Registry')->isString('builder.meta_data.' . $nameSingleCode))
|
||||
{
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['robots'])
|
||||
|| !isset($this->fieldsNames[$nameSingleCode]['rights'])
|
||||
|| !isset($this->fieldsNames[$nameSingleCode]['author']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.robots')
|
||||
|| !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.rights')
|
||||
|| !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.author'))
|
||||
{
|
||||
$fieldSet[] = PHP_EOL . Indent::_(1) . "<!--" . Line::_(
|
||||
__LINE__,__CLASS__
|
||||
@ -934,7 +950,7 @@ class Fields extends Structure
|
||||
$fieldSet[] = Indent::_(3)
|
||||
. 'label="JGLOBAL_FIELDSET_METADATA_OPTIONS">';
|
||||
// robots
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['robots']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.robots'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(3) . "<!--" . Line::_(
|
||||
__LINE__,__CLASS__
|
||||
@ -960,7 +976,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// author
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['author']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.author'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(3) . "<!--" . Line::_(
|
||||
__LINE__,__CLASS__
|
||||
@ -975,7 +991,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// rights
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['rights']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.rights'))
|
||||
{
|
||||
$fieldSet[] = Indent::_(3) . "<!--" . Line::_(
|
||||
__LINE__,__CLASS__
|
||||
@ -1069,7 +1085,7 @@ class Fields extends Structure
|
||||
Line::_(__Line__, __Class__) . " Id Field. Type: Text (joomla)"
|
||||
);
|
||||
// if id is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['id']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.id'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'id',
|
||||
@ -1087,7 +1103,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if created is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.created'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'created',
|
||||
@ -1109,7 +1125,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if created_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['created_by']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.created_by'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'created_by',
|
||||
@ -1128,7 +1144,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.published'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'published',
|
||||
@ -1155,7 +1171,7 @@ class Fields extends Structure
|
||||
}
|
||||
}
|
||||
// if modified is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.modified'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'modified',
|
||||
@ -1178,7 +1194,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if modified_by is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['modified_by']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.modified_by'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'modified_by',
|
||||
@ -1199,11 +1215,8 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// check if view has access
|
||||
if (isset($this->accessBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->accessBuilder[$nameSingleCode]
|
||||
)
|
||||
&& !isset($this->fieldsNames[$nameSingleCode]['access']))
|
||||
if (CFactory::_('Registry')->exists('builder.access_switch.' . $nameSingleCode)
|
||||
&& !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.access'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'access',
|
||||
@ -1224,7 +1237,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if ordering is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['ordering']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.ordering'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'ordering',
|
||||
@ -1247,7 +1260,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// if version is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['version']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.version'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'version',
|
||||
@ -1269,13 +1282,10 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->metadataBuilder[$nameSingleCode]
|
||||
))
|
||||
if (CFactory::_('Registry')->isString('builder.meta_data.' . $nameSingleCode))
|
||||
{
|
||||
// metakey
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metakey']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.metakey'))
|
||||
{
|
||||
$attributes = array(
|
||||
'name' => 'metakey',
|
||||
@ -1297,7 +1307,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// metadesc
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['metadesc']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.metadesc'))
|
||||
{
|
||||
$attributes['name'] = 'metadesc';
|
||||
$attributes['label'] = 'JFIELD_META_DESCRIPTION_LABEL';
|
||||
@ -1316,7 +1326,7 @@ class Fields extends Structure
|
||||
}
|
||||
// fix the permissions field "title" issue gh-629
|
||||
// check if the the title is not already set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['title'])
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.title')
|
||||
&& $this->hasPermissionsSet($view, $nameSingleCode))
|
||||
{
|
||||
// set the field/tab name
|
||||
@ -1369,14 +1379,11 @@ class Fields extends Structure
|
||||
}
|
||||
}
|
||||
// check if metadata is added to this view
|
||||
if (isset($this->metadataBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->metadataBuilder[$nameSingleCode]
|
||||
))
|
||||
if (CFactory::_('Registry')->isString('builder.meta_data.' . $nameSingleCode))
|
||||
{
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['robots'])
|
||||
|| !isset($this->fieldsNames[$nameSingleCode]['author'])
|
||||
|| !isset($this->fieldsNames[$nameSingleCode]['rights']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.robots')
|
||||
|| !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.author')
|
||||
|| !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.rights'))
|
||||
{
|
||||
ComponentbuilderHelper::xmlComment(
|
||||
$fieldSetXML, Line::_(__Line__, __Class__) . " Metadata Fields"
|
||||
@ -1392,7 +1399,7 @@ class Fields extends Structure
|
||||
'label', 'JGLOBAL_FIELDSET_METADATA_OPTIONS'
|
||||
);
|
||||
// robots
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['robots']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.robots'))
|
||||
{
|
||||
ComponentbuilderHelper::xmlComment(
|
||||
$fieldsFieldSetXML, Line::_(__Line__, __Class__)
|
||||
@ -1425,7 +1432,7 @@ class Fields extends Structure
|
||||
}
|
||||
}
|
||||
// author
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['author']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.author'))
|
||||
{
|
||||
ComponentbuilderHelper::xmlComment(
|
||||
$fieldsFieldSetXML, Line::_(__Line__, __Class__)
|
||||
@ -1446,7 +1453,7 @@ class Fields extends Structure
|
||||
CFactory::_('Utilities.Counter')->field++;
|
||||
}
|
||||
// rights
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['rights']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.rights'))
|
||||
{
|
||||
ComponentbuilderHelper::xmlComment(
|
||||
$fieldsFieldSetXML, Line::_(__Line__, __Class__)
|
||||
@ -1488,16 +1495,14 @@ class Fields extends Structure
|
||||
protected function hasPermissionsSet(&$view, &$nameSingleCode)
|
||||
{
|
||||
// first check if we have checked this already
|
||||
if (!isset($this->hasPermissions[$nameSingleCode]))
|
||||
if (!CFactory::_('Registry')->exists('builder.has_permissions.' . $nameSingleCode))
|
||||
{
|
||||
// default is false
|
||||
$this->hasPermissions[$nameSingleCode] = false;
|
||||
// when a view has history, it has permissions
|
||||
// since it tracks the version access
|
||||
if (isset($view['history']) && $view['history'] == 1)
|
||||
{
|
||||
// set the permission for later
|
||||
$this->hasPermissions[$nameSingleCode] = true;
|
||||
CFactory::_('Registry')->set('builder.has_permissions.' . $nameSingleCode, true);
|
||||
|
||||
// break out here
|
||||
return true;
|
||||
@ -1520,7 +1525,7 @@ class Fields extends Structure
|
||||
))
|
||||
{
|
||||
// set the permission for later
|
||||
$this->hasPermissions[$nameSingleCode] = true;
|
||||
CFactory::_('Registry')->set('builder.has_permissions.' . $nameSingleCode, true);
|
||||
|
||||
// break out here
|
||||
return true;
|
||||
@ -1543,7 +1548,7 @@ class Fields extends Structure
|
||||
))
|
||||
{
|
||||
// set the permission for later
|
||||
$this->hasPermissions[$nameSingleCode] = true;
|
||||
CFactory::_('Registry')->set('builder.has_permissions.' . $nameSingleCode, true);
|
||||
|
||||
// break out here
|
||||
return true;
|
||||
@ -1552,7 +1557,7 @@ class Fields extends Structure
|
||||
}
|
||||
}
|
||||
|
||||
return $this->hasPermissions[$nameSingleCode];
|
||||
return CFactory::_('Registry')->exists('builder.has_permissions.' . $nameSingleCode);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1565,7 +1570,7 @@ class Fields extends Structure
|
||||
*/
|
||||
public function setFieldsNames(&$view, &$name)
|
||||
{
|
||||
$this->fieldsNames[$view][$name] = $name;
|
||||
CFactory::_('Registry')->set('builder.field_names.' . $view . '.' . $name, $name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3934,21 +3939,15 @@ class Fields extends Structure
|
||||
// as zero is expected to behave
|
||||
if ($field['order_edit'] == 0)
|
||||
{
|
||||
if (!isset($this->zeroOrderFix[$nameSingleCode]))
|
||||
// get the value
|
||||
$zero_counter = CFactory::_('Registry')->get('builder.zero_order_fix.' . $nameSingleCode . '.' . $field['tab'], -999);
|
||||
if ($zero_counter != -999)
|
||||
{
|
||||
$this->zeroOrderFix[$nameSingleCode] = array();
|
||||
$zero_counter++;
|
||||
}
|
||||
if (!isset($this->zeroOrderFix[$nameSingleCode][(int) $field['tab']]))
|
||||
{
|
||||
$this->zeroOrderFix[$nameSingleCode][(int) $field['tab']]
|
||||
= -999;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->zeroOrderFix[$nameSingleCode][(int) $field['tab']]++;
|
||||
}
|
||||
$field['order_edit']
|
||||
= $this->zeroOrderFix[$nameSingleCode][(int) $field['tab']];
|
||||
$field['order_edit'] = $zero_counter;
|
||||
// set the value
|
||||
CFactory::_('Registry')->set('builder.zero_order_fix.' . $nameSingleCode . '.' . $field['tab'], $zero_counter);
|
||||
}
|
||||
// get the default fields
|
||||
$default_fields = CFactory::_('Config')->default_fields;
|
||||
@ -3956,80 +3955,98 @@ class Fields extends Structure
|
||||
if (StringHelper::check($tabName)
|
||||
&& strtolower($tabName) != 'publishing')
|
||||
{
|
||||
$this->tabCounter[$nameSingleCode][(int) $field['tab']]
|
||||
= $tabName;
|
||||
if (isset($this->layoutBuilder[$nameSingleCode][$tabName][(int) $field['alignment']][(int) $field['order_edit']]))
|
||||
CFactory::_('Registry')->set('builder.tab_counter.' . $nameSingleCode . '.' . $field['tab'], $tabName);
|
||||
if (CFactory::_('Registry')->exists('builder.layout.' . $nameSingleCode . '.' . $tabName . '.'
|
||||
. $field['alignment'] . '.' . $field['order_edit']))
|
||||
{
|
||||
$size = (int) count(
|
||||
(array) $this->layoutBuilder[$nameSingleCode][$tabName][(int) $field['alignment']]
|
||||
(array) CFactory::_('Registry')->get('builder.layout.' . $nameSingleCode . '.' . $tabName . '.'
|
||||
. $field['alignment'])
|
||||
) + 1;
|
||||
while (isset($this->layoutBuilder[$nameSingleCode][$tabName][(int) $field['alignment']][$size]))
|
||||
while (CFactory::_('Registry')->exists('builder.layout.' . $nameSingleCode . '.' . $tabName . '.'
|
||||
. $field['alignment'] . '.' . $size))
|
||||
{
|
||||
$size++;
|
||||
}
|
||||
$this->layoutBuilder[$nameSingleCode][$tabName][(int) $field['alignment']][$size]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.layout.'
|
||||
. $nameSingleCode . '.'
|
||||
. $tabName . '.'
|
||||
. $field['alignment'] . '.'
|
||||
. $size, $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->layoutBuilder[$nameSingleCode][$tabName][(int) $field['alignment']][(int) $field['order_edit']]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.layout.'
|
||||
. $nameSingleCode . '.'
|
||||
. $tabName . '.'
|
||||
. $field['alignment'] . '.'
|
||||
. $field['order_edit'], $name);
|
||||
}
|
||||
// check if default fields were over written
|
||||
if (in_array($name, $default_fields))
|
||||
{
|
||||
// just to eliminate
|
||||
$this->movedPublishingFields[$nameSingleCode][$name] = $name;
|
||||
CFactory::_('Registry')->set('builder.moved_publishing_fields.' . $nameSingleCode . '.' . $name, true);
|
||||
}
|
||||
}
|
||||
elseif ($tabName === 'publishing' || $tabName === 'Publishing')
|
||||
{
|
||||
if (!in_array($name, $default_fields))
|
||||
{
|
||||
if (isset($this->newPublishingFields[$nameSingleCode][(int) $field['alignment']][(int) $field['order_edit']]))
|
||||
if (CFactory::_('Registry')->exists('builder.new_publishing_fields.' . $nameSingleCode . '.' .
|
||||
$field['alignment'] . '.' . $field['order_edit']))
|
||||
{
|
||||
$size = (int) count(
|
||||
(array) $this->newPublishingFields[$nameSingleCode][(int) $field['alignment']]
|
||||
(array) CFactory::_('Registry')->get('builder.new_publishing_fields.' . $nameSingleCode . '.' .
|
||||
$field['alignment'])
|
||||
) + 1;
|
||||
while (isset($this->newPublishingFields[$nameSingleCode][(int) $field['alignment']][$size]))
|
||||
while (CFactory::_('Registry')->exists('builder.new_publishing_fields.' . $nameSingleCode . '.' .
|
||||
$field['alignment'] . '.' . $size))
|
||||
{
|
||||
$size++;
|
||||
}
|
||||
$this->newPublishingFields[$nameSingleCode][(int) $field['alignment']][$size]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.new_publishing_fields.' . $nameSingleCode . '.' .
|
||||
$field['alignment'] . '.' . $size, $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->newPublishingFields[$nameSingleCode][(int) $field['alignment']][(int) $field['order_edit']]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.new_publishing_fields.' . $nameSingleCode . '.' .
|
||||
$field['alignment'] . '.' . $field['order_edit'], $name);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->tabCounter[$nameSingleCode][1] = 'Details';
|
||||
if (isset($this->layoutBuilder[$nameSingleCode]['Details'][(int) $field['alignment']][(int) $field['order_edit']]))
|
||||
CFactory::_('Registry')->set('builder.tab_counter.' . $nameSingleCode . '.1', 'Details');
|
||||
if (CFactory::_('Registry')->exists('builder.layout.' . $nameSingleCode . '.Details.'
|
||||
. $field['alignment'] . '.' . $field['order_edit']))
|
||||
{
|
||||
$size = (int) count(
|
||||
(array) $this->layoutBuilder[$nameSingleCode]['Details'][(int) $field['alignment']]
|
||||
(array) CFactory::_('Registry')->get('builder.layout.' . $nameSingleCode . '.Details.'
|
||||
. $field['alignment'])
|
||||
) + 1;
|
||||
while (isset($this->layoutBuilder[$nameSingleCode]['Details'][(int) $field['alignment']][$size]))
|
||||
while (CFactory::_('Registry')->exists('builder.layout.' . $nameSingleCode . '.Details.'
|
||||
. $field['alignment'] . '.' . $size))
|
||||
{
|
||||
$size++;
|
||||
}
|
||||
$this->layoutBuilder[$nameSingleCode]['Details'][(int) $field['alignment']][$size]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.layout.'
|
||||
. $nameSingleCode . '.Details.'
|
||||
. $field['alignment'] . '.'
|
||||
. $size, $name);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->layoutBuilder[$nameSingleCode]['Details'][(int) $field['alignment']][(int) $field['order_edit']]
|
||||
= $name;
|
||||
CFactory::_('Registry')->set('builder.layout.'
|
||||
. $nameSingleCode . '.Details.'
|
||||
. $field['alignment'] . '.'
|
||||
. $field['order_edit'], $name);
|
||||
}
|
||||
// check if default fields were over written
|
||||
// check if default fields were overwritten
|
||||
if (in_array($name, $default_fields))
|
||||
{
|
||||
// just to eliminate
|
||||
$this->movedPublishingFields[$nameSingleCode][$name] = $name;
|
||||
CFactory::_('Registry')->set('builder.moved_publishing_fields.' . $nameSingleCode . '.' . $name, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4518,8 +4535,7 @@ class Fields extends Structure
|
||||
);
|
||||
if (StringHelper::check($listclass))
|
||||
{
|
||||
$this->listFieldClass[$nameListCode][$fieldAttributes['name']]
|
||||
= $listclass;
|
||||
CFactory::_('Registry')->set('builder.list_field_class.' . $nameListCode . '.' . $fieldAttributes['name'], $listclass);
|
||||
}
|
||||
// check if we find reason to remove this field from being escaped
|
||||
$escaped = GetHelper::between(
|
||||
@ -4527,8 +4543,8 @@ class Fields extends Structure
|
||||
);
|
||||
if (StringHelper::check($escaped))
|
||||
{
|
||||
$this->doNotEscape[$nameListCode][]
|
||||
= $fieldAttributes['name'];
|
||||
CFactory::_('Registry')->set('builder.do_not_escape.' .
|
||||
$nameListCode . '.' . $fieldAttributes['name'], true);
|
||||
}
|
||||
// check if we have display switch for dynamic placement
|
||||
$display = GetHelper::between(
|
||||
@ -4590,7 +4606,7 @@ class Fields extends Structure
|
||||
if ($typeName === 'tag')
|
||||
{
|
||||
// set tags for this view but don't load to DB
|
||||
$this->tagsBuilder[$nameSingleCode] = $nameSingleCode;
|
||||
CFactory::_('Registry')->set('builder.tags.' . $nameSingleCode, true);
|
||||
}
|
||||
// dbSwitch
|
||||
$dbSwitch = true;
|
||||
@ -4608,8 +4624,8 @@ class Fields extends Structure
|
||||
$textKeys = array('TEXT', 'TINYTEXT', 'MEDIUMTEXT', 'LONGTEXT',
|
||||
'BLOB', 'TINYBLOB', 'MEDIUMBLOB', 'LONGBLOB');
|
||||
// build the query values
|
||||
$this->queryBuilder[$nameSingleCode][$name]['type']
|
||||
= $field['settings']->datatype;
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.type',
|
||||
$field['settings']->datatype);
|
||||
// check if this is a number
|
||||
if (in_array($field['settings']->datatype, $numberKeys))
|
||||
{
|
||||
@ -4639,26 +4655,26 @@ class Fields extends Structure
|
||||
// check if this is not text
|
||||
if (!in_array($field['settings']->datatype, $textKeys))
|
||||
{
|
||||
$this->queryBuilder[$nameSingleCode][$name]['lenght']
|
||||
= $field['settings']->datalenght;
|
||||
$this->queryBuilder[$nameSingleCode][$name]['lenght_other']
|
||||
= $field['settings']->datalenght_other;
|
||||
$this->queryBuilder[$nameSingleCode][$name]['default']
|
||||
= $field['settings']->datadefault;
|
||||
$this->queryBuilder[$nameSingleCode][$name]['other']
|
||||
= $field['settings']->datadefault_other;
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.lenght',
|
||||
$field['settings']->datalenght);
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.lenght_other',
|
||||
$field['settings']->datalenght_other);
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.default',
|
||||
$field['settings']->datadefault);
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.other',
|
||||
$field['settings']->datadefault_other);
|
||||
}
|
||||
// fall back unto EMPTY for text
|
||||
else
|
||||
{
|
||||
$this->queryBuilder[$nameSingleCode][$name]['default']
|
||||
= 'EMPTY';
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.default',
|
||||
'EMPTY');
|
||||
}
|
||||
// to identify the field
|
||||
$this->queryBuilder[$nameSingleCode][$name]['ID']
|
||||
= $field['settings']->id;
|
||||
$this->queryBuilder[$nameSingleCode][$name]['null_switch']
|
||||
= $field['settings']->null_switch;
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.ID',
|
||||
$field['settings']->id);
|
||||
CFactory::_('Registry')->set('builder.database_tables.' . $nameSingleCode . '.' . $name . '.null_switch',
|
||||
$field['settings']->null_switch);
|
||||
// set index types
|
||||
$_guid = true;
|
||||
if ($field['settings']->indexes == 1
|
||||
@ -4667,7 +4683,7 @@ class Fields extends Structure
|
||||
))
|
||||
{
|
||||
// build unique keys of this view for db
|
||||
$this->dbUniqueKeys[$nameSingleCode][] = $name;
|
||||
CFactory::_('Registry')->appendArray('builder.database_unique_keys.' . $nameSingleCode, $name);
|
||||
// prevent guid from being added twice
|
||||
if ('guid' === $name)
|
||||
{
|
||||
@ -4682,12 +4698,12 @@ class Fields extends Structure
|
||||
&& !in_array($field['settings']->datatype, $textKeys))
|
||||
{
|
||||
// build keys of this view for db
|
||||
$this->dbKeys[$nameSingleCode][] = $name;
|
||||
CFactory::_('Registry')->appendArray('builder.database_keys.' . $nameSingleCode, $name);
|
||||
}
|
||||
// special treatment for GUID
|
||||
if ('guid' === $name && $_guid)
|
||||
{
|
||||
$this->dbUniqueGuid[$nameSingleCode] = true;
|
||||
CFactory::_('Registry')->set('builder.database_unique_guid.' . $nameSingleCode, true);
|
||||
}
|
||||
}
|
||||
// set list switch
|
||||
@ -4701,19 +4717,19 @@ class Fields extends Structure
|
||||
// add history to this view
|
||||
if (isset($view['history']) && $view['history'])
|
||||
{
|
||||
$this->historyBuilder[$nameSingleCode] = $nameSingleCode;
|
||||
CFactory::_('Registry')->set('builder.history.' . $nameSingleCode, true);
|
||||
}
|
||||
// set Alias (only one title per view)
|
||||
if ($dbSwitch && isset($field['alias']) && $field['alias']
|
||||
&& !isset($this->aliasBuilder[$nameSingleCode]))
|
||||
&& !CFactory::_('Registry')->get('builder.alias.' . $nameSingleCode))
|
||||
{
|
||||
$this->aliasBuilder[$nameSingleCode] = $name;
|
||||
CFactory::_('Registry')->set('builder.alias.' . $nameSingleCode, $name);
|
||||
}
|
||||
// set Titles (only one title per view)
|
||||
if ($dbSwitch && isset($field['title']) && $field['title']
|
||||
&& !isset($this->titleBuilder[$nameSingleCode]))
|
||||
&& !CFactory::_('Registry')->get('builder.title.' . $nameSingleCode))
|
||||
{
|
||||
$this->titleBuilder[$nameSingleCode] = $name;
|
||||
CFactory::_('Registry')->set('builder.title.' . $nameSingleCode, $name);
|
||||
}
|
||||
// category name fix
|
||||
if ($typeName === 'category')
|
||||
@ -4804,7 +4820,7 @@ class Fields extends Structure
|
||||
// build custom builder list
|
||||
if ($listSwitch || $listJoin)
|
||||
{
|
||||
$this->customBuilderList[$nameListCode][] = $name;
|
||||
CFactory::_('Registry')->set('builder.custom_list.' . $nameSingleCode . '.' . $name, true);
|
||||
}
|
||||
}
|
||||
// load the list join builder
|
||||
@ -4843,11 +4859,7 @@ class Fields extends Structure
|
||||
// set the hidden field of this view
|
||||
if ($dbSwitch && $typeName === 'hidden')
|
||||
{
|
||||
if (!isset($this->hiddenFieldsBuilder[$nameSingleCode]))
|
||||
{
|
||||
$this->hiddenFieldsBuilder[$nameSingleCode] = '';
|
||||
}
|
||||
$this->hiddenFieldsBuilder[$nameSingleCode] .= ',"' . $name . '"';
|
||||
CFactory::_('Registry')->appendArray('builder.hidden_fields.' . $nameSingleCode, ',"' . $name . '"');
|
||||
}
|
||||
// set all int fields of this view
|
||||
if ($dbSwitch && isset($field['settings']->datatype)
|
||||
@ -4855,47 +4867,23 @@ class Fields extends Structure
|
||||
|| $field['settings']->datatype === 'TINYINT'
|
||||
|| $field['settings']->datatype === 'BIGINT'))
|
||||
{
|
||||
if (!isset($this->intFieldsBuilder[$nameSingleCode]))
|
||||
{
|
||||
$this->intFieldsBuilder[$nameSingleCode] = '';
|
||||
}
|
||||
$this->intFieldsBuilder[$nameSingleCode] .= ',"' . $name . '"';
|
||||
CFactory::_('Registry')->appendArray('builder.integer_fields.' . $nameSingleCode, ',"' . $name . '"');
|
||||
}
|
||||
// Get the default fields
|
||||
$default_fields = CFactory::_('Config')->default_fields;
|
||||
// set all dynamic field of this view
|
||||
if ($dbSwitch && $typeName != 'category' && $typeName != 'repeatable'
|
||||
&& $typeName != 'subform'
|
||||
&& !in_array($name, $default_fields))
|
||||
&& $typeName != 'subform' && !in_array($name, $default_fields))
|
||||
{
|
||||
if (!isset($this->dynamicfieldsBuilder[$nameSingleCode]))
|
||||
{
|
||||
$this->dynamicfieldsBuilder[$nameSingleCode] = '';
|
||||
}
|
||||
if (isset($this->dynamicfieldsBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->dynamicfieldsBuilder[$nameSingleCode]
|
||||
))
|
||||
{
|
||||
$this->dynamicfieldsBuilder[$nameSingleCode] .= ',"' . $name
|
||||
. '":"' . $name . '"';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->dynamicfieldsBuilder[$nameSingleCode] .= '"' . $name
|
||||
. '":"' . $name . '"';
|
||||
}
|
||||
CFactory::_('Registry')->appendArray('builder.dynamic_fields.' . $nameSingleCode, '"' . $name . '":"' . $name . '"');
|
||||
}
|
||||
// TODO we may need to add a switch instead (since now it uses the first editor field)
|
||||
// set the main(biggest) text field of this view
|
||||
if ($dbSwitch && $typeName === 'editor')
|
||||
{
|
||||
if (!isset($this->maintextBuilder[$nameSingleCode])
|
||||
|| !StringHelper::check(
|
||||
$this->maintextBuilder[$nameSingleCode]
|
||||
))
|
||||
if (!CFactory::_('Registry')->exists('builder.main_text_field.' . $nameSingleCode))
|
||||
{
|
||||
$this->maintextBuilder[$nameSingleCode] = $name;
|
||||
CFactory::_('Registry')->set('builder.main_text_field.' . $nameSingleCode, $name);
|
||||
}
|
||||
}
|
||||
// set the custom builder
|
||||
@ -4909,21 +4897,17 @@ class Fields extends Structure
|
||||
'lang' => $listLangName,
|
||||
'custom' => $custom,
|
||||
'method' => $field['settings']->store);
|
||||
// set the custom fields needed in content type data
|
||||
if (!isset($this->customFieldLinksBuilder[$nameSingleCode]))
|
||||
{
|
||||
$this->customFieldLinksBuilder[$nameSingleCode] = '';
|
||||
}
|
||||
|
||||
// only load this if table is set
|
||||
if (isset($custom['table'])
|
||||
&& StringHelper::check(
|
||||
$custom['table']
|
||||
))
|
||||
{
|
||||
$this->customFieldLinksBuilder[$nameSingleCode] .= ',{"sourceColumn": "'
|
||||
. $name . '","targetTable": "' . $custom['table']
|
||||
. '","targetColumn": "' . $custom['id']
|
||||
. '","displayColumn": "' . $custom['text'] . '"}';
|
||||
// set the custom fields needed in content type data
|
||||
CFactory::_('Registry')->appendArray('builder.custom_field_links.' . $nameSingleCode, ',{"sourceColumn": "'
|
||||
. $name . '","targetTable": "' . $custom['table'] . '","targetColumn": "' . $custom['id']
|
||||
. '","displayColumn": "' . $custom['text'] . '"}');
|
||||
}
|
||||
// build script switch for user
|
||||
if ($custom['extends'] === 'user')
|
||||
@ -5298,12 +5282,13 @@ class Fields extends Structure
|
||||
if ($dbSwitch)
|
||||
{
|
||||
// load array of view, field, and [encryption, type, tab]
|
||||
$title_ = CFactory::_('Registry')->get('builder.title.' . $nameSingleCode);
|
||||
CFactory::_('Registry')->set('all_component_fields.' . $nameSingleCode . '.' . $name,
|
||||
[
|
||||
'name' => $name,
|
||||
'label' => $langLabel,
|
||||
'type' => $typeName,
|
||||
'title' => (isset($this->titleBuilder[$nameSingleCode]) && $name === $this->titleBuilder[$nameSingleCode]) ? true : false,
|
||||
'title' => (is_string($title_) && $name === $title_) ? true : false,
|
||||
'list' => $nameListCode,
|
||||
'store' => (isset($field['store'])) ? $field['store'] : null,
|
||||
'tab_name' => $tabName
|
||||
@ -5773,7 +5758,7 @@ class Fields extends Structure
|
||||
$field_filter_sets[] = Indent::_(3) . 'hint="JSEARCH_FILTER"';
|
||||
$field_filter_sets[] = Indent::_(2) . '/>';
|
||||
// add the published filter if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.published'))
|
||||
{
|
||||
// the published language string
|
||||
$lang_published = CFactory::_('Config')->lang_prefix . '_FILTER_PUBLISHED';
|
||||
@ -5833,11 +5818,8 @@ class Fields extends Structure
|
||||
}
|
||||
// add the access filter if this view has access
|
||||
// and if access manually is not set
|
||||
if (isset($this->accessBuilder[$nameSingleCode])
|
||||
&& StringHelper::check(
|
||||
$this->accessBuilder[$nameSingleCode]
|
||||
)
|
||||
&& !isset($this->fieldsNames[$nameSingleCode]['access']))
|
||||
if (CFactory::_('Registry')->exists('builder.access_switch.' . $nameSingleCode)
|
||||
&& !CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.access'))
|
||||
{
|
||||
$field_filter_sets[] = Indent::_(2) . '<field';
|
||||
$field_filter_sets[] = Indent::_(3) . 'type="accesslevel"';
|
||||
@ -5963,7 +5945,7 @@ class Fields extends Structure
|
||||
$list_sets[] = Indent::_(3)
|
||||
. '<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>';
|
||||
// add the published filter if published is not set
|
||||
if (!isset($this->fieldsNames[$nameSingleCode]['published']))
|
||||
if (!CFactory::_('Registry')->isString('builder.field_names.' . $nameSingleCode . '.published'))
|
||||
{
|
||||
// add to done list
|
||||
$donelist['published'] = true;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -23,9 +23,9 @@ if (file_exists($composer_autoloader))
|
||||
spl_autoload_register(function ($class) {
|
||||
// project-specific base directories and namespace prefix
|
||||
$search = [
|
||||
'libraries/jcb_powers/VDM.Joomla.Gitea' => 'VDM\\Joomla\\Gitea',
|
||||
'libraries/jcb_powers/VDM.Joomla' => 'VDM\\Joomla',
|
||||
'libraries/jcb_powers/VDM.Minify' => 'VDM\\Minify',
|
||||
'libraries/jcb_powers/VDM.Gitea' => 'VDM\\Gitea',
|
||||
'libraries/jcb_powers/VDM.Psr' => 'VDM\\Psr'
|
||||
];
|
||||
// Start the search and load if found
|
||||
@ -5523,571 +5523,6 @@ abstract class ComponentbuilderHelper
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get extensions grouped list xml
|
||||
**/
|
||||
public static function getExtensionGroupedListXml()
|
||||
{
|
||||
// the extension types
|
||||
$extensions = array(
|
||||
'joomla_component' => 'COM_COMPONENTBUILDER_COMPONENT',
|
||||
'joomla_module' => 'COM_COMPONENTBUILDER_MODULE',
|
||||
'joomla_plugin' => 'COM_COMPONENTBUILDER_PLUGIN'
|
||||
);
|
||||
// get the extension values
|
||||
foreach ($extensions as $extension => $label)
|
||||
{
|
||||
${$extension} = self::getByTypeTheIdsSystemNames($extension);
|
||||
}
|
||||
|
||||
$xml = new DOMDocument();
|
||||
$xml->formatOutput = true;
|
||||
|
||||
$root = $xml->createElement('field');
|
||||
$root->setAttributeNode(new DOMAttr('name', 'extension'));
|
||||
$root->setAttributeNode(new DOMAttr('type', 'groupedlist'));
|
||||
$root->setAttributeNode(new DOMAttr('onchange', 'this.form.submit();'));
|
||||
|
||||
$root
|
||||
->appendChild($xml->createElement('option', '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_EXTENSION') . ' -'))
|
||||
->setAttributeNode(new DOMAttr('value', ''));
|
||||
|
||||
foreach ($extensions as $extension => $label)
|
||||
{
|
||||
$extension_node = $xml->createElement('group');
|
||||
$extension_node->setAttributeNode(new DOMAttr('label', $label));
|
||||
if (!self::checkArray(${$extension}))
|
||||
{
|
||||
$extension_node
|
||||
->appendChild($xml->createElement('option', '- ' . JText::_('COM_COMPONENTBUILDER_NONE') . ' -'))
|
||||
->setAttributeNode(new DOMAttr('disabled', 'true'));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (${$extension} as $id => $element)
|
||||
{
|
||||
$extension_node
|
||||
->appendChild($xml->createElement('option', $element))
|
||||
->setAttributeNode(new DOMAttr('value', $extension . '__' . $id));
|
||||
}
|
||||
}
|
||||
$root->appendChild($extension_node);
|
||||
}
|
||||
$xml->appendChild($root);
|
||||
return $xml->saveXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* get by type the ids and system names
|
||||
**/
|
||||
public static function getByTypeTheIdsSystemNames($type, $limiter = null)
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query
|
||||
->select($db->quoteName(array('id', 'system_name')))
|
||||
->from($db->quoteName('#__componentbuilder_' . $type))
|
||||
->where($db->quoteName('published') . ' >= 1')
|
||||
->order($db->quoteName('modified') . ' desc')
|
||||
->order($db->quoteName('created') . ' desc');
|
||||
// check if we have a limter for admin views
|
||||
if ($type === 'admin_view' && $limiter)
|
||||
{
|
||||
// first get all views
|
||||
$adminviewIds = array();
|
||||
// if this is a plugin or a module, then no views
|
||||
if (strpos($limiter, 'joomla_component') !== false)
|
||||
{
|
||||
$component = (int) str_replace('joomla_component__', '', $limiter);
|
||||
// get the views of this component
|
||||
if ($addViews = self::getVar('component_admin_views', (int) $component, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (self::checkJson($addViews))
|
||||
{
|
||||
$addViews = json_decode($addViews, true);
|
||||
if (self::checkArray($addViews))
|
||||
{
|
||||
foreach($addViews as $addView)
|
||||
{
|
||||
if (isset($addView['adminview']))
|
||||
{
|
||||
$adminviewIds[(int) $addView['adminview']] = (int) $addView['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// now check if we still have admin views
|
||||
if (self::checkArray($adminviewIds))
|
||||
{
|
||||
$query->where($db->quoteName('id') . ' IN (' . implode(',', $adminviewIds) . ')');
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadAssocList('id', 'system_name');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get any area linked IDs
|
||||
*/
|
||||
public static function getAreaLinkedIDs($extension, $type)
|
||||
{
|
||||
// What ever...
|
||||
if ($type === 'joomla_component_admin_views')
|
||||
{
|
||||
return self::getComponentAdminViewsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'joomla_component_custom_admin_views')
|
||||
{
|
||||
return self::getComponentCustomAdminViewsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'joomla_component_site_views')
|
||||
{
|
||||
return self::getComponentSiteViewsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'joomla_component')
|
||||
{
|
||||
return self::getComponentFieldsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'joomla_module')
|
||||
{
|
||||
return self::getModuleFieldsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'joomla_plugin')
|
||||
{
|
||||
return self::getPluginFieldsIDs($extension);
|
||||
}
|
||||
elseif ($type === 'admin_view')
|
||||
{
|
||||
return self::getAdminViewFieldsIDs($extension);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component admin views IDs
|
||||
*/
|
||||
public static function getComponentAdminViewsIDs($id)
|
||||
{
|
||||
// get all this components views
|
||||
$adminviewIds = array();
|
||||
// get the views of this component
|
||||
if ($addViews = self::getVar('component_admin_views', (int) $id, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (self::checkJson($addViews))
|
||||
{
|
||||
$addViews = json_decode($addViews, true);
|
||||
if (self::checkArray($addViews))
|
||||
{
|
||||
foreach($addViews as $addView)
|
||||
{
|
||||
if (isset($addView['adminview']))
|
||||
{
|
||||
$adminviewIds[(int) $addView['adminview']] = (int) $addView['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($adminviewIds))
|
||||
{
|
||||
return array_values($adminviewIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component custom admin views IDs
|
||||
*/
|
||||
public static function getComponentCustomAdminViewsIDs($id)
|
||||
{
|
||||
// get all this components views
|
||||
$adminviewIds = array();
|
||||
// get the views of this component
|
||||
if ($addViews = self::getVar('component_custom_admin_views', (int) $id, 'joomla_component', 'addcustom_admin_views'))
|
||||
{
|
||||
if (self::checkJson($addViews))
|
||||
{
|
||||
$addViews = json_decode($addViews, true);
|
||||
if (self::checkArray($addViews))
|
||||
{
|
||||
foreach($addViews as $addView)
|
||||
{
|
||||
if (isset($addView['customadminview']))
|
||||
{
|
||||
$adminviewIds[(int) $addView['customadminview']] = (int) $addView['customadminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($adminviewIds))
|
||||
{
|
||||
return array_values($adminviewIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component site views IDs
|
||||
*/
|
||||
public static function getComponentSiteViewsIDs($id)
|
||||
{
|
||||
// get all this components views
|
||||
$adminviewIds = array();
|
||||
// get the views of this component
|
||||
if ($addViews = self::getVar('component_site_views', (int) $id, 'joomla_component', 'addsite_views'))
|
||||
{
|
||||
if (self::checkJson($addViews))
|
||||
{
|
||||
$addViews = json_decode($addViews, true);
|
||||
if (self::checkArray($addViews))
|
||||
{
|
||||
foreach($addViews as $addView)
|
||||
{
|
||||
if (isset($addView['siteview']))
|
||||
{
|
||||
$adminviewIds[(int) $addView['siteview']] = (int) $addView['siteview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($adminviewIds))
|
||||
{
|
||||
return array_values($adminviewIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a component fields IDs
|
||||
*/
|
||||
public static function getComponentFieldsIDs($id)
|
||||
{
|
||||
// we start the field array
|
||||
$fieldIds = array();
|
||||
// first get all views
|
||||
$adminviewIds = array();
|
||||
// get the views of this component
|
||||
if ($addViews = self::getVar('component_admin_views', (int) $id, 'joomla_component', 'addadmin_views'))
|
||||
{
|
||||
if (self::checkJson($addViews))
|
||||
{
|
||||
$addViews = json_decode($addViews, true);
|
||||
if (self::checkArray($addViews))
|
||||
{
|
||||
foreach($addViews as $addView)
|
||||
{
|
||||
if (isset($addView['adminview']))
|
||||
{
|
||||
$adminviewIds[(int) $addView['adminview']] = (int) $addView['adminview'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have views
|
||||
if (self::checkArray($adminviewIds))
|
||||
{
|
||||
foreach ($adminviewIds as $adminView)
|
||||
{
|
||||
// get all the fields linked to the admin view
|
||||
if ($addFields = self::getVar('admin_fields', (int) $adminView, 'admin_view', 'addfields'))
|
||||
{
|
||||
if (self::checkJson($addFields))
|
||||
{
|
||||
$addFields = json_decode($addFields, true);
|
||||
if (self::checkArray($addFields))
|
||||
{
|
||||
foreach($addFields as $addField)
|
||||
{
|
||||
if (isset($addField['field']))
|
||||
{
|
||||
$fieldIds[(int) $addField['field']] = (int) $addField['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// get config values
|
||||
if ($addconfig = self::getVar('component_config', (int) $id, 'joomla_component', 'addconfig'))
|
||||
{
|
||||
if (self::checkJson($addconfig))
|
||||
{
|
||||
$addconfig = json_decode($addconfig, true);
|
||||
if (self::checkArray($addconfig))
|
||||
{
|
||||
foreach($addconfig as $addconf)
|
||||
{
|
||||
if (isset($addconf['field']))
|
||||
{
|
||||
$fieldIds[(int) $addconf['field']] = (int) $addconf['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($fieldIds))
|
||||
{
|
||||
return array_values($fieldIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a module fields IDs
|
||||
*/
|
||||
public static function getModuleFieldsIDs($id)
|
||||
{
|
||||
// we start the field array
|
||||
$fieldIds = array();
|
||||
if ($fields = self::getVar('joomla_module', (int) $id, 'id', 'fields'))
|
||||
{
|
||||
if (self::checkJson($fields))
|
||||
{
|
||||
$fields = json_decode($fields, true);
|
||||
if (self::checkArray($fields))
|
||||
{
|
||||
foreach($fields as $form)
|
||||
{
|
||||
if (isset($form['fields']) && self::checkArray($form['fields']))
|
||||
{
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
if (isset($field['field']))
|
||||
{
|
||||
$fieldIds[(int) $field['field']] = (int) $field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($fieldIds))
|
||||
{
|
||||
return array_values($fieldIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get a plugin fields IDs
|
||||
*/
|
||||
public static function getPluginFieldsIDs($id)
|
||||
{
|
||||
// we start the field array
|
||||
$fieldIds = array();
|
||||
if ($fields = self::getVar('joomla_plugin', (int) $id, 'id', 'fields'))
|
||||
{
|
||||
if (self::checkJson($fields))
|
||||
{
|
||||
$fields = json_decode($fields, true);
|
||||
if (self::checkArray($fields))
|
||||
{
|
||||
foreach($fields as $form)
|
||||
{
|
||||
if (isset($form['fields']) && self::checkArray($form['fields']))
|
||||
{
|
||||
foreach ($form['fields'] as $field)
|
||||
{
|
||||
if (isset($field['field']))
|
||||
{
|
||||
$fieldIds[(int) $field['field']] = (int) $field['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($fieldIds))
|
||||
{
|
||||
return array_values($fieldIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get an admin view fields IDs
|
||||
*/
|
||||
public static function getAdminViewFieldsIDs($id)
|
||||
{
|
||||
// we start the field array
|
||||
$fieldIds = array();
|
||||
// get all the fields linked to the admin view
|
||||
if ($addFields = self::getVar('admin_fields', (int) $id, 'admin_view', 'addfields'))
|
||||
{
|
||||
if (self::checkJson($addFields))
|
||||
{
|
||||
$addFields = json_decode($addFields, true);
|
||||
if (self::checkArray($addFields))
|
||||
{
|
||||
foreach($addFields as $addField)
|
||||
{
|
||||
if (isset($addField['field']))
|
||||
{
|
||||
$fieldIds[(int) $addField['field']] = (int) $addField['field'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// check that we have fields
|
||||
if (self::checkArray($fieldIds))
|
||||
{
|
||||
return array_values($fieldIds);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation extension ids
|
||||
**/
|
||||
public static function getTranslationExtensionsIds($extension, $type)
|
||||
{
|
||||
// only allow these columns (extension types)
|
||||
$columns = array(
|
||||
'joomla_component' => 'components',
|
||||
'joomla_module' => 'modules',
|
||||
'joomla_plugin' => 'plugins'
|
||||
);
|
||||
// check if the column name is correct
|
||||
if (isset($columns[$type]))
|
||||
{
|
||||
$column = $columns[$type];
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('id', $column)))
|
||||
->from($db->quoteName('#__componentbuilder_language_translation'))
|
||||
->where($db->quoteName($column) . ' != ' . $db->quote(''));
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
$results = $db->loadAssocList();
|
||||
$matches = array();
|
||||
foreach ($results as $k => $v)
|
||||
{
|
||||
$value = json_decode($v[$column], true);
|
||||
if (in_array($extension, $value))
|
||||
{
|
||||
$matches[$v['id']] = $v['id'];
|
||||
}
|
||||
}
|
||||
// Checks that we found matches
|
||||
if (self::checkArray($matches))
|
||||
{
|
||||
return array_values($matches);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation ids
|
||||
**/
|
||||
public static function getTranslationIds($language, $translated = true)
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
$query
|
||||
->select($db->quoteName('id'))
|
||||
->from($db->quoteName('#__componentbuilder_language_translation'));
|
||||
|
||||
// Build the where condition
|
||||
if ($translated === true) // Translated
|
||||
{
|
||||
if ($language === 'all')
|
||||
{
|
||||
if (($languages = self::getAvailableLanguages()) !== false)
|
||||
{
|
||||
$wheres = array();
|
||||
foreach ($languages as $k => $v)
|
||||
{
|
||||
$wheres[] = $db->quoteName('translation') . ' LIKE ' . $db->quote('%' . $k . '%');
|
||||
}
|
||||
$query->where($wheres);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where($db->quoteName('translation') . ' LIKE ' . $db->quote('%' . $language . '%'));
|
||||
}
|
||||
}
|
||||
else // Not translated
|
||||
{
|
||||
if ($language === 'none')
|
||||
{
|
||||
$query->where(
|
||||
array(
|
||||
$db->quoteName('translation') . ' = ' . $db->quote(''),
|
||||
$db->quoteName('translation') . ' = ' . $db->quote('[]'),
|
||||
$db->quoteName('translation') . ' = ' . $db->quote('{}')
|
||||
), 'OR'
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where($db->quoteName('translation') . ' NOT LIKE ' . $db->quote('%' . $language . '%'));
|
||||
}
|
||||
}
|
||||
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return array_unique($db->loadColumn());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* get available languages
|
||||
**/
|
||||
public static function getAvailableLanguages()
|
||||
{
|
||||
$db = JFactory::getDbo();
|
||||
$query = $db->getQuery(true);
|
||||
$query
|
||||
->select($db->quoteName(array('langtag', 'name')))
|
||||
->from($db->quoteName('#__componentbuilder_language'))
|
||||
->where($db->quoteName('published') . ' = 1')
|
||||
->order($db->quoteName('name') . ' desc');
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
return $db->loadAssocList('langtag', 'name');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a row already exist
|
||||
*
|
||||
|
File diff suppressed because one or more lines are too long
@ -1012,8 +1012,14 @@ COM_COMPONENTBUILDER_POWERS_EDIT_VERSION="Powers Edit Version"
|
||||
COM_COMPONENTBUILDER_POWERS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version powers"
|
||||
COM_COMPONENTBUILDER_POWERS_SUBMENU="Powers Submenu"
|
||||
COM_COMPONENTBUILDER_POWERS_SUBMENU_DESC="Allows the users in this group to submenu of power"
|
||||
COM_COMPONENTBUILDER_POWER_INIT_BUTTON_ACCESS="Power Init Button Access"
|
||||
COM_COMPONENTBUILDER_POWER_INIT_BUTTON_ACCESS_DESC="Allows the users in this group to access the init button."
|
||||
COM_COMPONENTBUILDER_POWER_RESET_BUTTON_ACCESS="Power Reset Button Access"
|
||||
COM_COMPONENTBUILDER_POWER_RESET_BUTTON_ACCESS_DESC="Allows the users in this group to access the reset button."
|
||||
COM_COMPONENTBUILDER_POWER_RUN_EXPANSION_BUTTON_ACCESS="Power Run Expansion Button Access"
|
||||
COM_COMPONENTBUILDER_POWER_RUN_EXPANSION_BUTTON_ACCESS_DESC="Allows the users in this group to access the run expansion button."
|
||||
COM_COMPONENTBUILDER_POWER_SYNC_BUTTON_ACCESS="Power Sync Button Access"
|
||||
COM_COMPONENTBUILDER_POWER_SYNC_BUTTON_ACCESS_DESC="Allows the users in this group to access the sync button."
|
||||
COM_COMPONENTBUILDER_SEARCH_ACCESS="Search Access"
|
||||
COM_COMPONENTBUILDER_SEARCH_ACCESS_DESC="Allows the users in this group to access search."
|
||||
COM_COMPONENTBUILDER_SEARCH_COMPILER_BUTTON_ACCESS="Search Compiler Button Access"
|
||||
|
43
admin/layouts/power/super_power_left.php
Normal file
43
admin/layouts/power/super_power_left.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 30th April, 2015
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// get the form
|
||||
$form = $displayData->getForm();
|
||||
|
||||
// get the layout fields override method name (from layout path/ID)
|
||||
$layout_path_array = explode('.', $this->getLayoutId());
|
||||
// Since we cannot pass the layout and tab names as parameters to the model method
|
||||
// this name combination of tab and layout in the method name is the only work around
|
||||
// seeing that JCB uses those two values (tab_name & layout_name) as the layout file name.
|
||||
// example of layout name: details_left.php
|
||||
// example of method name: getFields_details_left()
|
||||
$fields_tab_layout = 'fields_' . $layout_path_array[1];
|
||||
|
||||
// get the fields
|
||||
$fields = $displayData->get($fields_tab_layout) ?: array(
|
||||
'approved',
|
||||
'approved_paths'
|
||||
);
|
||||
|
||||
$hiddenFields = $displayData->get('hidden_fields') ?: array();
|
||||
|
||||
?>
|
||||
<?php if ($fields && count((array) $fields)) :?>
|
||||
<?php foreach($fields as $field): ?>
|
||||
<?php if (in_array($field, $hiddenFields)) : ?>
|
||||
<?php $form->setFieldAttribute($field, 'type', 'hidden'); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $form->renderField($field, null, null, array('class' => 'control-wrapper-' . $field)); ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
42
admin/layouts/power/super_power_right.php
Normal file
42
admin/layouts/power/super_power_right.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 30th April, 2015
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// get the form
|
||||
$form = $displayData->getForm();
|
||||
|
||||
// get the layout fields override method name (from layout path/ID)
|
||||
$layout_path_array = explode('.', $this->getLayoutId());
|
||||
// Since we cannot pass the layout and tab names as parameters to the model method
|
||||
// this name combination of tab and layout in the method name is the only work around
|
||||
// seeing that JCB uses those two values (tab_name & layout_name) as the layout file name.
|
||||
// example of layout name: details_left.php
|
||||
// example of method name: getFields_details_left()
|
||||
$fields_tab_layout = 'fields_' . $layout_path_array[1];
|
||||
|
||||
// get the fields
|
||||
$fields = $displayData->get($fields_tab_layout) ?: array(
|
||||
'note_approved_paths'
|
||||
);
|
||||
|
||||
$hiddenFields = $displayData->get('hidden_fields') ?: array();
|
||||
|
||||
?>
|
||||
<?php if ($fields && count((array) $fields)) :?>
|
||||
<?php foreach($fields as $field): ?>
|
||||
<?php if (in_array($field, $hiddenFields)) : ?>
|
||||
<?php $form->setFieldAttribute($field, 'type', 'hidden'); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $form->renderField($field, null, null, array('class' => 'control-wrapper-' . $field)); ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
|
||||
/**
|
||||
* Admin_views List Model
|
||||
@ -70,7 +72,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
|
||||
);
|
||||
// check if we have joomla components
|
||||
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
|
||||
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
|
||||
@ -79,7 +81,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
|
||||
$options = $options + $joomla_components;
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'joomla_component',
|
||||
'filter',
|
||||
@ -90,6 +92,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
@ -354,7 +357,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_admin_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_admin_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -589,7 +592,7 @@ class ComponentbuilderModelAdmin_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_admin_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_admin_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Gitea\Gitea;
|
||||
use VDM\Joomla\Gitea\Factory as GiteaFactory;
|
||||
use VDM\Joomla\Componentbuilder\Package\Factory as PackageFactory;
|
||||
use VDM\Joomla\Utilities\FileHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
@ -175,11 +175,18 @@ class ComponentbuilderModelAjax extends ListModel
|
||||
// check if url exist
|
||||
if ($info = FileHelper::getContent($url, false))
|
||||
{
|
||||
if ((($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local')) !== null && JsonHelper::check($info_)) ||
|
||||
(($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local.legacy')) !== null && JsonHelper::check($info_)) ||
|
||||
(($info_ = PackageFactory::_('Crypt')->decrypt($info, 'local.fof')) !== null && JsonHelper::check($info_)))
|
||||
$_info = PackageFactory::_('Crypt')->decrypt($info, 'local.legacy');
|
||||
|
||||
// check if we had success
|
||||
if (!JsonHelper::check($_info))
|
||||
{
|
||||
$info = json_decode($info_, true);
|
||||
$_info = PackageFactory::_('Crypt')->decrypt($info, 'local.fof');
|
||||
}
|
||||
|
||||
// check if we have json
|
||||
if (JsonHelper::check($_info))
|
||||
{
|
||||
$info = json_decode($_info, true);
|
||||
|
||||
return [
|
||||
'owner' => PackageFactory::_('Display.Details')->owner($info, true),
|
||||
@ -268,25 +275,16 @@ class ComponentbuilderModelAjax extends ListModel
|
||||
|
||||
public function getWiki($name = 'Home')
|
||||
{
|
||||
// get the token if set
|
||||
$token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
|
||||
|
||||
// setup a registry
|
||||
$options = new Registry;
|
||||
|
||||
// only add if token is set
|
||||
if ($token)
|
||||
{
|
||||
$options->set('access.token', $token);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// get gitea object
|
||||
$gitea = new Gitea($options);
|
||||
// load the API details
|
||||
GiteaFactory::_('Gitea.Repository.Wiki')->load_('https://git.vdm.dev', '');
|
||||
|
||||
// get the gitea wiki page TODO: we hard coded the page name
|
||||
$page = $gitea->repo->wiki->getHtml('joomla', 'Component-Builder', 'Home');
|
||||
// get the gitea wiki page im markdown
|
||||
$wiki = GiteaFactory::_('Gitea.Repository.Wiki')->get('joomla', 'Component-Builder', 'Home');
|
||||
|
||||
// now render the page in HTML
|
||||
$page = GiteaFactory::_('Gitea.Miscellaneous.Markdown')->render($wiki->content, true);
|
||||
}
|
||||
catch (DomainException $e)
|
||||
{
|
||||
@ -323,20 +321,18 @@ class ComponentbuilderModelAjax extends ListModel
|
||||
public function getVersion($version = null)
|
||||
{
|
||||
// get the token if set
|
||||
$token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
|
||||
$token = $this->app_params->get('gitea_token', false);
|
||||
|
||||
// only add if token is set
|
||||
if ($token)
|
||||
{
|
||||
// setup a registry
|
||||
$options = new Registry;
|
||||
$options->set('access.token', $token);
|
||||
// get the gitea http
|
||||
try
|
||||
{
|
||||
// get gitea object
|
||||
$gitea = new Gitea($options);
|
||||
// get a list of all the repos tags
|
||||
$tags = $gitea->repo->getListTags('joomla', 'Component-Builder');
|
||||
// load the API details
|
||||
GiteaFactory::_('Gitea.Repository.Tags')->load_('https://git.vdm.dev', $token);
|
||||
|
||||
// get the repository tags
|
||||
$tags = GiteaFactory::_('Gitea.Repository.Tags')->list('joomla', 'Component-Builder');
|
||||
}
|
||||
catch (DomainException $e)
|
||||
{
|
||||
|
@ -14,7 +14,6 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Gitea\Gitea;
|
||||
use Joomla\Registry\Registry;
|
||||
|
||||
/**
|
||||
|
@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
|
||||
/**
|
||||
* Custom_admin_views List Model
|
||||
@ -68,7 +70,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
|
||||
);
|
||||
// check if we have joomla components
|
||||
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
|
||||
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
|
||||
@ -77,7 +79,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
|
||||
$options = $options + $joomla_components;
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'joomla_component',
|
||||
'filter',
|
||||
@ -293,7 +295,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_custom_admin_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_custom_admin_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -498,7 +500,7 @@ class ComponentbuilderModelCustom_admin_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_custom_admin_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_custom_admin_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
|
@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
|
||||
/**
|
||||
* Fields List Model
|
||||
@ -63,7 +65,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
|
||||
// Create the "extension" filter
|
||||
$form->setField(new SimpleXMLElement(
|
||||
ComponentbuilderHelper::getExtensionGroupedListXml()
|
||||
JCBFilterHelper::extensions()
|
||||
),'filter');
|
||||
$form->setValue(
|
||||
'extension',
|
||||
@ -82,7 +84,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_ADMIN_VIEWS_FOUND') . ' -'
|
||||
);
|
||||
// check if we have admin views (and limit to an extension if it is set)
|
||||
if (($admin_views = ComponentbuilderHelper::getByTypeTheIdsSystemNames('admin_view', $this->state->get("filter.extension"))) !== false)
|
||||
if (($admin_views = JCBFilterHelper::names('admin_view', $this->state->get("filter.extension"))) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_ADMIN_VIEW') . ' -'
|
||||
@ -91,7 +93,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
$options = $options + $admin_views;
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'admin_view',
|
||||
'filter',
|
||||
@ -102,6 +104,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
@ -379,7 +382,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
{
|
||||
// column name, and id
|
||||
$type_extension = explode('__', $filter_extension);
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
|
||||
{
|
||||
$field_ids = $ids;
|
||||
}
|
||||
@ -395,7 +398,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
$filter_admin_view = $this->state->get("filter.admin_view");
|
||||
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
|
||||
{
|
||||
// view will return less fields, so we ignore the component
|
||||
$field_ids = $ids;
|
||||
@ -644,7 +647,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
{
|
||||
// column name, and id
|
||||
$type_extension = explode('__', $filter_extension);
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
|
||||
{
|
||||
$field_ids = $ids;
|
||||
}
|
||||
@ -660,7 +663,7 @@ class ComponentbuilderModelFields extends ListModel
|
||||
$filter_admin_view = $this->state->get("filter.admin_view");
|
||||
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
|
||||
{
|
||||
// view will return less fields, so we ignore the component
|
||||
$field_ids = $ids;
|
||||
|
@ -17,16 +17,16 @@ jimport('joomla.form.helper');
|
||||
JFormHelper::loadFieldClass('list');
|
||||
|
||||
/**
|
||||
* Powersfilterpowerversion Form Field class for the Componentbuilder component
|
||||
* Powersfilterapproved Form Field class for the Componentbuilder component
|
||||
*/
|
||||
class JFormFieldPowersfilterpowerversion extends JFormFieldList
|
||||
class JFormFieldPowersfilterapproved extends JFormFieldList
|
||||
{
|
||||
/**
|
||||
* The powersfilterpowerversion field type.
|
||||
* The powersfilterapproved field type.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $type = 'powersfilterpowerversion';
|
||||
public $type = 'powersfilterapproved';
|
||||
|
||||
/**
|
||||
* Method to get a list of options for a list input.
|
||||
@ -42,24 +42,28 @@ class JFormFieldPowersfilterpowerversion extends JFormFieldList
|
||||
$query = $db->getQuery(true);
|
||||
|
||||
// Select the text.
|
||||
$query->select($db->quoteName('power_version'));
|
||||
$query->select($db->quoteName('approved'));
|
||||
$query->from($db->quoteName('#__componentbuilder_power'));
|
||||
$query->order($db->quoteName('power_version') . ' ASC');
|
||||
$query->order($db->quoteName('approved') . ' ASC');
|
||||
|
||||
// Reset the query using our newly populated query object.
|
||||
$db->setQuery($query);
|
||||
|
||||
$results = $db->loadColumn();
|
||||
$_filter = array();
|
||||
$_filter[] = JHtml::_('select.option', '', '- ' . JText::_('COM_COMPONENTBUILDER_FILTER_SELECT_VERSION') . ' -');
|
||||
$_filter[] = JHtml::_('select.option', '', '- ' . JText::_('COM_COMPONENTBUILDER_FILTER_SELECT_SUPER_POWER') . ' -');
|
||||
|
||||
if ($results)
|
||||
{
|
||||
// get powersmodel
|
||||
$model = ComponentbuilderHelper::getModel('powers');
|
||||
$results = array_unique($results);
|
||||
foreach ($results as $power_version)
|
||||
foreach ($results as $approved)
|
||||
{
|
||||
// Now add the power_version and its text to the options array
|
||||
$_filter[] = JHtml::_('select.option', $power_version, $power_version);
|
||||
// Translate the approved selection
|
||||
$text = $model->selectionTranslation($approved,'approved');
|
||||
// Now add the approved and its text to the options array
|
||||
$_filter[] = JHtml::_('select.option', $approved, JText::_($text));
|
||||
}
|
||||
}
|
||||
return $_filter;
|
100
admin/models/fields/superpowerpaths.php
Normal file
100
admin/models/fields/superpowerpaths.php
Normal file
@ -0,0 +1,100 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 30th April, 2015
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// Import the checkboxes field type classes needed
|
||||
|
||||
JFormHelper::loadFieldClass('checkboxes');
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
|
||||
/**
|
||||
* Superpowerpaths Form Field class for the Componentbuilder component
|
||||
*/
|
||||
class JFormFieldSuperpowerpaths extends JFormFieldCheckboxes
|
||||
{
|
||||
/**
|
||||
* The superpowerpaths field type.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $type = 'superpowerpaths';
|
||||
|
||||
// A DynamicCheckboxes@ Field
|
||||
|
||||
/**
|
||||
* Method to get the data to be passed to the layout for rendering.
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 3.5
|
||||
*/
|
||||
protected function getLayoutData()
|
||||
{
|
||||
$data = parent::getLayoutData();
|
||||
|
||||
// True if the field has 'value' set. In other words, it has been stored, don't use the default values.
|
||||
$hasValue = (isset($this->value) && !empty($this->value));
|
||||
|
||||
// If a value has been stored, use it. Otherwise, use the defaults.
|
||||
$checkedOptions = $hasValue ? $this->value : $this->checkedOptions;
|
||||
|
||||
// get the form options
|
||||
$options = [];
|
||||
|
||||
// get the component params
|
||||
$params = Helper::getParams();
|
||||
$activate = $params->get('super_powers_repositories', 0);
|
||||
|
||||
// set the default
|
||||
$default = $params->get('super_powers_core', 'joomla/super-powers');
|
||||
|
||||
// must have one / in the path
|
||||
if (strpos($default, '/') !== false)
|
||||
{
|
||||
$tmp = new stdClass;
|
||||
$tmp->text = $tmp->value = trim($default);
|
||||
$tmp->checked = false;
|
||||
$options[$tmp->value] = $tmp;
|
||||
}
|
||||
|
||||
if ($activate == 1)
|
||||
{
|
||||
$subform = $params->get($this->fieldname);
|
||||
|
||||
// add the paths found in global settings
|
||||
if (is_object($subform))
|
||||
{
|
||||
foreach ($subform as $value)
|
||||
{
|
||||
if (isset($value->owner) && strlen($value->owner) > 1 &&
|
||||
isset($value->repo) && strlen($value->repo) > 1)
|
||||
{
|
||||
$tmp = new stdClass;
|
||||
$tmp->text = $tmp->value = trim($value->owner) . '/' . trim($value->repo);
|
||||
$tmp->checked = false;
|
||||
|
||||
$options[$tmp->value] = $tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$extraData = array(
|
||||
'checkedOptions' => is_array($checkedOptions) ? $checkedOptions : explode(',', (string) $checkedOptions),
|
||||
'hasValue' => $hasValue,
|
||||
'options' => array_values($options)
|
||||
);
|
||||
|
||||
return array_merge($data, $extraData);
|
||||
}
|
||||
}
|
@ -271,7 +271,7 @@ class ComponentbuilderModelFieldtype extends AdminModel
|
||||
{
|
||||
// column name, and id
|
||||
$type_extension = explode('__', $filter_extension);
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($type_extension[1], $type_extension[0])) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null)
|
||||
{
|
||||
$field_ids = $ids;
|
||||
}
|
||||
@ -287,7 +287,7 @@ class ComponentbuilderModelFieldtype extends AdminModel
|
||||
$filter_admin_view = $this->state->get("filter.admin_view");
|
||||
if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_admin_view, 'admin_view')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null)
|
||||
{
|
||||
// view will return less fields, so we ignore the component
|
||||
$field_ids = $ids;
|
||||
|
@ -86,8 +86,8 @@
|
||||
<option value="a.published DESC">JSTATUS_DESC</option>
|
||||
<option value="a.system_name ASC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_ASCENDING</option>
|
||||
<option value="a.system_name DESC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_DESCENDING</option>
|
||||
<option value="a.name_single ASC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORD_NAMING_CONVENTIONS_ASCENDING</option>
|
||||
<option value="a.name_single DESC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORD_NAMING_CONVENTIONS_DESCENDING</option>
|
||||
<option value="a.name_single ASC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORDNAMING_CONVENTIONS_ASCENDING</option>
|
||||
<option value="a.name_single DESC">COM_COMPONENTBUILDER_FILTER_NAME_SINGLE_RECORDNAMING_CONVENTIONS_DESCENDING</option>
|
||||
<option value="a.short_description ASC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_ASCENDING</option>
|
||||
<option value="a.short_description DESC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_DESCENDING</option>
|
||||
<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
|
||||
|
@ -66,8 +66,8 @@
|
||||
<option value="a.published DESC">JSTATUS_DESC</option>
|
||||
<option value="a.system_name ASC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_ASCENDING</option>
|
||||
<option value="a.system_name DESC">COM_COMPONENTBUILDER_FILTER_SYSTEM_NAME_DESCENDING</option>
|
||||
<option value="a.name_code ASC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODE_NAMING_CONVENTIONS_ASCENDING</option>
|
||||
<option value="a.name_code DESC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODE_NAMING_CONVENTIONS_DESCENDING</option>
|
||||
<option value="a.name_code ASC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODENAMING_CONVENTIONS_ASCENDING</option>
|
||||
<option value="a.name_code DESC">COM_COMPONENTBUILDER_FILTER_NAME_IN_CODENAMING_CONVENTIONS_DESCENDING</option>
|
||||
<option value="a.short_description ASC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_ASCENDING</option>
|
||||
<option value="a.short_description DESC">COM_COMPONENTBUILDER_FILTER_SHORT_DESCRIPTION_DESCENDING</option>
|
||||
<option value="a.companyname ASC">COM_COMPONENTBUILDER_FILTER_COMPANY_NAME_ASCENDING</option>
|
||||
|
@ -39,16 +39,9 @@
|
||||
onchange="this.form.submit();"
|
||||
/>
|
||||
<field
|
||||
type="powersfilterpowerversion"
|
||||
name="power_version"
|
||||
label="COM_COMPONENTBUILDER_POWER_POWER_VERSION_LABEL"
|
||||
multiple="false"
|
||||
onchange="this.form.submit();"
|
||||
/>
|
||||
<field
|
||||
type="classpowers"
|
||||
name="extends"
|
||||
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
|
||||
type="powersfilterapproved"
|
||||
name="approved"
|
||||
label="COM_COMPONENTBUILDER_POWER_APPROVED_LABEL"
|
||||
multiple="false"
|
||||
onchange="this.form.submit();"
|
||||
/>
|
||||
|
@ -159,6 +159,38 @@
|
||||
message="COM_COMPONENTBUILDER_POWER_POWER_VERSION_MESSAGE"
|
||||
hint="COM_COMPONENTBUILDER_POWER_POWER_VERSION_HINT"
|
||||
/>
|
||||
<!-- Not_required Field. Type: Hidden. (joomla) -->
|
||||
<field
|
||||
type="hidden"
|
||||
name="not_required"
|
||||
default="一_一"
|
||||
/>
|
||||
<!-- Method_selection Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
name="method_selection"
|
||||
label="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_LABEL"
|
||||
layout="joomla.form.field.subform.repeatable-table"
|
||||
multiple="true"
|
||||
buttons="add,remove,move"
|
||||
description="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_DESCRIPTION"
|
||||
icon="list"
|
||||
max="150"
|
||||
min="0">
|
||||
<form hidden="true" name="list_method_selection_modal" repeat="true">
|
||||
<!-- Method Field. Type: Pluginsclassmethods. (custom) -->
|
||||
<field
|
||||
type="pluginsclassmethods"
|
||||
name="method"
|
||||
label="COM_COMPONENTBUILDER_POWER_METHOD_LABEL"
|
||||
class="list_class span12 method_selection_list"
|
||||
multiple="false"
|
||||
default="0"
|
||||
onchange="getClassCode(this, 'method');"
|
||||
button="false"
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Load_selection Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
@ -184,20 +216,8 @@
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Load_powers_note Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="load_powers_note" label="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_DESCRIPTION" heading="h4" class="alert alert-info load_powers_note" />
|
||||
<!-- Description Field. Type: Textarea. (joomla) -->
|
||||
<field
|
||||
type="textarea"
|
||||
name="description"
|
||||
label="COM_COMPONENTBUILDER_POWER_DESCRIPTION_LABEL"
|
||||
rows="11"
|
||||
cols="10"
|
||||
description="COM_COMPONENTBUILDER_POWER_DESCRIPTION_DESCRIPTION"
|
||||
class="text_area span12"
|
||||
filter="HTML"
|
||||
hint="COM_COMPONENTBUILDER_POWER_DESCRIPTION_HINT"
|
||||
/>
|
||||
<!-- Note_linked_to_notice Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_linked_to_notice" label="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_DESCRIPTION" heading="h4" class="note_linked_to_notice" />
|
||||
<!-- Licensing_template Field. Type: Textarea. (joomla) -->
|
||||
<field
|
||||
type="textarea"
|
||||
@ -211,6 +231,20 @@
|
||||
validate="code"
|
||||
showon="add_licensing_template:2"
|
||||
/>
|
||||
<!-- Description Field. Type: Textarea. (joomla) -->
|
||||
<field
|
||||
type="textarea"
|
||||
name="description"
|
||||
label="COM_COMPONENTBUILDER_POWER_DESCRIPTION_LABEL"
|
||||
rows="11"
|
||||
cols="10"
|
||||
description="COM_COMPONENTBUILDER_POWER_DESCRIPTION_DESCRIPTION"
|
||||
class="text_area span12"
|
||||
filter="HTML"
|
||||
hint="COM_COMPONENTBUILDER_POWER_DESCRIPTION_HINT"
|
||||
/>
|
||||
<!-- Note_approved_paths Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_approved_paths" label="COM_COMPONENTBUILDER_POWER_NOTE_APPROVED_PATHS_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_APPROVED_PATHS_DESCRIPTION" heading="h4" class="alert alert-info note_approved_paths" showon="approved:1" />
|
||||
<!-- Composer Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
@ -268,6 +302,33 @@
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Extends Field. Type: Classpowers. (custom) -->
|
||||
<field
|
||||
type="classpowers"
|
||||
name="extends"
|
||||
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_EXTENDS_DESCRIPTION"
|
||||
class="list_class span12"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="type:class[OR]type:abstract class[OR]type:final class"
|
||||
button="true"
|
||||
/>
|
||||
<!-- Approved Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="approved"
|
||||
label="COM_COMPONENTBUILDER_POWER_APPROVED_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_APPROVED_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="0"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
<option value="0">
|
||||
COM_COMPONENTBUILDER_POWER_NOT_APPROVED</option>
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_POWER_APPROVED</option>
|
||||
</field>
|
||||
<!-- Property_selection Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
@ -308,6 +369,20 @@
|
||||
<option value="0">
|
||||
COM_COMPONENTBUILDER_POWER_NO</option>
|
||||
</field>
|
||||
<!-- Extends_custom Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="extends_custom"
|
||||
label="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_LABEL"
|
||||
size="10"
|
||||
maxlength="50"
|
||||
description="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_DESCRIPTION"
|
||||
class="text_area span12"
|
||||
filter="STRING"
|
||||
message="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_MESSAGE"
|
||||
autocomplete="on"
|
||||
showon="extends:-1[AND]type!:trait[AND]type!:interface"
|
||||
/>
|
||||
<!-- Implements_custom Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
@ -334,66 +409,6 @@
|
||||
showon="type!:interface[AND]type!:trait"
|
||||
button="true"
|
||||
/>
|
||||
<!-- Extends_custom Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
name="extends_custom"
|
||||
label="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_LABEL"
|
||||
size="10"
|
||||
maxlength="50"
|
||||
description="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_DESCRIPTION"
|
||||
class="text_area span12"
|
||||
filter="STRING"
|
||||
message="COM_COMPONENTBUILDER_POWER_EXTENDS_CUSTOM_MESSAGE"
|
||||
autocomplete="on"
|
||||
showon="extends:-1[AND]type!:trait[AND]type!:interface"
|
||||
/>
|
||||
<!-- Extends Field. Type: Classpowers. (custom) -->
|
||||
<field
|
||||
type="classpowers"
|
||||
name="extends"
|
||||
label="COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_EXTENDS_DESCRIPTION"
|
||||
class="list_class span12"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="type:class[OR]type:abstract class[OR]type:final class"
|
||||
button="true"
|
||||
/>
|
||||
<!-- Note_linked_to_notice Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="note_linked_to_notice" label="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_LABEL" description="COM_COMPONENTBUILDER_POWER_NOTE_LINKED_TO_NOTICE_DESCRIPTION" heading="h4" class="note_linked_to_notice" />
|
||||
<!-- Not_required Field. Type: Hidden. (joomla) -->
|
||||
<field
|
||||
type="hidden"
|
||||
name="not_required"
|
||||
default="一_一"
|
||||
/>
|
||||
<!-- Method_selection Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
name="method_selection"
|
||||
label="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_LABEL"
|
||||
layout="joomla.form.field.subform.repeatable-table"
|
||||
multiple="true"
|
||||
buttons="add,remove,move"
|
||||
description="COM_COMPONENTBUILDER_POWER_METHOD_SELECTION_DESCRIPTION"
|
||||
icon="list"
|
||||
max="150"
|
||||
min="0">
|
||||
<form hidden="true" name="list_method_selection_modal" repeat="true">
|
||||
<!-- Method Field. Type: Pluginsclassmethods. (custom) -->
|
||||
<field
|
||||
type="pluginsclassmethods"
|
||||
name="method"
|
||||
label="COM_COMPONENTBUILDER_POWER_METHOD_LABEL"
|
||||
class="list_class span12 method_selection_list"
|
||||
multiple="false"
|
||||
default="0"
|
||||
onchange="getClassCode(this, 'method');"
|
||||
button="false"
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Namespace_details Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="namespace_details" label="COM_COMPONENTBUILDER_POWER_NAMESPACE_DETAILS_LABEL" description="COM_COMPONENTBUILDER_POWER_NAMESPACE_DETAILS_DESCRIPTION" heading="h4" class="alert alert-success namespace_details" />
|
||||
<!-- Head Field. Type: Editor. (joomla) -->
|
||||
@ -413,8 +428,18 @@
|
||||
required="false"
|
||||
validate="code"
|
||||
/>
|
||||
<!-- Autoload_composer_note Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="autoload_composer_note" label="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_DESCRIPTION" heading="h4" class="alert alert-info autoload_composer_note" />
|
||||
<!-- Approved_paths Field. Type: Superpowerpaths. (custom) -->
|
||||
<field
|
||||
type="superpowerpaths"
|
||||
name="approved_paths"
|
||||
label="COM_COMPONENTBUILDER_POWER_APPROVED_PATHS_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_APPROVED_PATHS_DESCRIPTION"
|
||||
required="false"
|
||||
showon="approved:1">
|
||||
<!-- Option Set. -->
|
||||
<option value="joomla/super-powers">
|
||||
COM_COMPONENTBUILDER_POWER_JOOMLASUPERPOWERS</option>
|
||||
</field>
|
||||
<!-- Use_selection Field. Type: Subform. (joomla) -->
|
||||
<field
|
||||
type="subform"
|
||||
@ -452,21 +477,8 @@
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
<!-- Add_licensing_template Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="add_licensing_template"
|
||||
label="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="1"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_POWER_USE_GLOBAL</option>
|
||||
<option value="2">
|
||||
COM_COMPONENTBUILDER_POWER_OVERRIDE</option>
|
||||
</field>
|
||||
<!-- Autoload_composer_note Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="autoload_composer_note" label="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_AUTOLOAD_COMPOSER_NOTE_DESCRIPTION" heading="h4" class="alert alert-info autoload_composer_note" />
|
||||
<!-- Main_class_code Field. Type: Editor. (joomla) -->
|
||||
<field
|
||||
type="editor"
|
||||
@ -483,6 +495,23 @@
|
||||
filter="raw"
|
||||
validate="code"
|
||||
/>
|
||||
<!-- Add_licensing_template Field. Type: Radio. (joomla) -->
|
||||
<field
|
||||
type="radio"
|
||||
name="add_licensing_template"
|
||||
label="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_ADD_LICENSING_TEMPLATE_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
default="1"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
<option value="1">
|
||||
COM_COMPONENTBUILDER_POWER_USE_GLOBAL</option>
|
||||
<option value="2">
|
||||
COM_COMPONENTBUILDER_POWER_OVERRIDE</option>
|
||||
</field>
|
||||
<!-- Load_powers_note Field. Type: Note. A None Database Field. (joomla) -->
|
||||
<field type="note" name="load_powers_note" label="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_LABEL" description="COM_COMPONENTBUILDER_POWER_LOAD_POWERS_NOTE_DESCRIPTION" heading="h4" class="alert alert-info load_powers_note" />
|
||||
<!-- Guid Field. Type: Text. (joomla) -->
|
||||
<field
|
||||
type="text"
|
||||
|
@ -1122,7 +1122,7 @@ class ComponentbuilderModelImport_joomla_components extends BaseDatabaseModel
|
||||
return $data_;
|
||||
}
|
||||
|
||||
$this->app->enqueueMessage(Text::_('COM_COMPONENTBUILDER_HTWOWE_COULD_NOT_OPEN_THE_ENCRYPT_DATAHTWO_THIS_COULD_BE_DUE_TO_THE_FOFENCRYPTION_THAT_IS_NO_LONGER_SUPPORTED_IN_JOOMLABR_PLEASE_EXPORT_YOUR_PACKAGES_WITH_JCB_VTHREEONEONENINE_OR_HIGHER_TO_BE_ABLE_TO_IMPORT_IT_INTO_THIS_VERSION_OF_JCB'), 'error');
|
||||
$this->app->enqueueMessage(Text::_('COM_COMPONENTBUILDER_HTWOWE_COULD_NOT_OPEN_THE_ENCRYPT_DATAHTWO_THIS_COULD_BE_DUE_TO_THE_FOFENCRYPTION_THAT_IS_NO_LONGER_SUPPORTED_IN_JOOMLABR_PLEASE_EXPORT_YOUR_PACKAGES_WITH_JCB_VTHREEONEONEEIGHT_OR_HIGHER_TO_BE_ABLE_TO_IMPORT_IT_INTO_THIS_VERSION_OF_JCB'), 'error');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
|
||||
/**
|
||||
* Language_translations List Model
|
||||
@ -55,7 +57,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
|
||||
// Create the "extension" filter
|
||||
$form->setField(new SimpleXMLElement(
|
||||
ComponentbuilderHelper::getExtensionGroupedListXml()
|
||||
JCBFilterHelper::extensions()
|
||||
),'filter');
|
||||
$form->setValue(
|
||||
'extension',
|
||||
@ -75,7 +77,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_LANGUAGES_FOUND') . ' -'
|
||||
);
|
||||
// check if we have languages set
|
||||
if (($languages = ComponentbuilderHelper::getAvailableLanguages()) !== false)
|
||||
if (($languages = JCBFilterHelper::languages()) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_TRANSLATED_IN') . ' -',
|
||||
@ -85,7 +87,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$options = array_merge($options, $languages);
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'translated',
|
||||
'filter',
|
||||
@ -114,7 +116,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$options = array_merge($options, $languages);
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'not_translated',
|
||||
'filter',
|
||||
@ -300,7 +302,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$filter_translated = $this->state->get("filter.translated");
|
||||
if ($filter_translated !== null && !empty($filter_translated))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_translated)) !== false)
|
||||
if (($ids = JCBFilterHelper::translations($filter_translated)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -315,7 +317,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$filter_not_translated = $this->state->get("filter.not_translated");
|
||||
if ($filter_not_translated !== null && !empty($filter_not_translated))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_not_translated, false)) !== false)
|
||||
if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')');
|
||||
}
|
||||
@ -332,7 +334,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
{
|
||||
// column name, and id
|
||||
$type_extension = explode('__', $filter_extension);
|
||||
if (($ids = ComponentbuilderHelper::getTranslationExtensionsIds($type_extension[1], $type_extension[0])) !== false)
|
||||
if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -459,7 +461,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$filter_translated = $this->state->get("filter.translated");
|
||||
if ($filter_translated !== null && !empty($filter_translated))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_translated)) !== false)
|
||||
if (($ids = JCBFilterHelper::translations($filter_translated)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -474,7 +476,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
$filter_not_translated = $this->state->get("filter.not_translated");
|
||||
if ($filter_not_translated !== null && !empty($filter_not_translated))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getTranslationIds($filter_not_translated, false)) !== false)
|
||||
if (($ids = JCBFilterHelper::translations($filter_not_translated, false)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',',$ids) . ')');
|
||||
}
|
||||
@ -491,7 +493,7 @@ class ComponentbuilderModelLanguage_translations extends ListModel
|
||||
{
|
||||
// column name, and id
|
||||
$type_extension = explode('__', $filter_extension);
|
||||
if (($ids = ComponentbuilderHelper::getTranslationExtensionsIds($type_extension[1], $type_extension[0])) !== false)
|
||||
if (($ids = JCBFilterHelper::translation((int) $type_extension[1], $type_extension[0])) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
|
@ -16,6 +16,9 @@ use Joomla\CMS\MVC\Model\AdminModel;
|
||||
use Joomla\Registry\Registry;
|
||||
use Joomla\String\StringHelper;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\String\ClassfunctionHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper as UtilitiesStringHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
|
||||
/**
|
||||
* Componentbuilder Power Admin Model
|
||||
@ -65,6 +68,15 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
'licensing_template'
|
||||
)
|
||||
),
|
||||
'super_power' => array(
|
||||
'left' => array(
|
||||
'approved',
|
||||
'approved_paths'
|
||||
),
|
||||
'right' => array(
|
||||
'note_approved_paths'
|
||||
)
|
||||
),
|
||||
'composer' => array(
|
||||
'fullwidth' => array(
|
||||
'autoload_composer_note',
|
||||
@ -202,6 +214,14 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$item->main_class_code = base64_decode($item->main_class_code);
|
||||
}
|
||||
|
||||
if (!empty($item->method_selection))
|
||||
{
|
||||
// Convert the method_selection field to an array.
|
||||
$method_selection = new Registry;
|
||||
$method_selection->loadString($item->method_selection);
|
||||
$item->method_selection = $method_selection->toArray();
|
||||
}
|
||||
|
||||
if (!empty($item->load_selection))
|
||||
{
|
||||
// Convert the load_selection field to an array.
|
||||
@ -234,14 +254,6 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$item->implements = $implements->toArray();
|
||||
}
|
||||
|
||||
if (!empty($item->method_selection))
|
||||
{
|
||||
// Convert the method_selection field to an array.
|
||||
$method_selection = new Registry;
|
||||
$method_selection->loadString($item->method_selection);
|
||||
$item->method_selection = $method_selection->toArray();
|
||||
}
|
||||
|
||||
if (!empty($item->use_selection))
|
||||
{
|
||||
// Convert the use_selection field to an array.
|
||||
@ -250,6 +262,12 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$item->use_selection = $use_selection->toArray();
|
||||
}
|
||||
|
||||
if (!empty($item->approved_paths))
|
||||
{
|
||||
// JSON Decode approved_paths.
|
||||
$item->approved_paths = json_decode($item->approved_paths);
|
||||
}
|
||||
|
||||
|
||||
if (empty($item->id))
|
||||
{
|
||||
@ -1003,24 +1021,30 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$data['metadata'] = (string) $metadata;
|
||||
}
|
||||
|
||||
// Set the empty approved_paths item to data
|
||||
if (!isset($data['approved_paths']))
|
||||
{
|
||||
$data['approved_paths'] = '';
|
||||
}
|
||||
|
||||
// check if the name has placeholder
|
||||
if (strpos($data['name'], '[[[') === false && strpos($data['name'], '###') === false)
|
||||
{
|
||||
// make sure the name is safe to be used as a function name
|
||||
$data['name'] = ComponentbuilderHelper::safeClassFunctionName($data['name']);
|
||||
$data['name'] = ClassfunctionHelper::safe($data['name']);
|
||||
}
|
||||
// if system name is empty create from name
|
||||
if (empty($data['system_name']) || !ComponentbuilderHelper::checkString($data['system_name']))
|
||||
if (empty($data['system_name']) || !UtilitiesStringHelper::check($data['system_name']))
|
||||
{
|
||||
$data['system_name'] = $data['name'];
|
||||
}
|
||||
// must set the version if empty
|
||||
if (empty($data['power_version']) && $data['id'] > 0 && ($power_version = ComponentbuilderHelper::getVar('power', $data['id'], 'id', 'power_version')) !== false)
|
||||
if (empty($data['power_version']) && $data['id'] > 0 && ($power_version = GetHelper::var('power', $data['id'], 'id', 'power_version')) !== false)
|
||||
{
|
||||
$data['power_version'] = $power_version;
|
||||
}
|
||||
// we must preserve versions (so that a change to the version number must result in save as copy)
|
||||
elseif ($data['id'] > 0 && ($old_version = ComponentbuilderHelper::getVar('power', $data['id'], 'id', 'power_version')) && $data['power_version'] != $old_version)
|
||||
elseif ($data['id'] > 0 && ($old_version = GetHelper::var('power', $data['id'], 'id', 'power_version')) && $data['power_version'] != $old_version)
|
||||
{
|
||||
// lets check if we already have this version
|
||||
if (($existing_id = ComponentbuilderHelper::checkExist('power', ['power_version' => $data['power_version'], 'name' => $data['name'], 'namespace' => $data['namespace']])) !== false)
|
||||
@ -1051,6 +1075,19 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
}
|
||||
|
||||
|
||||
// Set the method_selection items to data.
|
||||
if (isset($data['method_selection']) && is_array($data['method_selection']))
|
||||
{
|
||||
$method_selection = new JRegistry;
|
||||
$method_selection->loadArray($data['method_selection']);
|
||||
$data['method_selection'] = (string) $method_selection;
|
||||
}
|
||||
elseif (!isset($data['method_selection']))
|
||||
{
|
||||
// Set the empty method_selection to data
|
||||
$data['method_selection'] = '';
|
||||
}
|
||||
|
||||
// Set the load_selection items to data.
|
||||
if (isset($data['load_selection']) && is_array($data['load_selection']))
|
||||
{
|
||||
@ -1103,19 +1140,6 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$data['implements'] = '';
|
||||
}
|
||||
|
||||
// Set the method_selection items to data.
|
||||
if (isset($data['method_selection']) && is_array($data['method_selection']))
|
||||
{
|
||||
$method_selection = new JRegistry;
|
||||
$method_selection->loadArray($data['method_selection']);
|
||||
$data['method_selection'] = (string) $method_selection;
|
||||
}
|
||||
elseif (!isset($data['method_selection']))
|
||||
{
|
||||
// Set the empty method_selection to data
|
||||
$data['method_selection'] = '';
|
||||
}
|
||||
|
||||
// Set the use_selection items to data.
|
||||
if (isset($data['use_selection']) && is_array($data['use_selection']))
|
||||
{
|
||||
@ -1129,6 +1153,12 @@ class ComponentbuilderModelPower extends AdminModel
|
||||
$data['use_selection'] = '';
|
||||
}
|
||||
|
||||
// Set the approved_paths string to JSON string.
|
||||
if (isset($data['approved_paths']))
|
||||
{
|
||||
$data['approved_paths'] = (string) json_encode($data['approved_paths']);
|
||||
}
|
||||
|
||||
// Set the licensing_template string to base64 string.
|
||||
if (isset($data['licensing_template']))
|
||||
{
|
||||
|
@ -14,6 +14,9 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Utilities\Component\Helper as JCBHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
|
||||
/**
|
||||
* Powers List Model
|
||||
@ -32,16 +35,123 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
'a.created_by','created_by',
|
||||
'a.modified_by','modified_by',
|
||||
'a.type','type',
|
||||
'a.power_version','power_version',
|
||||
'h.name','extends',
|
||||
'a.approved','approved',
|
||||
'a.system_name','system_name',
|
||||
'a.namespace','namespace'
|
||||
'a.namespace','namespace',
|
||||
'a.power_version','power_version'
|
||||
);
|
||||
}
|
||||
|
||||
parent::__construct($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filter form - Override the parent method
|
||||
*
|
||||
* @param array $data data
|
||||
* @param boolean $loadData load current data
|
||||
*
|
||||
* @return \JForm|boolean The \JForm object or false on error
|
||||
*
|
||||
* @since JCB 2.12.5
|
||||
*/
|
||||
public function getFilterForm($data = array(), $loadData = true)
|
||||
{
|
||||
// load form from the parent class
|
||||
$form = parent::getFilterForm($data, $loadData);
|
||||
|
||||
// Create the "admin_view" filter
|
||||
$attributes = array(
|
||||
'name' => 'namegroup',
|
||||
'type' => 'list',
|
||||
'onchange' => 'this.form.submit();',
|
||||
);
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_NAMESPACE_FOUND') . ' -'
|
||||
);
|
||||
// check if we have namespace (and limit to an extension if it is set)
|
||||
if (($namespaces = JCBFilterHelper::namespaces()) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_A_NAMESPACE') . ' -'
|
||||
);
|
||||
// make sure we do not lose the key values in normal merge
|
||||
$options = $options + $namespaces;
|
||||
}
|
||||
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'namegroup',
|
||||
'filter',
|
||||
$this->state->get("filter.namegroup")
|
||||
);
|
||||
array_push($this->filter_fields, 'namegroup');
|
||||
|
||||
// get the component params
|
||||
$params = JCBHelper::getParams();
|
||||
$activate = $params->get('super_powers_repositories', 0);
|
||||
if ($activate == 1)
|
||||
{
|
||||
$subform = $params->get('approved_paths', null);
|
||||
|
||||
// create approved paths filter
|
||||
$attributes = array(
|
||||
'name' => 'approved_paths',
|
||||
'type' => 'list',
|
||||
'onchange' => 'this.form.submit();',
|
||||
);
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_PATHS_FOUND') . ' -'
|
||||
);
|
||||
|
||||
// add the paths found in global settings
|
||||
if (is_object($subform))
|
||||
{
|
||||
$core = $params->get('super_powers_core', 'joomla/super-powers');
|
||||
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_APPROVED_PATH') . ' -',
|
||||
$core => $core
|
||||
);
|
||||
|
||||
foreach ($subform as $value)
|
||||
{
|
||||
if (isset($value->owner) && strlen($value->owner) > 1 &&
|
||||
isset($value->repo) && strlen($value->repo) > 1)
|
||||
{
|
||||
$value = trim($value->owner) . '/' . trim($value->repo);
|
||||
|
||||
$options[$value] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options), 'filter');
|
||||
$form->setValue(
|
||||
'approved_paths',
|
||||
'filter',
|
||||
$this->state->get("filter.approved_paths")
|
||||
);
|
||||
array_push($this->filter_fields, 'approved_paths');
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a power can be used in linking
|
||||
*
|
||||
* @param string $type the type of power
|
||||
*
|
||||
* @return bool
|
||||
* @since JCB 3.1.23
|
||||
*/
|
||||
protected function isSuperPower(string $type): bool
|
||||
{
|
||||
return in_array($type, ['class', 'abstract class', 'final class', 'trait']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method to auto-populate the model state.
|
||||
*
|
||||
@ -95,18 +205,11 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
$this->setState('filter.type', $type);
|
||||
}
|
||||
|
||||
$power_version = $this->getUserStateFromRequest($this->context . '.filter.power_version', 'filter_power_version');
|
||||
$approved = $this->getUserStateFromRequest($this->context . '.filter.approved', 'filter_approved');
|
||||
if ($formSubmited)
|
||||
{
|
||||
$power_version = $app->input->post->get('power_version');
|
||||
$this->setState('filter.power_version', $power_version);
|
||||
}
|
||||
|
||||
$extends = $this->getUserStateFromRequest($this->context . '.filter.extends', 'filter_extends');
|
||||
if ($formSubmited)
|
||||
{
|
||||
$extends = $app->input->post->get('extends');
|
||||
$this->setState('filter.extends', $extends);
|
||||
$approved = $app->input->post->get('approved');
|
||||
$this->setState('filter.approved', $approved);
|
||||
}
|
||||
|
||||
$system_name = $this->getUserStateFromRequest($this->context . '.filter.system_name', 'filter_system_name');
|
||||
@ -123,6 +226,13 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
$this->setState('filter.namespace', $namespace);
|
||||
}
|
||||
|
||||
$power_version = $this->getUserStateFromRequest($this->context . '.filter.power_version', 'filter_power_version');
|
||||
if ($formSubmited)
|
||||
{
|
||||
$power_version = $app->input->post->get('power_version');
|
||||
$this->setState('filter.power_version', $power_version);
|
||||
}
|
||||
|
||||
// List state information.
|
||||
parent::populateState($ordering, $direction);
|
||||
}
|
||||
@ -158,6 +268,11 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
continue;
|
||||
}
|
||||
|
||||
// create the GUID placeholder key
|
||||
if ($this->isSuperPower($item->type))
|
||||
{
|
||||
$item->super_power_key = 'Super_'.'_'.'_' . str_replace('-', '_', $item->guid) . '_'.'_'.'_Power';
|
||||
}
|
||||
// remove dots
|
||||
$item->namespace = str_replace('.','\\', $item->namespace);
|
||||
}
|
||||
@ -170,6 +285,8 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
{
|
||||
// convert type
|
||||
$item->type = $this->selectionTranslation($item->type, 'type');
|
||||
// convert approved
|
||||
$item->approved = $this->selectionTranslation($item->approved, 'approved');
|
||||
}
|
||||
}
|
||||
|
||||
@ -201,6 +318,19 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
return $typeArray[$value];
|
||||
}
|
||||
}
|
||||
// Array of approved language strings
|
||||
if ($name === 'approved')
|
||||
{
|
||||
$approvedArray = array(
|
||||
0 => 'COM_COMPONENTBUILDER_POWER_NOT_APPROVED',
|
||||
1 => 'COM_COMPONENTBUILDER_POWER_APPROVED'
|
||||
);
|
||||
// Now check if value is found in this array
|
||||
if (isset($approvedArray[$value]) && ComponentbuilderHelper::checkString($approvedArray[$value]))
|
||||
{
|
||||
return $approvedArray[$value];
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -223,9 +353,43 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
// From the componentbuilder_item table
|
||||
$query->from($db->quoteName('#__componentbuilder_power', 'a'));
|
||||
|
||||
// do not use these filters in the export method
|
||||
if (!isset($_export) || !$_export)
|
||||
{
|
||||
// Filtering "namegroup"
|
||||
$filter_namegroup = $this->state->get("filter.namegroup");
|
||||
if ($filter_namegroup !== null && !empty($filter_namegroup))
|
||||
{
|
||||
if (($ids = JCBFilterHelper::namegroup($filter_namegroup)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
else
|
||||
{
|
||||
// there is none
|
||||
$query->where($db->quoteName('a.id') . ' = ' . 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Filtering "approved paths"
|
||||
$filter_approved_paths = $this->state->get("filter.approved_paths");
|
||||
if ($filter_approved_paths !== null && !empty($filter_approved_paths))
|
||||
{
|
||||
if (($ids = JCBFilterHelper::paths($filter_approved_paths)) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
else
|
||||
{
|
||||
// there is none
|
||||
$query->where($db->quoteName('a.id') . ' = ' . 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// From the componentbuilder_power table.
|
||||
$query->select($db->quoteName(['h.name','h.id'],['extends_name','extends_id']));
|
||||
$query->join('LEFT', $db->quoteName('#__componentbuilder_power', 'h') . ' ON (' . $db->quoteName('a.extends') . ' = ' . $db->quoteName('h.guid') . ')');
|
||||
$query->select($db->quoteName(['g.name','g.id'],['extends_name','extends_id']));
|
||||
$query->join('LEFT', $db->quoteName('#__componentbuilder_power', 'g') . ' ON (' . $db->quoteName('a.extends') . ' = ' . $db->quoteName('g.guid') . ')');
|
||||
|
||||
// Filter by published state
|
||||
$published = $this->getState('filter.published');
|
||||
@ -271,7 +435,7 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
else
|
||||
{
|
||||
$search = $db->quote('%' . $db->escape($search) . '%');
|
||||
$query->where('(a.system_name LIKE '.$search.' OR a.type LIKE '.$search.' OR a.description LIKE '.$search.' OR a.extends_custom LIKE '.$search.' OR a.extends LIKE '.$search.' OR a.guid LIKE '.$search.' OR a.name LIKE '.$search.')');
|
||||
$query->where('(a.system_name LIKE '.$search.' OR a.type LIKE '.$search.' OR a.description LIKE '.$search.' OR a.extends LIKE '.$search.' OR a.extends_custom LIKE '.$search.' OR a.approved_paths LIKE '.$search.' OR a.guid LIKE '.$search.' OR a.name LIKE '.$search.')');
|
||||
}
|
||||
}
|
||||
|
||||
@ -315,39 +479,22 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
// Filter by the Type Array.
|
||||
$query->where('a.type IN (' . implode(',', $_type) . ')');
|
||||
}
|
||||
// Filter by Power_version.
|
||||
$_power_version = $this->getState('filter.power_version');
|
||||
if (is_numeric($_power_version))
|
||||
// Filter by Approved.
|
||||
$_approved = $this->getState('filter.approved');
|
||||
if (is_numeric($_approved))
|
||||
{
|
||||
if (is_float($_power_version))
|
||||
if (is_float($_approved))
|
||||
{
|
||||
$query->where('a.power_version = ' . (float) $_power_version);
|
||||
$query->where('a.approved = ' . (float) $_approved);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where('a.power_version = ' . (int) $_power_version);
|
||||
$query->where('a.approved = ' . (int) $_approved);
|
||||
}
|
||||
}
|
||||
elseif (ComponentbuilderHelper::checkString($_power_version))
|
||||
elseif (ComponentbuilderHelper::checkString($_approved))
|
||||
{
|
||||
$query->where('a.power_version = ' . $db->quote($db->escape($_power_version)));
|
||||
}
|
||||
// Filter by Extends.
|
||||
$_extends = $this->getState('filter.extends');
|
||||
if (is_numeric($_extends))
|
||||
{
|
||||
if (is_float($_extends))
|
||||
{
|
||||
$query->where('a.extends = ' . (float) $_extends);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where('a.extends = ' . (int) $_extends);
|
||||
}
|
||||
}
|
||||
elseif (ComponentbuilderHelper::checkString($_extends))
|
||||
{
|
||||
$query->where('a.extends = ' . $db->quote($db->escape($_extends)));
|
||||
$query->where('a.approved = ' . $db->quote($db->escape($_approved)));
|
||||
}
|
||||
|
||||
// Add the list ordering clause.
|
||||
@ -400,10 +547,10 @@ class ComponentbuilderModelPowers extends ListModel
|
||||
{
|
||||
$id .= ':' . $_type;
|
||||
}
|
||||
$id .= ':' . $this->getState('filter.power_version');
|
||||
$id .= ':' . $this->getState('filter.extends');
|
||||
$id .= ':' . $this->getState('filter.approved');
|
||||
$id .= ':' . $this->getState('filter.system_name');
|
||||
$id .= ':' . $this->getState('filter.namespace');
|
||||
$id .= ':' . $this->getState('filter.power_version');
|
||||
|
||||
return parent::getStoreId($id);
|
||||
}
|
||||
|
@ -14,6 +14,8 @@ defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
use Joomla\CMS\MVC\Model\ListModel;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FormHelper as JCBFormHelper;
|
||||
use VDM\Joomla\Componentbuilder\Utilities\FilterHelper as JCBFilterHelper;
|
||||
|
||||
/**
|
||||
* Site_views List Model
|
||||
@ -69,7 +71,7 @@ class ComponentbuilderModelSite_views extends ListModel
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_NO_COMPONENTS_FOUND') . ' -'
|
||||
);
|
||||
// check if we have joomla components
|
||||
if (($joomla_components = ComponentbuilderHelper::getByTypeTheIdsSystemNames('joomla_component')) !== false)
|
||||
if (($joomla_components = JCBFilterHelper::names('joomla_component')) !== null)
|
||||
{
|
||||
$options = array(
|
||||
'' => '- ' . JText::_('COM_COMPONENTBUILDER_SELECT_COMPONENT') . ' -'
|
||||
@ -78,7 +80,7 @@ class ComponentbuilderModelSite_views extends ListModel
|
||||
$options = $options + $joomla_components;
|
||||
}
|
||||
|
||||
$form->setField(ComponentbuilderHelper::getFieldXML($attributes, $options),'filter');
|
||||
$form->setField(JCBFormHelper::xml($attributes, $options),'filter');
|
||||
$form->setValue(
|
||||
'joomla_component',
|
||||
'filter',
|
||||
@ -301,7 +303,7 @@ class ComponentbuilderModelSite_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_site_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_site_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
@ -506,7 +508,7 @@ class ComponentbuilderModelSite_views extends ListModel
|
||||
$filter_joomla_component = $this->state->get("filter.joomla_component");
|
||||
if ($filter_joomla_component !== null && !empty($filter_joomla_component))
|
||||
{
|
||||
if (($ids = ComponentbuilderHelper::getAreaLinkedIDs($filter_joomla_component, 'joomla_component_site_views')) !== false)
|
||||
if (($ids = JCBFilterHelper::linked((int) $filter_joomla_component, 'joomla_component_site_views')) !== null)
|
||||
{
|
||||
$query->where($db->quoteName('a.id') . ' IN (' . implode(',', $ids) . ')');
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
1
admin/sql/updates/mysql/3.1.19.sql
Normal file
1
admin/sql/updates/mysql/3.1.19.sql
Normal file
@ -0,0 +1 @@
|
||||
|
2
admin/sql/updates/mysql/3.1.21.sql
Normal file
2
admin/sql/updates/mysql/3.1.21.sql
Normal file
@ -0,0 +1,2 @@
|
||||
ALTER TABLE `#__componentbuilder_power` ADD `approved` TINYINT(1) NOT NULL DEFAULT 0 AFTER `add_licensing_template`;
|
||||
ALTER TABLE `#__componentbuilder_power` ADD `approved_paths` TEXT NOT NULL AFTER `approved`;
|
@ -11,6 +11,7 @@
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
use VDM\Joomla\Utilities\StringHelper;
|
||||
|
||||
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
|
||||
JHtml::_('behavior.formvalidator');
|
||||
@ -125,7 +126,7 @@ jQuery('<div id="compiling"></div>')
|
||||
<?php else : ?>
|
||||
<div id="j-main-container">
|
||||
<?php endif; ?>
|
||||
<?php if (ComponentbuilderHelper::checkString($this->SuccessMessage)): ?>
|
||||
<?php if (StringHelper::check($this->SuccessMessage)): ?>
|
||||
<div class="alert alert-success">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<?php echo $this->SuccessMessage; ?>
|
||||
|
@ -356,6 +356,45 @@ class ComponentbuilderViewCompiler extends HtmlView
|
||||
$form->setField($xml, null, true, 'advanced');
|
||||
}
|
||||
|
||||
// powers repository attributes
|
||||
$attributes = [
|
||||
'type' => 'radio',
|
||||
'name' => 'powers_repository',
|
||||
'label' => 'COM_COMPONENTBUILDER_ACTIVATE_SUPER_POWERS',
|
||||
'class' => 'btn-group btn-group-yesno',
|
||||
'description' => 'COM_COMPONENTBUILDER_THIS_ADDS_POWERS_TO_A_LOCAL_REPOSITORY_FOLDER_ALL_BAPPROVEDB_POWERS_LINKED_TO_THIS_COMPONENT_WILL_BE_MOVED_TO_YOUR_BLOCALB_POWERS_REPOSITORY_FOLDER_INTO_THEIR_SELECTIVE_TARGET_PATHS_THIS_LOCAL_FOLDER_PATH_MUST_BE_SET_IN_THE_GLOBAL_OPTIONS_OF_JCB_UNDER_THE_BSUPER_POWERB_TAB',
|
||||
'default' => '2',
|
||||
'showon' => 'show_advanced_options:1'];
|
||||
// start the repository options
|
||||
$options = [
|
||||
'2' => 'COM_COMPONENTBUILDER_GLOBAL',
|
||||
'1' => 'COM_COMPONENTBUILDER_YES',
|
||||
'0' => 'COM_COMPONENTBUILDER_NO'];
|
||||
|
||||
// add to form
|
||||
$xml = ComponentbuilderHelper::getFieldXML($attributes, $options);
|
||||
if ($xml instanceof SimpleXMLElement)
|
||||
{
|
||||
$form->setField($xml, null, true, 'advanced');
|
||||
}
|
||||
|
||||
// powers local path to repositories attributes
|
||||
$attributes = [
|
||||
'type' => 'text',
|
||||
'name' => 'local_powers_repository_path',
|
||||
'label' => 'COM_COMPONENTBUILDER_LOCAL_POWERS_REPOSITORY_PATH',
|
||||
'class' => 'btn-group btn-group-yesno',
|
||||
'description' => 'COM_COMPONENTBUILDER_HERE_YOU_CAN_SET_THE_PATH_TO_THE_SUPER_POWERS_LOCAL_REPOSITORY_FOLDER_WHERE_BLAYERCOREB_AND_ALL_TARGETED_BLAYEROWNB_SUB_PATHS_WILL_BE_PLACED_WITH_THEIR_SELECTIVE_BSWITCHAPPROVEDB_POWERS',
|
||||
'default' => $this->params->get('local_powers_repository_path', ''),
|
||||
'showon' => 'show_advanced_options:1[AND]powers_repository:1'];
|
||||
|
||||
// add to form
|
||||
$xml = ComponentbuilderHelper::getFieldXML($attributes);
|
||||
if ($xml instanceof SimpleXMLElement)
|
||||
{
|
||||
$form->setField($xml, null, true, 'advanced');
|
||||
}
|
||||
|
||||
// Indentation attributes
|
||||
$attributes = [
|
||||
'type' => 'radio',
|
||||
|
@ -64,6 +64,17 @@ $componentParams = $this->params; // will be removed just use $this->params inst
|
||||
</div>
|
||||
<?php echo JHtml::_('bootstrap.endTab'); ?>
|
||||
|
||||
<?php echo JHtml::_('bootstrap.addTab', 'powerTab', 'super_power', JText::_('COM_COMPONENTBUILDER_POWER_SUPER_POWER', true)); ?>
|
||||
<div class="row-fluid form-horizontal-desktop">
|
||||
<div class="span6">
|
||||
<?php echo JLayoutHelper::render('power.super_power_left', $this); ?>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<?php echo JLayoutHelper::render('power.super_power_right', $this); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo JHtml::_('bootstrap.endTab'); ?>
|
||||
|
||||
<?php echo JHtml::_('bootstrap.addTab', 'powerTab', 'composer', JText::_('COM_COMPONENTBUILDER_POWER_COMPOSER', true)); ?>
|
||||
<div class="row-fluid form-horizontal-desktop">
|
||||
</div>
|
||||
|
@ -146,6 +146,16 @@ class ComponentbuilderViewPower extends HtmlView
|
||||
{
|
||||
JToolBarHelper::custom('power.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false);
|
||||
}
|
||||
if ($this->canDo->get('power.sync'))
|
||||
{
|
||||
// add Sync button.
|
||||
JToolBarHelper::custom('power.syncPowers', 'loop custom-button-syncpowers', '', 'COM_COMPONENTBUILDER_SYNC', false);
|
||||
}
|
||||
if ($this->canDo->get('power.reset'))
|
||||
{
|
||||
// add Reset button.
|
||||
JToolBarHelper::custom('power.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false);
|
||||
}
|
||||
JToolBarHelper::cancel('power.cancel', 'JTOOLBAR_CLOSE');
|
||||
}
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ $edit = "index.php?option=com_componentbuilder&view=powers&task=power.edit";
|
||||
<?php else: ?>
|
||||
<?php echo $this->escape($item->system_name); ?>
|
||||
<?php endif; ?><br /><small>GUID:
|
||||
<?php echo $this->escape($item->guid); ?></small>
|
||||
<?php echo $this->escape($item->guid); ?><?php if(isset($item->super_power_key)): ?><br />SPK: <?php echo $item->super_power_key; ?><?php endif; ?></small>
|
||||
</div>
|
||||
</td>
|
||||
<td class="hidden-phone">
|
||||
@ -81,7 +81,8 @@ $edit = "index.php?option=com_componentbuilder&view=powers&task=power.edit";
|
||||
<?php else: ?>
|
||||
<?php echo $this->escape($item->extends_name); ?>
|
||||
<?php endif; ?><?php elseif ($item->extends === '-1') : ?><br /><?php echo JText::_('COM_COMPONENTBUILDER_EXTENDS'); ?>:
|
||||
<?php echo $this->escape($item->extends_custom); ?><?php endif; ?>
|
||||
<?php echo $this->escape($item->extends_custom); ?><?php endif; ?><br /><?php echo JText::_('COM_COMPONENTBUILDER_SUPER_POWER'); ?>:
|
||||
<?php echo JText::_($item->approved); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="hidden-phone">
|
||||
|
@ -141,6 +141,21 @@ class ComponentbuilderViewPowers extends HtmlView
|
||||
// add Run Expansion button.
|
||||
JToolBarHelper::custom('powers.runExpansion', 'expand-2 custom-button-runexpansion', '', 'COM_COMPONENTBUILDER_RUN_EXPANSION', false);
|
||||
}
|
||||
if ($this->user->authorise('power.init', 'com_componentbuilder'))
|
||||
{
|
||||
// add Init button.
|
||||
JToolBarHelper::custom('powers.initPowers', 'health custom-button-initpowers', '', 'COM_COMPONENTBUILDER_INIT', false);
|
||||
}
|
||||
if ($this->user->authorise('power.sync', 'com_componentbuilder'))
|
||||
{
|
||||
// add Sync button.
|
||||
JToolBarHelper::custom('powers.syncPowers', 'loop custom-button-syncpowers', '', 'COM_COMPONENTBUILDER_SYNC', false);
|
||||
}
|
||||
if ($this->user->authorise('power.reset', 'com_componentbuilder'))
|
||||
{
|
||||
// add Reset button.
|
||||
JToolBarHelper::custom('powers.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false);
|
||||
}
|
||||
|
||||
// set help url for this view if found
|
||||
$this->help_url = ComponentbuilderHelper::getHelpUrl('powers');
|
||||
@ -195,43 +210,23 @@ class ComponentbuilderViewPowers extends HtmlView
|
||||
);
|
||||
}
|
||||
|
||||
// Only load Power Version batch if create, edit, and batch is allowed
|
||||
// Only load Approved batch if create, edit, and batch is allowed
|
||||
if ($this->canBatch && $this->canCreate && $this->canEdit)
|
||||
{
|
||||
// Set Power Version Selection
|
||||
$this->power_versionOptions = JFormHelper::loadFieldType('powersfilterpowerversion')->options;
|
||||
// We do some sanitation for Power Version filter
|
||||
if (ComponentbuilderHelper::checkArray($this->power_versionOptions) &&
|
||||
isset($this->power_versionOptions[0]->value) &&
|
||||
!ComponentbuilderHelper::checkString($this->power_versionOptions[0]->value))
|
||||
// Set Approved Selection
|
||||
$this->approvedOptions = JFormHelper::loadFieldType('powersfilterapproved')->options;
|
||||
// We do some sanitation for Approved filter
|
||||
if (ComponentbuilderHelper::checkArray($this->approvedOptions) &&
|
||||
isset($this->approvedOptions[0]->value) &&
|
||||
!ComponentbuilderHelper::checkString($this->approvedOptions[0]->value))
|
||||
{
|
||||
unset($this->power_versionOptions[0]);
|
||||
unset($this->approvedOptions[0]);
|
||||
}
|
||||
// Power Version Batch Selection
|
||||
// Approved Batch Selection
|
||||
JHtmlBatch_::addListSelection(
|
||||
'- Keep Original '.JText::_('COM_COMPONENTBUILDER_POWER_POWER_VERSION_LABEL').' -',
|
||||
'batch[power_version]',
|
||||
JHtml::_('select.options', $this->power_versionOptions, 'value', 'text')
|
||||
);
|
||||
}
|
||||
|
||||
// Only load Extends Name batch if create, edit, and batch is allowed
|
||||
if ($this->canBatch && $this->canCreate && $this->canEdit)
|
||||
{
|
||||
// Set Extends Name Selection
|
||||
$this->extendsNameOptions = JFormHelper::loadFieldType('Classpowers')->options;
|
||||
// We do some sanitation for Extends Name filter
|
||||
if (ComponentbuilderHelper::checkArray($this->extendsNameOptions) &&
|
||||
isset($this->extendsNameOptions[0]->value) &&
|
||||
!ComponentbuilderHelper::checkString($this->extendsNameOptions[0]->value))
|
||||
{
|
||||
unset($this->extendsNameOptions[0]);
|
||||
}
|
||||
// Extends Name Batch Selection
|
||||
JHtmlBatch_::addListSelection(
|
||||
'- Keep Original '.JText::_('COM_COMPONENTBUILDER_POWER_EXTENDS_LABEL').' -',
|
||||
'batch[extends]',
|
||||
JHtml::_('select.options', $this->extendsNameOptions, 'value', 'text')
|
||||
'- Keep Original '.JText::_('COM_COMPONENTBUILDER_POWER_APPROVED_LABEL').' -',
|
||||
'batch[approved]',
|
||||
JHtml::_('select.options', $this->approvedOptions, 'value', 'text')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension type="component" version="4" method="upgrade">
|
||||
<name>COM_COMPONENTBUILDER</name>
|
||||
<creationDate>27th February, 2023</creationDate>
|
||||
<creationDate>2nd May, 2023</creationDate>
|
||||
<author>Llewellyn van der Merwe</author>
|
||||
<authorEmail>joomla@vdm.io</authorEmail>
|
||||
<authorUrl>https://dev.vdm.io</authorUrl>
|
||||
<copyright>Copyright (C) 2015 Vast Development Method. All rights reserved.</copyright>
|
||||
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
|
||||
<version>3.1.19</version>
|
||||
<version>3.1.24</version>
|
||||
<description><![CDATA[
|
||||
<h1>Component Builder (v.3.1.19)</h1>
|
||||
<h1>Component Builder (v.3.1.24)</h1>
|
||||
<div style="clear: both;"></div>
|
||||
<p>The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
|
||||
|
||||
|
@ -1127,4 +1127,40 @@
|
||||
<maintainerurl>https://dev.vdm.io</maintainerurl>
|
||||
<targetplatform name="joomla" version="3.*"/>
|
||||
</update>
|
||||
<update>
|
||||
<name>Component Builder</name>
|
||||
<description>Builds Complex Joomla Components</description>
|
||||
<element>pkg_component_builder</element>
|
||||
<type>package</type>
|
||||
<client>site</client>
|
||||
<version>3.1.21</version>
|
||||
<infourl title="Component Builder!">https://dev.vdm.io</infourl>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla-beta/pkg-component-builder/archive/v3.1.22.zip</downloadurl>
|
||||
</downloads>
|
||||
<tags>
|
||||
<tag>beta</tag>
|
||||
</tags>
|
||||
<maintainer>Llewellyn van der Merwe</maintainer>
|
||||
<maintainerurl>https://dev.vdm.io</maintainerurl>
|
||||
<targetplatform name="joomla" version="3.*"/>
|
||||
</update>
|
||||
<update>
|
||||
<name>Component Builder</name>
|
||||
<description>Builds Complex Joomla Components</description>
|
||||
<element>pkg_component_builder</element>
|
||||
<type>package</type>
|
||||
<client>site</client>
|
||||
<version>3.1.24</version>
|
||||
<infourl title="Component Builder!">https://dev.vdm.io</infourl>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.1.24.zip</downloadurl>
|
||||
</downloads>
|
||||
<tags>
|
||||
<tag>stable</tag>
|
||||
</tags>
|
||||
<maintainer>Llewellyn van der Merwe</maintainer>
|
||||
<maintainerurl>https://dev.vdm.io</maintainerurl>
|
||||
<targetplatform name="joomla" version="3.*"/>
|
||||
</update>
|
||||
</updates>
|
@ -1,164 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http as BaseHttp;
|
||||
use Joomla\CMS\Http\HttpFactory;
|
||||
use Joomla\CMS\Http\Response;
|
||||
use Joomla\Registry\Registry;
|
||||
use Joomla\Uri\Uri;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
|
||||
abstract class AbstractGiteaObject
|
||||
{
|
||||
/**
|
||||
* Options for the Gitea object.
|
||||
*
|
||||
* @var Registry
|
||||
* @since 1.0
|
||||
*/
|
||||
protected $options;
|
||||
|
||||
/**
|
||||
* The HTTP client object to use in sending HTTP requests.
|
||||
*
|
||||
* @var BaseHttp
|
||||
* @since 1.0
|
||||
*/
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
* The package the object resides in
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0
|
||||
*/
|
||||
protected $package = '';
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Registry $options Gitea options object.
|
||||
* @param BaseHttp $client The HTTP client object.
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function __construct(Registry $options = null, BaseHttp $client = null)
|
||||
{
|
||||
$this->options = $options ?: new Registry;
|
||||
$this->client = $client ?: (new HttpFactory)->getHttp($this->options);
|
||||
|
||||
$this->package = static::class;
|
||||
$this->package = substr($this->package, strrpos($this->package, '\\') + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to build and return a full request URL for the request. This method will
|
||||
* add appropriate pagination details if necessary and also prepend the API url
|
||||
* to have a complete URL for the request.
|
||||
*
|
||||
* @param string $path URL to inflect
|
||||
* @param integer $page Page to request
|
||||
* @param integer $limit Number of results to return per page
|
||||
*
|
||||
* @return Uri
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
protected function fetchUrl($path, $page = 0, $limit = 0)
|
||||
{
|
||||
// Get a new Uri object focusing the api url and given path.
|
||||
$uri = new Uri($this->options->get('api.url') . $path);
|
||||
|
||||
if ($this->options->get('access.token', false))
|
||||
{
|
||||
// Use oAuth authentication
|
||||
$headers = $this->client->getOption('headers', []);
|
||||
|
||||
if (!isset($headers['Authorization']))
|
||||
{
|
||||
$headers['Authorization'] = 'token ' . $this->options->get('access.token');
|
||||
$this->client->setOption('headers', $headers);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use basic authentication
|
||||
if ($this->options->get('api.username', false))
|
||||
{
|
||||
$uri->setUser($this->options->get('api.username'));
|
||||
}
|
||||
|
||||
if ($this->options->get('api.password', false))
|
||||
{
|
||||
$uri->setPass($this->options->get('api.password'));
|
||||
}
|
||||
}
|
||||
|
||||
// If we have a defined page number add it to the JUri object.
|
||||
if ($page > 0)
|
||||
{
|
||||
$uri->setVar('page', (int) $page);
|
||||
}
|
||||
|
||||
// If we have a defined items per page add it to the JUri object.
|
||||
if ($limit > 0)
|
||||
{
|
||||
$uri->setVar('limit', (int) $limit);
|
||||
}
|
||||
|
||||
return $uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the response and decode it.
|
||||
*
|
||||
* @param Response $response The response.
|
||||
* @param integer $expectedCode The expected "good" code.
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @since 1.0
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
protected function processResponse(Response $response, $expectedCode = 200)
|
||||
{
|
||||
// Validate the response code.
|
||||
if ($response->code != $expectedCode)
|
||||
{
|
||||
// Decode the error response and throw an exception.
|
||||
$error = json_decode((string) $response->body);
|
||||
$message = isset($error->message) ? $error->message : 'Invalid response received from Gitea.';
|
||||
|
||||
throw new \DomainException($message, $response->code);
|
||||
}
|
||||
|
||||
if (JsonHelper::check($response->body))
|
||||
{
|
||||
$body = json_decode((string) $response->body);
|
||||
|
||||
if (isset($body->content_base64))
|
||||
{
|
||||
$body->content = base64_decode((string) $body->content_base64);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$body = $response->body;
|
||||
}
|
||||
|
||||
return $body;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http as BaseHttp;
|
||||
use Joomla\Registry\Registry;
|
||||
use VDM\Gitea\AbstractGiteaObject;
|
||||
|
||||
abstract class AbstractPackage extends AbstractGiteaObject
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Registry $options Gitea options object.
|
||||
* @param Http $client The HTTP client object.
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function __construct(Registry $options = null, BaseHttp $client = null)
|
||||
{
|
||||
parent::__construct($options, $client);
|
||||
|
||||
$this->package = static::class;
|
||||
$this->package = substr($this->package, strrpos($this->package, '\\') + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to lazily create API objects
|
||||
*
|
||||
* @param string $name Name of property to retrieve
|
||||
*
|
||||
* @since 1.0
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return AbstractPackage Gitea API package object.
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$class = '\\VDM\\Gitea\\Package\\' . $this->package . '\\' . ucfirst($name);
|
||||
|
||||
if (class_exists($class) == false)
|
||||
{
|
||||
throw new \InvalidArgumentException(
|
||||
sprintf(
|
||||
'Argument %1$s produced an invalid class name: %2$s in package %3$s',
|
||||
$name, $class, $this->package
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($this->$name) == false)
|
||||
{
|
||||
$this->$name = new $class($this->options, $this->client);
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,123 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http as BaseHttp;
|
||||
use Joomla\CMS\Http\HttpFactory;
|
||||
use Joomla\Registry\Registry;
|
||||
|
||||
class Gitea
|
||||
{
|
||||
/**
|
||||
* Options for the Gitea object.
|
||||
*
|
||||
* @var array
|
||||
* @since 1.0
|
||||
*/
|
||||
protected $options;
|
||||
|
||||
/**
|
||||
* The HTTP client object to use in sending HTTP requests.
|
||||
*
|
||||
* @var BaseHttp
|
||||
* @since 1.0
|
||||
*/
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Registry $options Gitea options object.
|
||||
* @param Http $client The HTTP client object.
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function __construct(Registry $options = null, BaseHttp $client = null)
|
||||
{
|
||||
$this->options = $options ?: new Registry;
|
||||
|
||||
// Setup the default user agent if not already set.
|
||||
if (!$this->getOption('userAgent'))
|
||||
{
|
||||
$this->setOption('userAgent', 'JGitea/1.0');
|
||||
}
|
||||
|
||||
// Setup the default API url if not already set.
|
||||
if (!$this->getOption('api.url'))
|
||||
{
|
||||
$this->setOption('api.url', 'https://git.vdm.dev/api/v1');
|
||||
}
|
||||
|
||||
$this->client = $client ?: (new HttpFactory)->getHttp($this->options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to lazily create API objects
|
||||
*
|
||||
* @param string $name Name of property to retrieve
|
||||
*
|
||||
* @return AbstractGiteaObject Gitea API object (issues, pulls, etc).
|
||||
*
|
||||
* @since 1.0
|
||||
* @throws \InvalidArgumentException If $name is not a valid sub class.
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$class = '\\VDM\\Gitea\\Package\\' . ucfirst($name);
|
||||
|
||||
if (class_exists($class))
|
||||
{
|
||||
if (isset($this->$name) == false)
|
||||
{
|
||||
$this->$name = new $class($this->options, $this->client);
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException(sprintf('Argument %s produced an invalid class name: %s', $name, $class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an option from the Gitea instance.
|
||||
*
|
||||
* @param string $key The name of the option to get.
|
||||
*
|
||||
* @return mixed The option value.
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getOption($key)
|
||||
{
|
||||
return isset($this->options[$key]) ? $this->options[$key] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set an option for the Gitea instance.
|
||||
*
|
||||
* @param string $key The name of the option to set.
|
||||
* @param mixed $value The option value to set.
|
||||
*
|
||||
* @return Gitea This object for method chaining.
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function setOption($key, $value)
|
||||
{
|
||||
$this->options[$key] = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,266 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 30th April, 2015
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea\Package;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http;
|
||||
use Joomla\Registry\Registry;
|
||||
use VDM\Gitea\AbstractPackage;
|
||||
|
||||
class Repo extends AbstractPackage
|
||||
{
|
||||
/**
|
||||
* List your repositories.
|
||||
*
|
||||
* List repositories for the authenticated user.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListOwn()
|
||||
{
|
||||
// Build the request path.
|
||||
$uri = $this->fetchUrl('/user/repos');
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse($this->client->get($uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* List user repositories.
|
||||
*
|
||||
* List public repositories for the specified user.
|
||||
*
|
||||
* @param string $user The user name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListUser($user)
|
||||
{
|
||||
// Build the request path.
|
||||
$uri = $this->fetchUrl('/users/' . $user . '/repos');
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse($this->client->get($uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* List organization repositories.
|
||||
*
|
||||
* List repositories for the specified org.
|
||||
*
|
||||
* @param string $org The name of the organization.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListOrg($org)
|
||||
{
|
||||
// Build the request path.
|
||||
$uri = $this->fetchUrl('/orgs/' . $org . '/repos');
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse($this->client->get($uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create.
|
||||
*
|
||||
* Create a new repository for the authenticated user or an organization. OAuth users must supply repo scope.
|
||||
*
|
||||
* @param string $name The repository name.
|
||||
* @param string $org The organization name (if needed).
|
||||
* @param string $description The repository description.
|
||||
* @param string $readme Readme of the repository to create.
|
||||
* @param boolean $private Set true to create a private repository, false to create a public one.
|
||||
* @param string $defaultBranch DefaultBranch of the repository (used when initializes and in template).
|
||||
* @param string $license License to use.
|
||||
* @param boolean $autoInit Whether the repository should auto init.
|
||||
* @param boolean $template Whether the repository is template.
|
||||
* @param string $gitignores Gitignores to use.
|
||||
* options: [ Joomla, JetBrains ] and much more...
|
||||
* @param string $issueLabels Label-Set to use.
|
||||
* @param string $trustModel TrustModel of the repository.
|
||||
* options: [ default, collaborator, committer, collaboratorcommitter ]
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function create($name, $org = '', $description = '', $readme = 'Default', $private = false, $defaultBranch = 'master',
|
||||
$license = 'GPL-2.0-or-later', $autoInit = true, $template = false, $trustModel = 'default', $gitignores = '', $issueLabels = ''
|
||||
)
|
||||
{
|
||||
$path = ($org)
|
||||
// Create a repository for an organization
|
||||
? '/orgs/' . $org . '/repos'
|
||||
// Create a repository for a user
|
||||
: '/user/repos';
|
||||
|
||||
$data = [
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'readme' => $readme,
|
||||
'private' => $private,
|
||||
'auto_init' => $autoInit,
|
||||
'default_branch' => $defaultBranch,
|
||||
'issue_labels' => $issueLabels,
|
||||
'license' => $license,
|
||||
'template' => $template,
|
||||
'gitignores' => $gitignores,
|
||||
'trust_model' => $trustModel
|
||||
];
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->post($this->fetchUrl($path), json_encode($data)),
|
||||
201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get.
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function get($owner, $repo)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo;
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List contributors.
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListContributors($owner, $repo)
|
||||
{
|
||||
// Build the request path.
|
||||
$uri = $this->fetchUrl('/repos/' . $owner . '/' . $repo . '/contributors');
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse($this->client->get($uri));
|
||||
}
|
||||
|
||||
/**
|
||||
* List languages.
|
||||
*
|
||||
* List languages for the specified repository. The value on the right of a language is the number of bytes of code
|
||||
* written in that language.
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListLanguages($owner, $repo)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo . '/languages';
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Teams
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListTeams($owner, $repo)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo . '/teams';
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List Tags.
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
* @param integer $page Page to request
|
||||
* @param integer $limit Number of results to return per page
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getListTags($owner, $repo, $page = 0, $limit = 0)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo . '/tags';
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path, $page, $limit))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a Repository.
|
||||
*
|
||||
* Deleting a repository requires admin access. If OAuth is used, the delete_repo scope is required.
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function delete($owner, $repo)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo;
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->delete($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea\Package\Repo;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http;
|
||||
use Joomla\Registry\Registry;
|
||||
use VDM\Gitea\AbstractPackage;
|
||||
|
||||
|
||||
/**
|
||||
* Start looking here:
|
||||
* https://git.vdm.dev/api/swagger#/repository/repoGetContents
|
||||
*/
|
||||
class File extends AbstractPackage
|
||||
{
|
||||
/**
|
||||
* Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
|
||||
*
|
||||
* @param string $owner Repository owner.
|
||||
* @param string $repo Repository name.
|
||||
* @param string $filepath Repository file path.
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function get($owner, $repo, $filepath)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo . '/contents/' . $filepath;
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,93 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Gitea\Package\Repo;
|
||||
|
||||
|
||||
use Joomla\CMS\Http\Http;
|
||||
use Joomla\Registry\Registry;
|
||||
use VDM\Gitea\AbstractPackage;
|
||||
|
||||
|
||||
/**
|
||||
* Start looking here:
|
||||
* https://git.vdm.dev/api/swagger#/repository/repoCreateWikiPage
|
||||
*/
|
||||
class Wiki extends AbstractPackage
|
||||
{
|
||||
/**
|
||||
* Get a repository wiki page
|
||||
*
|
||||
* @param string $owner The repository owner
|
||||
* @param string $repo The repository name
|
||||
* @param string $pageName The page name
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function get(string $owner, string $repo, string $pageName)
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/repos/' . $owner . '/' . $repo . '/wiki/page/' . $pageName;
|
||||
|
||||
// Send the request.
|
||||
return $this->processResponse(
|
||||
$this->client->get($this->fetchUrl($path))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a repository wiki html page
|
||||
*
|
||||
* @param string $owner The repository owner
|
||||
* @param string $repo The repository name
|
||||
* @param string $pageName The page name
|
||||
*
|
||||
* @return object
|
||||
*
|
||||
* @since 1.0
|
||||
*/
|
||||
public function getHtml(string $owner, string $repo, string $pageName)
|
||||
{
|
||||
// get the gitea wiki page
|
||||
$page = $this->get($owner, $repo, $pageName);
|
||||
|
||||
if (empty($page->content))
|
||||
{
|
||||
throw new \Exception('Wiki page could not be found.');
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = '/markdown';
|
||||
|
||||
// Get headers
|
||||
$headers = $this->client->getOption('headers', []);
|
||||
|
||||
$headers['accept'] = 'text/html';
|
||||
$headers['Content-Type'] = 'application/json';
|
||||
|
||||
// build the post body
|
||||
$data = [
|
||||
'Context' => 'string',
|
||||
'Mode' => 'string',
|
||||
'Text' => $page->content,
|
||||
'Wiki' => true
|
||||
];
|
||||
|
||||
// Post the request.
|
||||
return $this->processResponse(
|
||||
$this->client->post($this->fetchUrl($path), json_encode($data), $headers)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Abstraction;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Utilities\Http;
|
||||
use VDM\Joomla\Gitea\Utilities\Uri;
|
||||
use VDM\Joomla\Gitea\Utilities\Response;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Api
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Api
|
||||
{
|
||||
/**
|
||||
* The Http class
|
||||
*
|
||||
* @var Http
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Http $http;
|
||||
|
||||
/**
|
||||
* The Uri class
|
||||
*
|
||||
* @var Uri
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Uri $uri;
|
||||
|
||||
/**
|
||||
* The Response class
|
||||
*
|
||||
* @var Response
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected Response $response;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Http $http The http class.
|
||||
* @param Uri $uri The uri class.
|
||||
* @param Response $response The response class.
|
||||
*
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function __construct(Http $http, Uri $uri, Response $response)
|
||||
{
|
||||
$this->http = $http;
|
||||
$this->uri = $uri;
|
||||
$this->response = $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load/Reload API.
|
||||
*
|
||||
* @param string $url The url.
|
||||
* @param token $token The token.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function load_(string $url, string $token)
|
||||
{
|
||||
$this->uri->setUrl($url);
|
||||
$this->http->setToken($token);
|
||||
}
|
||||
|
||||
}
|
||||
|
72
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Cron.php
Normal file
72
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Cron.php
Normal file
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Cron
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Cron extends Api
|
||||
{
|
||||
/**
|
||||
* List cron tasks.
|
||||
*
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/cron";
|
||||
|
||||
// Set the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run cron task.
|
||||
*
|
||||
* @param string $task The cron task to run.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function run(string $task): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/cron/{$task}";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Organizations
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Organizations extends Api
|
||||
{
|
||||
/**
|
||||
* List all organizations.
|
||||
*
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/orgs";
|
||||
|
||||
// Set the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
101
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Unadopted.php
Normal file
101
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Unadopted.php
Normal file
@ -0,0 +1,101 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Unadopted
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Unadopted extends Api
|
||||
{
|
||||
/**
|
||||
* List unadopted repositories.
|
||||
*
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
* @param string $pattern Pattern of repositories to search for.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(int $page = 1, int $limit = 10, string $pattern = ''): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/unadopted";
|
||||
|
||||
// Set the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
if (!empty($pattern))
|
||||
{
|
||||
$uri->setVar('pattern', $pattern);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adopt unadopted files as a repository.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repository name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function adopt(string $owner, string $repo): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/unadopted/{$owner}/{$repo}";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), ''
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete unadopted files.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repository name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/unadopted/{$owner}/{$repo}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
207
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Users.php
Normal file
207
libraries/jcb_powers/VDM.Joomla.Gitea/src/Admin/Users.php
Normal file
@ -0,0 +1,207 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Users
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Users extends Api
|
||||
{
|
||||
/**
|
||||
* List all users.
|
||||
*
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users";
|
||||
|
||||
// build the URL
|
||||
$url = $this->uri->get($path);
|
||||
$url->setVar('page', $page);
|
||||
$url->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($url)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a user with extended options.
|
||||
*
|
||||
* @param string $loginName The user's login name.
|
||||
* @param string $email The user's email address.
|
||||
* @param string $password The user's password.
|
||||
* @param string|null $username The username.
|
||||
* @param string|null $fullName The user's full name (optional).
|
||||
* @param bool|null $mustChangePassword User must change password on next login (optional).
|
||||
* @param bool|null $restricted Restrict the user (optional).
|
||||
* @param bool|null $sendNotify Send a notification email to the user (optional).
|
||||
* @param int|null $sourceId Source ID (optional).
|
||||
* @param string|null $visibility The user's visibility (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $loginName,
|
||||
string $email,
|
||||
string $password,
|
||||
string $username,
|
||||
?string $fullName = null,
|
||||
?bool $mustChangePassword = null,
|
||||
?bool $restricted = null,
|
||||
?bool $sendNotify = null,
|
||||
?int $sourceId = null,
|
||||
?string $visibility = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users";
|
||||
|
||||
// Set the user data.
|
||||
$data = new \stdClass();
|
||||
$data->login_name = $loginName;
|
||||
$data->email = $email;
|
||||
$data->password = $password;
|
||||
$data->username = $username;
|
||||
$data->full_name = $fullName;
|
||||
$data->must_change_password = $mustChangePassword;
|
||||
$data->restricted = $restricted;
|
||||
$data->send_notify = $sendNotify;
|
||||
$data->source_id = $sourceId;
|
||||
$data->visibility = $visibility;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a user.
|
||||
*
|
||||
* @param string $username The user's display name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$username}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an existing user.
|
||||
*
|
||||
* @param string $username The user's display name.
|
||||
* @param string $loginName The user's login name.
|
||||
* @param int $sourceId The user's source ID.
|
||||
* @param bool $active Optional. Is the user active? Default: false.
|
||||
* @param bool $admin Optional. Is the user an admin? Default: false.
|
||||
* @param bool $allowCreateOrganization Optional. Can the user create an organization? Default: false.
|
||||
* @param bool $allowGitHook Optional. Can the user create Git hooks? Default: false.
|
||||
* @param bool $allowImportLocal Optional. Can the user import local repositories? Default: false.
|
||||
* @param string $description Optional. The user's description. Default: ''.
|
||||
* @param string $email Optional. The user's email address. Default: ''.
|
||||
* @param string $fullName Optional. The user's full name. Default: ''.
|
||||
* @param string $location Optional. The user's location. Default: ''.
|
||||
* @param int $maxRepoCreation Optional. Maximum repositories the user can create. Default: 0.
|
||||
* @param bool $mustChangePassword Optional. Must the user change their password? Default: false.
|
||||
* @param string $password Optional. The user's password. Default: ''.
|
||||
* @param bool $prohibitLogin Optional. Is the user's login prohibited? Default: false.
|
||||
* @param bool $restricted Optional. Is the user restricted? Default: false.
|
||||
* @param string $visibility Optional. The user's visibility setting. Default: ''.
|
||||
* @param string $website Optional. The user's website. Default: ''.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function edit(
|
||||
string $username,
|
||||
string $loginName,
|
||||
int $sourceId,
|
||||
bool $active = false,
|
||||
bool $admin = false,
|
||||
bool $allowCreateOrganization = false,
|
||||
bool $allowGitHook = false,
|
||||
bool $allowImportLocal = false,
|
||||
string $description = '',
|
||||
string $email = '',
|
||||
string $fullName = '',
|
||||
string $location = '',
|
||||
int $maxRepoCreation = 0,
|
||||
bool $mustChangePassword = false,
|
||||
string $password = '',
|
||||
bool $prohibitLogin = false,
|
||||
bool $restricted = false,
|
||||
string $visibility = '',
|
||||
string $website = ''
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$username}";
|
||||
|
||||
// Set the data.
|
||||
$data = [
|
||||
'login_name' => $loginName,
|
||||
'source_id' => $sourceId,
|
||||
'active' => $active,
|
||||
'admin' => $admin,
|
||||
'allow_create_organization' => $allowCreateOrganization,
|
||||
'allow_git_hook' => $allowGitHook,
|
||||
'allow_import_local' => $allowImportLocal,
|
||||
'description' => $description,
|
||||
'email' => $email,
|
||||
'full_name' => $fullName,
|
||||
'location' => $location,
|
||||
'max_repo_creation' => $maxRepoCreation,
|
||||
'must_change_password' => $mustChangePassword,
|
||||
'password' => $password,
|
||||
'prohibit_login' => $prohibitLogin,
|
||||
'restricted' => $restricted,
|
||||
'visibility' => $visibility,
|
||||
'website' => $website
|
||||
];
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin\Users;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Users Keys
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Keys extends Api
|
||||
{
|
||||
/**
|
||||
* Add a public key on behalf of a user.
|
||||
*
|
||||
* @param string $userName The user's display name.
|
||||
* @param string $publicKey The public key to add.
|
||||
* @param string $keyTitle Title of the key to add.
|
||||
* @param bool $readOnly Whether the key has only read access or read/write (optional).
|
||||
* @param string|null $description Description of the key (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(
|
||||
string $userName,
|
||||
string $publicKey,
|
||||
string $keyTitle,
|
||||
bool $readOnly = false,
|
||||
?string $description = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$userName}/keys";
|
||||
|
||||
// Set the key data.
|
||||
$data = new \stdClass();
|
||||
$data->key = $publicKey;
|
||||
$data->title = $keyTitle;
|
||||
$data->read_only = $readOnly;
|
||||
$data->description = $description;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a user's public key.
|
||||
*
|
||||
* @param string $username The user's display name.
|
||||
* @param int $id The public key ID.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $username, int $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$username}/keys/{$id}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin\Users;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Users Organization
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Organization extends Api
|
||||
{
|
||||
/**
|
||||
* Create an organization on behalf of a user.
|
||||
*
|
||||
* @param string $username The user's display name.
|
||||
* @param string $fullName The organization full name.
|
||||
* @param string|null $description The organization description (optional).
|
||||
* @param string|null $location The organization location (optional).
|
||||
* @param bool $repoAdminChangeTeamAccess Whether repo admin can change team access (optional).
|
||||
* @param string $visibility The organization visibility (optional).
|
||||
* @param string|null $website The organization website (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $username,
|
||||
string $fullName,
|
||||
?string $description = null,
|
||||
?string $location = null,
|
||||
bool $repoAdminChangeTeamAccess = false,
|
||||
string $visibility = 'public',
|
||||
?string $website = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$username}/orgs";
|
||||
|
||||
// Set the organization data.
|
||||
$data = new \stdClass();
|
||||
$data->full_name = $fullName;
|
||||
$data->description = $description;
|
||||
$data->location = $location;
|
||||
$data->repo_admin_change_team_access = $repoAdminChangeTeamAccess;
|
||||
$data->visibility = $visibility;
|
||||
$data->website = $website;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Admin\Users;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Admin Users Repository
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Repository extends Api
|
||||
{
|
||||
/**
|
||||
* Create a repository on behalf of a user.
|
||||
*
|
||||
* @param string $username The user's display name.
|
||||
* @param string $repoName The repository name.
|
||||
* @param string|null $description The repository description (optional).
|
||||
* @param bool $auto_init Whether the repository should be auto-initialized? (optional).
|
||||
* @param string|null $default_branch Default branch of the repository (optional).
|
||||
* @param string|null $gitignores Gitignores to use (optional).
|
||||
* @param string|null $issue_labels Label-Set to use (optional).
|
||||
* @param string|null $license License to use (optional).
|
||||
* @param bool $private Whether the repository is private (optional).
|
||||
* @param string|null $readme Readme of the repository to create (optional).
|
||||
* @param bool $template Whether the repository is template (optional).
|
||||
* @param string|null $trust_model TrustModel of the repository (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $username,
|
||||
string $repoName,
|
||||
?string $description = null,
|
||||
bool $auto_init = false,
|
||||
?string $default_branch = null,
|
||||
?string $gitignores = null,
|
||||
?string $issue_labels = null,
|
||||
?string $license = null,
|
||||
bool $private = false,
|
||||
?string $readme = null,
|
||||
bool $template = false,
|
||||
?string $trust_model = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/admin/users/{$username}/repos";
|
||||
|
||||
// Set the repository data.
|
||||
$data = new \stdClass();
|
||||
$data->name = $repoName;
|
||||
$data->description = $description;
|
||||
$data->auto_init = $auto_init;
|
||||
$data->default_branch = $default_branch;
|
||||
$data->gitignores = $gitignores;
|
||||
$data->issue_labels = $issue_labels;
|
||||
$data->license = $license;
|
||||
$data->private = $private;
|
||||
$data->readme = $readme;
|
||||
$data->template = $template;
|
||||
$data->trust_model = $trust_model;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
97
libraries/jcb_powers/VDM.Joomla.Gitea/src/Factory.php
Normal file
97
libraries/jcb_powers/VDM.Joomla.Gitea/src/Factory.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use VDM\Joomla\Gitea\Service\Utilities;
|
||||
use VDM\Joomla\Gitea\Service\Jcb;
|
||||
use VDM\Joomla\Gitea\Service\Settings;
|
||||
use VDM\Joomla\Gitea\Service\Organization;
|
||||
use VDM\Joomla\Gitea\Service\User;
|
||||
use VDM\Joomla\Gitea\Service\Repository;
|
||||
use VDM\Joomla\Gitea\Service\Package;
|
||||
use VDM\Joomla\Gitea\Service\Issue;
|
||||
use VDM\Joomla\Gitea\Service\Notifications;
|
||||
use VDM\Joomla\Gitea\Service\Miscellaneous;
|
||||
use VDM\Joomla\Gitea\Service\Admin;
|
||||
use VDM\Joomla\Componentbuilder\Interfaces\FactoryInterface;
|
||||
|
||||
|
||||
/**
|
||||
* Gitea Factory
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
protected static function createContainer(): Container
|
||||
{
|
||||
return (new Container())
|
||||
->registerServiceProvider(new Utilities())
|
||||
->registerServiceProvider(new Jcb())
|
||||
->registerServiceProvider(new Settings())
|
||||
->registerServiceProvider(new Organization())
|
||||
->registerServiceProvider(new User())
|
||||
->registerServiceProvider(new Repository())
|
||||
->registerServiceProvider(new Package())
|
||||
->registerServiceProvider(new Issue())
|
||||
->registerServiceProvider(new Notifications())
|
||||
->registerServiceProvider(new Miscellaneous())
|
||||
->registerServiceProvider(new Admin());
|
||||
}
|
||||
|
||||
}
|
||||
|
406
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue.php
Normal file
406
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue.php
Normal file
@ -0,0 +1,406 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Issue extends Api
|
||||
{
|
||||
/**
|
||||
* List a repository's issues.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $state The state of the issues to get, defaults to 'open'.
|
||||
* @param int $page The page to get, defaults to null.
|
||||
* @param int $limit The number of issues per page, defaults to null.
|
||||
* @param string|null $labels Comma-separated list of labels, defaults to null.
|
||||
* @param string|null $q The search string, defaults to null.
|
||||
* @param string|null $type The type to filter by (issues/pulls), defaults to null.
|
||||
* @param string|null $milestones Comma-separated list of milestone names or IDs, defaults to null.
|
||||
* @param string|null $since Only show items updated after the given time, defaults to null.
|
||||
* @param string|null $before Only show items updated before the given time, defaults to null.
|
||||
* @param string|null $createdBy Only show items created by the given user, defaults to null.
|
||||
* @param string|null $assignedBy Only show items assigned to the given user, defaults to null.
|
||||
* @param string|null $mentionedBy Only show items where the given user is mentioned, defaults to null.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $owner,
|
||||
string $repo,
|
||||
string $state = 'open',
|
||||
int $page = 1,
|
||||
int $limit = 10,
|
||||
?string $labels = null,
|
||||
?string $q = null,
|
||||
?string $type = null,
|
||||
?string $milestones = null,
|
||||
?string $since = null,
|
||||
?string $before = null,
|
||||
?string $createdBy = null,
|
||||
?string $assignedBy = null,
|
||||
?string $mentionedBy = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Set the query parameters
|
||||
$uri->setVar('state', $state);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
$uri->setVar('labels', $labels);
|
||||
$uri->setVar('q', $q);
|
||||
$uri->setVar('type', $type);
|
||||
$uri->setVar('milestones', $milestones);
|
||||
$uri->setVar('since', $since);
|
||||
$uri->setVar('before', $before);
|
||||
$uri->setVar('created_by', $createdBy);
|
||||
$uri->setVar('assigned_by', $assignedBy);
|
||||
$uri->setVar('mentioned_by', $mentionedBy);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $owner, string $repo, int $index): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an issue. If using deadline only the date will be taken into account, and time of day ignored.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $issueTitle The issue title.
|
||||
* @param array|null $assignees The array of assignees, defaults to null.
|
||||
* @param string|null $issueBody The issue body, defaults to null.
|
||||
* @param bool|null $closed If the issue is closed, defaults to null.
|
||||
* @param string|null $dueDate The deadline for the issue, format: "YYYY-MM-DD", defaults to null.
|
||||
* @param array|null $labelIds The array of label IDs to attach to the issue, defaults to null.
|
||||
* @param int|null $milestoneId The milestone ID, defaults to null.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $owner,
|
||||
string $repo,
|
||||
string $issueTitle,
|
||||
?array $assignees = null,
|
||||
?string $issueBody = null,
|
||||
?bool $closed = null,
|
||||
?string $dueDate = null,
|
||||
?array $labelIds = null,
|
||||
?int $milestoneId = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->title = $issueTitle;
|
||||
$data->body = $issueBody;
|
||||
$data->assignees = $assignees;
|
||||
$data->closed = $closed;
|
||||
$data->due_date = $dueDate;
|
||||
$data->labels = $labelIds;
|
||||
$data->milestone = $milestoneId;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for issues across the repositories that the user has access to.
|
||||
*
|
||||
* @param string $q Search query.
|
||||
* @param int $page Page number (default 1).
|
||||
* @param int $limit Page size (default 10, max 50).
|
||||
* @param string|null $state Issue state (default open).
|
||||
* @param string|null $labels Label filter, comma-separated.
|
||||
* @param string|null $milestones Milestone filter, comma-separated.
|
||||
* @param int|null $priorityRepoId Repository to prioritize in the results.
|
||||
* @param string|null $type Filter by type (issues/pulls).
|
||||
* @param string|null $since Only show notifications updated after the given time (RFC 3339 format).
|
||||
* @param string|null $before Only show notifications updated before the given time (RFC 3339 format).
|
||||
* @param bool|null $assigned Filter assigned to you (default false).
|
||||
* @param bool|null $created Filter created by you (default false).
|
||||
* @param bool|null $mentioned Filter mentioning you (default false).
|
||||
* @param bool|null $reviewRequested Filter pulls requesting your review (default false).
|
||||
* @param string|null $owner Filter by owner.
|
||||
* @param string|null $team Filter by team (requires organization owner parameter).
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function search(
|
||||
string $q,
|
||||
int $page = 1,
|
||||
int $limit = 10,
|
||||
?string $state = 'open',
|
||||
?string $labels = null,
|
||||
?string $milestones = null,
|
||||
?int $priorityRepoId = null,
|
||||
?string $type = null,
|
||||
?string $since = null,
|
||||
?string $before = null,
|
||||
?bool $assigned = null,
|
||||
?bool $created = null,
|
||||
?bool $mentioned = null,
|
||||
?bool $reviewRequested = null,
|
||||
?string $owner = null,
|
||||
?string $team = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/issues/search";
|
||||
|
||||
// Set the URL parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('q', $q);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
$uri->setVar('state', $state);
|
||||
|
||||
if ($labels !== null)
|
||||
{
|
||||
$uri->setVar('labels', $labels);
|
||||
}
|
||||
|
||||
if ($milestones !== null)
|
||||
{
|
||||
$uri->setVar('milestones', $milestones);
|
||||
}
|
||||
|
||||
if ($priorityRepoId !== null)
|
||||
{
|
||||
$uri->setVar('priority_repo_id', $priorityRepoId);
|
||||
}
|
||||
|
||||
if ($type !== null)
|
||||
{
|
||||
$uri->setVar('type', $type);
|
||||
}
|
||||
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
|
||||
if ($assigned !== null)
|
||||
{
|
||||
$uri->setVar('assigned', $assigned);
|
||||
}
|
||||
|
||||
if ($created !== null)
|
||||
{
|
||||
$uri->setVar('created', $created);
|
||||
}
|
||||
|
||||
if ($mentioned !== null)
|
||||
{
|
||||
$uri->setVar('mentioned', $mentioned);
|
||||
}
|
||||
|
||||
if ($reviewRequested !== null)
|
||||
{
|
||||
$uri->setVar('review_requested', $reviewRequested);
|
||||
}
|
||||
|
||||
if ($owner !== null)
|
||||
{
|
||||
$uri->setVar('owner', $owner);
|
||||
}
|
||||
|
||||
if ($team !== null)
|
||||
{
|
||||
$uri->setVar('team', $team);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string|null $assignee The assignee, defaults to null.
|
||||
* @param array|null $assignees The assignees, defaults to null.
|
||||
* @param string|null $body The issue body, defaults to null.
|
||||
* @param string|null $dueDate The due date, defaults to null.
|
||||
* @param int|null $milestone The milestone, defaults to null.
|
||||
* @param string|null $ref The reference, defaults to null.
|
||||
* @param string|null $state The issue state, defaults to null.
|
||||
* @param string|null $title The issue title, defaults to null.
|
||||
* @param bool|null $unsetDueDate The flag to unset due date, defaults to null.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function edit(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
?string $assignee = null,
|
||||
?array $assignees = null,
|
||||
?string $body = null,
|
||||
?string $dueDate = null,
|
||||
?int $milestone = null,
|
||||
?string $ref = null,
|
||||
?string $state = null,
|
||||
?string $title = null,
|
||||
?bool $unsetDueDate = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}";
|
||||
|
||||
// Prepare the issue data.
|
||||
$editIssueData = new \stdClass();
|
||||
|
||||
if ($assignee !== null || $assignees !== null)
|
||||
{
|
||||
$editIssueData->assignee = new \stdClass();
|
||||
|
||||
if ($assignee !== null)
|
||||
{
|
||||
$editIssueData->assignee->name = $assignee;
|
||||
}
|
||||
|
||||
if ($assignees !== null)
|
||||
{
|
||||
$editIssueData->assignee->names = $assignees;
|
||||
}
|
||||
}
|
||||
|
||||
if ($body !== null)
|
||||
{
|
||||
$editIssueData->body = $body;
|
||||
}
|
||||
|
||||
if ($dueDate !== null || $unsetDueDate !== null)
|
||||
{
|
||||
$editIssueData->dueDate = new \stdClass();
|
||||
|
||||
if ($dueDate !== null)
|
||||
{
|
||||
$editIssueData->dueDate->date = $dueDate;
|
||||
}
|
||||
|
||||
if ($unsetDueDate !== null)
|
||||
{
|
||||
$editIssueData->dueDate->unset = $unsetDueDate;
|
||||
}
|
||||
}
|
||||
|
||||
if ($milestone !== null)
|
||||
{
|
||||
$editIssueData->milestone = $milestone;
|
||||
}
|
||||
|
||||
if ($ref !== null)
|
||||
{
|
||||
$editIssueData->ref = $ref;
|
||||
}
|
||||
|
||||
if ($state !== null)
|
||||
{
|
||||
$editIssueData->state = $state;
|
||||
}
|
||||
|
||||
if ($title !== null)
|
||||
{
|
||||
$editIssueData->title = $title;
|
||||
}
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path), json_encode($editIssueData)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
176
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Comments.php
Normal file
176
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Comments.php
Normal file
@ -0,0 +1,176 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Comments
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Comments extends Api
|
||||
{
|
||||
/**
|
||||
* List all comments on an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int $page The page number to get, defaults to 1.
|
||||
* @param int $limit The number of comments per page, defaults to 10.
|
||||
* @param string|null $since The date-time since when to get comments, defaults to null.
|
||||
* @param string|null $before The date-time before when to get comments, defaults to null.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
int $page = 1,
|
||||
int $limit = 10,
|
||||
?string $since = null,
|
||||
?string $before = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/comments";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Set the 'since' and 'before' parameters if not null.
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a comment.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $owner, string $repo, int $commentId): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a comment.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, int $commentId): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a comment.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
* @param string $commentBody The new comment body.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function edit(string $owner, string $repo, int $commentId, string $commentBody): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->body = $commentBody;
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a comment to an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $issueIndex The issue index.
|
||||
* @param string $commentBody The comment body.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(string $owner, string $repo, int $issueIndex, string $commentBody): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$issueIndex}/comments";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->body = $commentBody;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
54
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Deadline.php
Normal file
54
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Deadline.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Deadline
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Deadline extends Api
|
||||
{
|
||||
/**
|
||||
* Set an issue deadline.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string|null $dueDate The deadline date string in the format YYYY-MM-DD or null to delete the deadline.
|
||||
*
|
||||
* @return object
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function set(string $owner, string $repo, int $index, ?string $dueDate): object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/deadline";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->due_date = $dueDate;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
181
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Labels.php
Normal file
181
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Labels.php
Normal file
@ -0,0 +1,181 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Labels
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Labels extends Api
|
||||
{
|
||||
/**
|
||||
* Get all of a repository's labels.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $page The page number of results to return (1-based).
|
||||
* @param int $limit The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(string $owner, string $repo, int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/labels";
|
||||
|
||||
// Get the URI object with the request path.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the page and limit query parameters if provided.
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an issue's labels.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $owner, string $repo, int $index): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/labels";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace an issue's labels.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param array $labels An array of labels to replace the current issue labels.
|
||||
*
|
||||
* @return object
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function replace(string $owner, string $repo, int $index, array $labels): object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/labels";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->labels = $labels;
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a label to an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param array $labels An array of label IDs to add.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(string $owner, string $repo, int $index, array $labels): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/labels";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->labels = $labels;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a label from an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int $labelId The ID of the label to remove.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function remove(string $owner, string $repo, int $index, int $labelId): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/labels/{$labelId}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all labels from an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function clear(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/labels";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
230
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Milestones.php
Normal file
230
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Milestones.php
Normal file
@ -0,0 +1,230 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Milestones
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Milestones extends Api
|
||||
{
|
||||
/**
|
||||
* Create a milestone.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $title The title of the milestone.
|
||||
* @param string|null $description Optional. The description of the milestone.
|
||||
* @param string|null $dueOn Optional. The due date of the milestone.
|
||||
* @param string|null $state Optional. The state of the milestone. Default is 'open'.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $owner,
|
||||
string $repo,
|
||||
string $title,
|
||||
?string $description = null,
|
||||
?string $dueOn = null,
|
||||
?string $state = 'open'
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
// Set all the required data.
|
||||
$data->title = $title;
|
||||
|
||||
// Set all the optional data that has been provided.
|
||||
if ($description !== null)
|
||||
{
|
||||
$data->description = $description;
|
||||
}
|
||||
if ($dueOn !== null)
|
||||
{
|
||||
$data->due_on = $dueOn;
|
||||
}
|
||||
if ($state !== null)
|
||||
{
|
||||
$data->state = $state;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/milestones";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all of a repository's opened milestones.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string|null $state Optional. Milestone state. Recognized values are open, closed, and all. Defaults to "open".
|
||||
* @param string|null $name Optional. Filter by milestone name.
|
||||
* @param int|null $page Optional. Page number of results to return (1-based).
|
||||
* @param int|null $limit Optional. Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $owner,
|
||||
string $repo,
|
||||
?string $state = 'open',
|
||||
?string $name = null,
|
||||
?int $page = null,
|
||||
?int $limit = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/milestones";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('state', $state);
|
||||
if ($name !== null)
|
||||
{
|
||||
$uri->setVar('name', $name);
|
||||
}
|
||||
if ($page !== null)
|
||||
{
|
||||
$uri->setVar('page', $page);
|
||||
}
|
||||
if ($limit !== null)
|
||||
{
|
||||
$uri->setVar('limit', $limit);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a milestone.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $milestoneId The ID of the milestone.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $owner, string $repo, string $milestoneId): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/milestones/{$milestoneId}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a milestone.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $milestoneId The ID of the milestone to delete.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, string $milestoneId): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/milestones/{$milestoneId}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a milestone.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $milestoneId The ID of the milestone to update.
|
||||
* @param string $title Optional. The new title of the milestone.
|
||||
* @param string $description Optional. The new description of the milestone.
|
||||
* @param string $dueOn Optional. The new due date of the milestone.
|
||||
* @param string $state Optional. The new state of the milestone.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
string $owner,
|
||||
string $repo,
|
||||
string $milestoneId,
|
||||
string $title = null,
|
||||
string $description = null,
|
||||
string $dueOn = null,
|
||||
string $state = null
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
// Set all the optional data that has been provided.
|
||||
if ($title !== null)
|
||||
{
|
||||
$data->title = $title;
|
||||
}
|
||||
if ($description !== null)
|
||||
{
|
||||
$data->description = $description;
|
||||
}
|
||||
if ($dueOn !== null)
|
||||
{
|
||||
$data->due_on = $dueOn;
|
||||
}
|
||||
if ($state !== null)
|
||||
{
|
||||
$data->state = $state;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/milestones/{$milestoneId}";
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
110
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Reactions.php
Normal file
110
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Reactions.php
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Reactions
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Reactions extends Api
|
||||
{
|
||||
/**
|
||||
* Get a list reactions of an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int $page The page to get, defaults to 1.
|
||||
* @param int $limit The number of reactions per page, defaults to 10.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(string $owner, string $repo, int $index, int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/reactions";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Set the URI variables.
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a reaction to an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string $content The name of the reaction to add.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(string $owner, string $repo, int $index, string $content): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/reactions";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->content = $content;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a reaction from an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string $content The name of the reaction to remove.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function remove(string $owner, string $repo, int $index, string $content): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/reactions";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('content', $content);
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete($uri), 200, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue\Reactions;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Reactions Comment
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Comment extends Api
|
||||
{
|
||||
/**
|
||||
* Get a list of reactions from a comment of an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(string $owner, string $repo, int $commentId): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}/reactions";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a reaction to a comment of an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
* @param string $content The reaction to add, e.g. "+1".
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(string $owner, string $repo, int $commentId, string $content): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}/reactions";
|
||||
|
||||
// Build the request data.
|
||||
$data = new \stdClass();
|
||||
$data->content = $content;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a reaction from a comment of an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $commentId The comment ID.
|
||||
* @param string $content The reaction to remove, e.g. "+1".
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function remove(string $owner, string $repo, int $commentId, string $content): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments/{$commentId}/reactions";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('content', $content);
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete($uri), 200, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue\Repository;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Repository Comments
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Comments extends Api
|
||||
{
|
||||
/**
|
||||
* List all comments in a repository.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $page The page to get, defaults to 1.
|
||||
* @param int $limit The number of comments per page, defaults to 10.
|
||||
* @param string|null $since The date-time string to filter updated comments since, defaults to null.
|
||||
* @param string|null $before The date-time string to filter updated comments before, defaults to null.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(string $owner, string $repo, int $page = 1, int $limit = 10, ?string $since = null, ?string $before = null): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/comments";
|
||||
|
||||
// Build the URI.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Set the URI variables.
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Stopwatch
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Stopwatch extends Api
|
||||
{
|
||||
/**
|
||||
* Start stopwatch on an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function start(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/stopwatch/start";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), ''
|
||||
), 201, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop an issue's existing stopwatch.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function stop(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/stopwatch/stop";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), ''
|
||||
), 201, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an issue's existing stopwatch.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/stopwatch/delete";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Subscriptions
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Subscriptions extends Api
|
||||
{
|
||||
/**
|
||||
* Get users who subscribed on an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int|null $page Optional. Page number of results to return (1-based).
|
||||
* @param int|null $limit Optional. Page size of results.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
?int $page = null,
|
||||
?int $limit = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/subscriptions";
|
||||
|
||||
// Set the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($page !== null)
|
||||
{
|
||||
$uri->setVar('page', $page);
|
||||
}
|
||||
if ($limit !== null)
|
||||
{
|
||||
$uri->setVar('limit', $limit);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user is subscribed to an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function check(string $owner, string $repo, int $index): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/subscriptions/check";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe user to issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string $user The username to subscribe.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function subscribe(string $owner, string $repo, int $index, string $user): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/subscriptions/{$user}";
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get_(
|
||||
$this->http->put(
|
||||
$this->uri->get($path), ''
|
||||
), [200 => 'already subscribed', 201 => 'success']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsubscribe user from issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string $user The username to unsubscribe.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function unsubscribe(string $owner, string $repo, int $index, string $user): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/subscriptions/{$user}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get_(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), [200 => 'already unsubscribed', 201 => 'success']
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
78
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Timeline.php
Normal file
78
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Timeline.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Timeline
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Timeline extends Api
|
||||
{
|
||||
/**
|
||||
* List all comments and events on an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string|null $since Optional. If provided, only comments updated since the specified time are returned.
|
||||
* @param int|null $page Optional. Page number of results to return (1-based).
|
||||
* @param int|null $limit Optional. Page size of results.
|
||||
* @param string|null $before Optional. If provided, only comments updated before the provided time are returned.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
?string $since = null,
|
||||
?int $page = null,
|
||||
?int $limit = null,
|
||||
?string $before = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/timeline";
|
||||
|
||||
// Set the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
if ($page !== null)
|
||||
{
|
||||
$uri->setVar('page', $page);
|
||||
}
|
||||
if ($limit !== null)
|
||||
{
|
||||
$uri->setVar('limit', $limit);
|
||||
}
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
179
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Times.php
Normal file
179
libraries/jcb_powers/VDM.Joomla.Gitea/src/Issue/Times.php
Normal file
@ -0,0 +1,179 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Issue;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Issue Times
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Times extends Api
|
||||
{
|
||||
/**
|
||||
* List an issue's tracked times.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param string $user Optional. Filter by user.
|
||||
* @param string $since Optional. Show times updated after the given time.
|
||||
* @param string $before Optional. Show times updated before the given time.
|
||||
* @param int $page Optional. Page number of results to return (1-based).
|
||||
* @param int $limit Optional. Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
string $user = null,
|
||||
string $since = null,
|
||||
string $before = null,
|
||||
int $page = null,
|
||||
int $limit = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/times";
|
||||
|
||||
// Prepare the query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($user !== null)
|
||||
{
|
||||
$uri->setVar('user', $user);
|
||||
}
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
if ($page !== null)
|
||||
{
|
||||
$uri->setVar('page', $page);
|
||||
}
|
||||
if ($limit !== null)
|
||||
{
|
||||
$uri->setVar('limit', $limit);
|
||||
}
|
||||
|
||||
// Send the get request with the query parameters.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add tracked time to an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int $time The tracked time in seconds.
|
||||
* @param string $created Optional. The date and time of the tracked time in RFC 3339 format.
|
||||
* @param string $userName Optional. User who spent the time.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(
|
||||
string $owner,
|
||||
string $repo,
|
||||
int $index,
|
||||
int $time,
|
||||
string $created = null,
|
||||
string $userName = null
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
// Set all the needed data.
|
||||
$data->time = $time;
|
||||
if ($created !== null)
|
||||
{
|
||||
$data->created = $created;
|
||||
}
|
||||
if ($userName !== null)
|
||||
{
|
||||
$data->user_name = $userName;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/times";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset a tracked time of an issue.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function reset(string $owner, string $repo, int $index): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/times";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete specific tracked time.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param int $index The issue index.
|
||||
* @param int $id The ID of the tracked time to delete.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, int $index, int $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/issues/{$index}/times/{$id}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
162
libraries/jcb_powers/VDM.Joomla.Gitea/src/Labels.php
Normal file
162
libraries/jcb_powers/VDM.Joomla.Gitea/src/Labels.php
Normal file
@ -0,0 +1,162 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Labels
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Labels extends Api
|
||||
{
|
||||
/**
|
||||
* Create a label.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $labelName The name of the label.
|
||||
* @param string $labelColor The color of the label, in hexadecimal format with the leading '#'.
|
||||
* @param string $labelDescription Optional. The description of the label.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(string $owner, string $repo, string $labelName, string $labelColor, string $labelDescription = ''): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
// Set all the needed data.
|
||||
$data->name = $labelName;
|
||||
$data->color = $labelColor;
|
||||
if (!empty($labelDescription))
|
||||
{
|
||||
$data->description = $labelDescription;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/labels";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single label.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $id The ID of the label to retrieve.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $owner, string $repo, string $id): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/labels/{$id}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a label.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $id The ID of the label to delete.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $owner, string $repo, string $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/labels/{$id}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a label.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repo name.
|
||||
* @param string $id The ID of the label to update.
|
||||
* @param string $labelName Optional. The new name of the label.
|
||||
* @param string $labelColor Optional. The new color of the label, in hexadecimal format without the leading '#'.
|
||||
* @param string $labelDescription Optional. The new description of the label.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
string $owner,
|
||||
string $repo,
|
||||
string $id,
|
||||
string $labelName = '',
|
||||
string $labelColor = '',
|
||||
string $labelDescription = ''
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
// Set all the optional data that has been provided.
|
||||
if (!empty($labelName))
|
||||
{
|
||||
$data->name = $labelName;
|
||||
}
|
||||
|
||||
if (!empty($labelColor))
|
||||
{
|
||||
$data->color = $labelColor;
|
||||
}
|
||||
|
||||
if (!empty($labelDescription))
|
||||
{
|
||||
$data->description = $labelDescription;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/labels/{$id}";
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Miscellaneous;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Miscellaneous Activitypub
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Activitypub extends Api
|
||||
{
|
||||
/**
|
||||
* Returns the Person actor for a user.
|
||||
*
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $username): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/activitypub/user/{$username}";
|
||||
|
||||
// Send the GET request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send to the user's inbox.
|
||||
*
|
||||
* @param string $username The user's username.
|
||||
* @param object $postData The post data.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function send(string $username, object $postData): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/activitypub/user/{$username}/inbox";
|
||||
|
||||
// Send the POST request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($postData)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Miscellaneous;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Miscellaneous Gpg
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Gpg extends Api
|
||||
{
|
||||
/**
|
||||
* Get default signing-key.gpg.
|
||||
*
|
||||
* @return string|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(): ?string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/signing-key.gpg";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Miscellaneous;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Miscellaneous Markdown
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Markdown extends Api
|
||||
{
|
||||
/**
|
||||
* Render a markdown document as HTML.
|
||||
*
|
||||
* @param string $markdownText The markdown text to render.
|
||||
* @param bool $isWikiPage Is it a wiki page?
|
||||
* @param string $context Context to render.
|
||||
* @param string $mode Mode to render.
|
||||
*
|
||||
* @return string|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function render(
|
||||
string $markdownText,
|
||||
bool $isWikiPage = false,
|
||||
string $context = 'string',
|
||||
string $mode = 'string'
|
||||
): ?string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/markdown";
|
||||
|
||||
// Set the markdown data.
|
||||
$data = new \stdClass();
|
||||
$data->Text = $markdownText;
|
||||
$data->Wiki = $isWikiPage;
|
||||
$data->Context = $context;
|
||||
$data->Mode = $mode;
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data),
|
||||
['accept' => 'text/html']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render raw markdown as HTML.
|
||||
*
|
||||
* @param string $rawMarkdown The raw markdown text to render.
|
||||
*
|
||||
* @return string|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function raw(string $rawMarkdown): ?string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/markdown/raw";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
$rawMarkdown,
|
||||
['Content-Type' => 'text/plain', 'accept' => 'text/html']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Miscellaneous;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Miscellaneous NodeInfo
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class NodeInfo extends Api
|
||||
{
|
||||
/**
|
||||
* Returns the nodeinfo of the Gitea application.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/nodeinfo";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Miscellaneous;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Miscellaneous Version
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Version extends Api
|
||||
{
|
||||
/**
|
||||
* Returns the version of the Gitea application.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/version";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
149
libraries/jcb_powers/VDM.Joomla.Gitea/src/Notifications.php
Normal file
149
libraries/jcb_powers/VDM.Joomla.Gitea/src/Notifications.php
Normal file
@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Notifications
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Notifications extends Api
|
||||
{
|
||||
/**
|
||||
* List user's notification threads.
|
||||
*
|
||||
* @param bool|null $all Show notifications marked as read (optional).
|
||||
* @param array|null $statusTypes Show notifications with the provided status types (optional).
|
||||
* @param array|null $subjectType Filter notifications by subject type (optional).
|
||||
* @param string|null $since Show notifications updated after the given time (optional).
|
||||
* @param string|null $before Show notifications updated before the given time (optional).
|
||||
* @param int $page Page number of results to return (optional).
|
||||
* @param int $limit Page size of results (optional).
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
?bool $all = null,
|
||||
?array $statusTypes = null,
|
||||
?array $subjectType = null,
|
||||
?string $since = null,
|
||||
?string $before = null,
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/notifications";
|
||||
|
||||
// Configure the URI with query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($all !== null)
|
||||
{
|
||||
$uri->setVar('all', $all);
|
||||
}
|
||||
if ($statusTypes !== null)
|
||||
{
|
||||
$uri->setVar('status-types', implode(',', $statusTypes));
|
||||
}
|
||||
if ($subjectType !== null)
|
||||
{
|
||||
$uri->setVar('subject-type', implode(',', $subjectType));
|
||||
}
|
||||
if ($since !== null)
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
if ($before !== null)
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark notification threads as read, pinned, or unread.
|
||||
*
|
||||
* @param string|null $lastReadAt Describes the last point that notifications were checked (optional).
|
||||
* @param bool|null $all If true, mark all notifications on this repo (optional).
|
||||
* @param array|null $statusTypes Mark notifications with the provided status types (optional).
|
||||
* @param string|null $toStatus Status to mark notifications as (optional).
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
?string $lastReadAt = null,
|
||||
?bool $all = null,
|
||||
?array $statusTypes = null,
|
||||
?string $toStatus = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/notifications";
|
||||
|
||||
// Configure the URI with query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($lastReadAt !== null)
|
||||
{
|
||||
$uri->setVar('last_read_at', $lastReadAt);
|
||||
}
|
||||
if ($all !== null)
|
||||
{
|
||||
$uri->setVar('all', $all);
|
||||
}
|
||||
if ($statusTypes !== null)
|
||||
{
|
||||
$uri->setVar('status-types', implode(',', $statusTypes));
|
||||
}
|
||||
if ($toStatus !== null)
|
||||
{
|
||||
$uri->setVar('to-status', $toStatus);
|
||||
}
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put($uri, ''), 205
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if unread notifications exist.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function check(): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/notifications/new";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Notifications;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Notifications Repository
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Repository extends Api
|
||||
{
|
||||
/**
|
||||
* List user's notification threads on a specific repo.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repository name.
|
||||
* @param bool $all Show notifications marked as read.
|
||||
* @param array $statusTypes Show notifications with the provided status types.
|
||||
* @param array $subjectTypes Filter notifications by subject type.
|
||||
* @param string $since Show notifications updated after the given time.
|
||||
* @param string $before Show notifications updated before the given time.
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(
|
||||
string $owner,
|
||||
string $repo,
|
||||
bool $all = false,
|
||||
array $statusTypes = [],
|
||||
array $subjectTypes = [],
|
||||
string $since = '',
|
||||
string $before = '',
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/notifications";
|
||||
|
||||
// Configure the URI with query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
if ($all)
|
||||
{
|
||||
$uri->setVar('all', $all);
|
||||
}
|
||||
|
||||
if (!empty($statusTypes))
|
||||
{
|
||||
$uri->setVar('status-types', implode(',', $statusTypes));
|
||||
}
|
||||
|
||||
if (!empty($subjectTypes))
|
||||
{
|
||||
$uri->setVar('subject-type', implode(',', $subjectTypes));
|
||||
}
|
||||
|
||||
if (!empty($since))
|
||||
{
|
||||
$uri->setVar('since', $since);
|
||||
}
|
||||
|
||||
if (!empty($before))
|
||||
{
|
||||
$uri->setVar('before', $before);
|
||||
}
|
||||
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark notification threads as read, pinned, or unread on a specific repo.
|
||||
*
|
||||
* @param string $owner The owner name.
|
||||
* @param string $repo The repository name.
|
||||
* @param bool|null $all Mark all notifications on this repo (optional).
|
||||
* @param array|null $statusTypes Mark notifications with the provided status types (optional).
|
||||
* @param string|null $toStatus Status to mark notifications as (optional).
|
||||
* @param string|null $lastReadAt Last point that notifications were checked (optional).
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
string $owner,
|
||||
string $repo,
|
||||
?bool $all = null,
|
||||
?array $statusTypes = null,
|
||||
?string $toStatus = null,
|
||||
?string $lastReadAt = null
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/repos/{$owner}/{$repo}/notifications";
|
||||
|
||||
// Configure the URI with query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($all !== null)
|
||||
{
|
||||
$uri->setVar('all', $all);
|
||||
}
|
||||
if ($statusTypes !== null)
|
||||
{
|
||||
$uri->setVar('status-types', implode(',', $statusTypes));
|
||||
}
|
||||
if ($toStatus !== null)
|
||||
{
|
||||
$uri->setVar('to-status', $toStatus);
|
||||
}
|
||||
if ($lastReadAt !== null)
|
||||
{
|
||||
$uri->setVar('last_read_at', $lastReadAt);
|
||||
}
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put($uri, ''), 205
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Notifications;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Notifications Thread
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Thread extends Api
|
||||
{
|
||||
/**
|
||||
* Get notification thread by ID.
|
||||
*
|
||||
* @param int $id The notification thread ID.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(int $id): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/notifications/threads/{$id}";
|
||||
|
||||
// Get the URI with the path.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark notification threads as read, pinned, or unread by ID.
|
||||
*
|
||||
* @param int $id The notification thread ID.
|
||||
* @param string|null $lastReadAt Last point that notifications were checked (optional).
|
||||
* @param bool|null $all Mark all notifications on this repo (optional).
|
||||
* @param array|null $statusTypes Mark notifications with the provided status types (optional).
|
||||
* @param string|null $toStatus Status to mark notifications as (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function mark(
|
||||
int $id,
|
||||
?string $lastReadAt = null,
|
||||
?bool $all = null,
|
||||
?array $statusTypes = null,
|
||||
?string $toStatus = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/notifications/threads/{$id}";
|
||||
|
||||
// Configure the URI with query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
if ($lastReadAt !== null)
|
||||
{
|
||||
$uri->setVar('last_read_at', $lastReadAt);
|
||||
}
|
||||
if ($all !== null)
|
||||
{
|
||||
$uri->setVar('all', $all);
|
||||
}
|
||||
if ($statusTypes !== null)
|
||||
{
|
||||
$uri->setVar('status-types', implode(',', $statusTypes));
|
||||
}
|
||||
if ($toStatus !== null)
|
||||
{
|
||||
$uri->setVar('to-status', $toStatus);
|
||||
}
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put($uri, ''), 205
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
209
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization.php
Normal file
209
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization.php
Normal file
@ -0,0 +1,209 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Organization extends Api
|
||||
{
|
||||
/**
|
||||
* Create an organization.
|
||||
*
|
||||
* @param string $login Required. The organization's username.
|
||||
* @param string $fullName Required. The full name of the organization.
|
||||
* @param string $email Required. The email of the organization.
|
||||
* @param string $description Optional. The description of the organization.
|
||||
* @param bool $repoAdmin Optional. Whether the user has repository admin access.
|
||||
* @param bool $teamAdmin Optional. Whether the user has team admin access.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $login,
|
||||
string $fullName,
|
||||
string $email,
|
||||
string $description = '',
|
||||
bool $repoAdmin = false,
|
||||
bool $teamAdmin = false
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
$data->username = $login;
|
||||
$data->full_name = $fullName;
|
||||
$data->email = $email;
|
||||
$data->description = $description;
|
||||
$data->repo_admin_change_team_access = $repoAdmin;
|
||||
$data->team_admin_change_team_access = $teamAdmin;
|
||||
|
||||
// Build the request path.
|
||||
$path = '/orgs';
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $org): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of organizations.
|
||||
*
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = '/orgs';
|
||||
|
||||
// Get the URI and set query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $org): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $fullName Optional. The full name of the organization.
|
||||
* @param string $location Optional. The location of the organization.
|
||||
* @param string $description Optional. The description of the organization.
|
||||
* @param bool $repoAdmin Optional. Whether the user has repository admin access.
|
||||
* @param string $visibility Optional. The visibility of the organization (public, limited, or private).
|
||||
* @param string $website Optional. The website of the organization.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function edit(
|
||||
string $org,
|
||||
?string $fullName = null,
|
||||
?string $email = null,
|
||||
?string $location = null,
|
||||
?string $description = null,
|
||||
?bool $repoAdmin = null,
|
||||
?string $visibility = null,
|
||||
?string $website = null
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
if ($fullName !== null)
|
||||
{
|
||||
$data->full_name = $fullName;
|
||||
}
|
||||
|
||||
if ($location !== null)
|
||||
{
|
||||
$data->location = $location;
|
||||
}
|
||||
|
||||
if ($description !== null)
|
||||
{
|
||||
$data->description = $description;
|
||||
}
|
||||
|
||||
if ($repoAdmin !== null)
|
||||
{
|
||||
$data->repo_admin_change_team_access = $repoAdmin;
|
||||
}
|
||||
|
||||
if ($visibility !== null)
|
||||
{
|
||||
$data->visibility = $visibility;
|
||||
}
|
||||
|
||||
if ($website !== null)
|
||||
{
|
||||
$data->website = $website;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}";
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
200
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/Hooks.php
Normal file
200
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/Hooks.php
Normal file
@ -0,0 +1,200 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Repository Organization Hooks
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Hooks extends Api
|
||||
{
|
||||
/**
|
||||
* List an organization's webhooks.
|
||||
*
|
||||
* @param string $orgName The organization name.
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $orgName,
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$orgName}/hooks";
|
||||
|
||||
// Get the URI and set query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a hook for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $type The type of hook (e.g. "gitea", "slack", "discord", etc.).
|
||||
* @param string $url The URL of the hook.
|
||||
* @param string $secret Optional. The secret for the hook.
|
||||
* @param bool $events Optional. The events that trigger the hook.
|
||||
* @param bool $active Optional. Whether the hook is active.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $org,
|
||||
string $type,
|
||||
string $url,
|
||||
string $secret = '',
|
||||
bool $events = true,
|
||||
bool $active = true
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
$data->type = $type;
|
||||
$data->config = new \stdClass();
|
||||
$data->config->url = $url;
|
||||
$data->config->secret = $secret;
|
||||
$data->events = [];
|
||||
$data->active = $active;
|
||||
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/hooks";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a hook for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $id The ID of the hook.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $org, int $id): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/hooks/{$id}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a hook for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $id The hook ID.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $org, int $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/hooks/{$id}";
|
||||
|
||||
// Send the DELETE request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a hook for an organization.
|
||||
*
|
||||
* @param string $orgName The organization name.
|
||||
* @param int $hookId The ID of the hook.
|
||||
* @param bool|null $active Optional. Whether the hook is active.
|
||||
* @param string|null $branchFilter Optional. Branch filter for the hook.
|
||||
* @param array|null $config Optional. Configuration for the hook.
|
||||
* @param array|null $events Optional. Events for the hook.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
string $orgName,
|
||||
int $hookId,
|
||||
?bool $active = null,
|
||||
?string $branchFilter = null,
|
||||
?array $config = null,
|
||||
?array $events = null
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
if ($active !== null)
|
||||
{
|
||||
$data->active = $active;
|
||||
}
|
||||
|
||||
if ($branchFilter !== null)
|
||||
{
|
||||
$data->branch_filter = $branchFilter;
|
||||
}
|
||||
|
||||
if ($config !== null)
|
||||
{
|
||||
$data->config = (object) $config;
|
||||
}
|
||||
|
||||
if ($events !== null)
|
||||
{
|
||||
$data->events = $events;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$orgName}/hooks/{$hookId}";
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,183 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Labels
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Labels extends Api
|
||||
{
|
||||
/**
|
||||
* List an organization's labels.
|
||||
*
|
||||
* @param string $orgName The organization name.
|
||||
* @param int $pageNum Page number of results to return (1-based).
|
||||
* @param int $pageSize Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $orgName,
|
||||
int $pageNum = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$orgName}/labels";
|
||||
|
||||
// Build the URL
|
||||
$url = $this->uri->get($path);
|
||||
$url->setVar('page', $pageNum);
|
||||
$url->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($url)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a label for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $name The name of the label.
|
||||
* @param string $color The color of the label.
|
||||
* @param string $description Optional. The description of the label.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $org,
|
||||
string $name,
|
||||
string $color,
|
||||
string $description = ''
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
$data->name = $name;
|
||||
$data->color = $color;
|
||||
$data->description = $description;
|
||||
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/labels";
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single label for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $id The ID of the label.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(string $org, int $id): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/labels/{$id}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a label for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $id The ID of the label.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(string $org, int $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/labels/{$id}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a label for an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $id The ID of the label.
|
||||
* @param string $name Optional. The name of the label.
|
||||
* @param string $color Optional. The color of the label.
|
||||
* @param string $description Optional. The description of the label.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function update(
|
||||
string $org,
|
||||
int $id,
|
||||
string $name = '',
|
||||
string $color = '',
|
||||
string $description = ''
|
||||
): ?object
|
||||
{
|
||||
// Set the lines data
|
||||
$data = new \stdClass();
|
||||
|
||||
if ($name) {
|
||||
$data->name = $name;
|
||||
}
|
||||
|
||||
if ($color) {
|
||||
$data->color = $color;
|
||||
}
|
||||
|
||||
if ($description) {
|
||||
$data->description = $description;
|
||||
}
|
||||
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/labels/{$id}";
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path),
|
||||
json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,100 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Members
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Members extends Api
|
||||
{
|
||||
/**
|
||||
* Get a list of members of an organization.
|
||||
*
|
||||
* @param string $orgName The organization name.
|
||||
* @param int $page The page number.
|
||||
* @param int $limit The number of members per page.
|
||||
*
|
||||
* @return array|null The organization members.
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function list(
|
||||
string $orgName,
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$orgName}/members";
|
||||
|
||||
// Get the URI and set query parameters.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a user is a member of an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $username The username.
|
||||
*
|
||||
* @return string Whether the user is a member of the organization.
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function check(string $org, string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/members/{$username}";
|
||||
|
||||
// Send the request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a member from an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $username The username of the user to remove.
|
||||
*
|
||||
* @return string Whether the user was successfully removed from the organization.
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function remove(string $org, string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/members/{$username}";
|
||||
|
||||
// Send the request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Public Members
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class PublicMembers extends Api
|
||||
{
|
||||
/**
|
||||
* List an organization's public members.
|
||||
*
|
||||
* @param string $orgName The organization name.
|
||||
* @param int $page Page number of results to return (1-based).
|
||||
* @param int $limit Page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(string $orgName, int $page = 1, int $limit = 10): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$orgName}/public_members";
|
||||
|
||||
// Configure the request URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a user is a public member of an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return string|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function check(string $org, string $username): ?string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/public_members/{$username}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
), 204
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publicize a user's membership.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return string|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function publicize(string $org, string $username): ?string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/public_members/{$username}";
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put(
|
||||
$this->uri->get($path), ''
|
||||
), 204
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Conceal a user's membership.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function conceal(string $org, string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/public_members/{$username}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,145 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Repository
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Repository extends Api
|
||||
{
|
||||
/**
|
||||
* List an organization's repos.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param int $pageNumber The page number.
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $org,
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/repos";
|
||||
|
||||
// Configure the request URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a repository in an organization.
|
||||
*
|
||||
* @param string $org The organization name.
|
||||
* @param string $repoName The name of the repository.
|
||||
* @param string|null $description The description of the repository (optional).
|
||||
* @param bool|null $autoInit Whether the repository should be auto-initialized (optional).
|
||||
* @param string|null $defaultBranch Default branch of the repository (optional).
|
||||
* @param string|null $gitignores Gitignores to use (optional).
|
||||
* @param string|null $issueLabels Label-set to use (optional).
|
||||
* @param string|null $license License to use (optional).
|
||||
* @param bool|null $private Whether the repository is private (optional).
|
||||
* @param string|null $readme Readme of the repository to create (optional).
|
||||
* @param bool|null $template Whether the repository is a template (optional).
|
||||
* @param string|null $trustModel Trust model of the repository (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $org,
|
||||
string $repoName,
|
||||
?string $description = null,
|
||||
?bool $autoInit = null,
|
||||
?string $defaultBranch = null,
|
||||
?string $gitignores = null,
|
||||
?string $issueLabels = null,
|
||||
?string $license = null,
|
||||
?bool $private = null,
|
||||
?string $readme = null,
|
||||
?bool $template = null,
|
||||
?string $trustModel = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$org}/repos";
|
||||
|
||||
// Set the repository data.
|
||||
$data = new \stdClass();
|
||||
$data->name = $repoName;
|
||||
if ($description !== null)
|
||||
{
|
||||
$data->description = $description;
|
||||
}
|
||||
if ($autoInit !== null)
|
||||
{
|
||||
$data->auto_init = $autoInit;
|
||||
}
|
||||
if ($defaultBranch !== null)
|
||||
{
|
||||
$data->default_branch = $defaultBranch;
|
||||
}
|
||||
if ($gitignores !== null)
|
||||
{
|
||||
$data->gitignores = $gitignores;
|
||||
}
|
||||
if ($issueLabels !== null)
|
||||
{
|
||||
$data->issue_labels = $issueLabels;
|
||||
}
|
||||
if ($license !== null)
|
||||
{
|
||||
$data->license = $license;
|
||||
}
|
||||
if ($private !== null)
|
||||
{
|
||||
$data->private = $private;
|
||||
}
|
||||
if ($readme !== null)
|
||||
{
|
||||
$data->readme = $readme;
|
||||
}
|
||||
if ($template !== null)
|
||||
{
|
||||
$data->template = $template;
|
||||
}
|
||||
if ($trustModel !== null)
|
||||
{
|
||||
$data->trust_model = $trustModel;
|
||||
}
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
274
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/Teams.php
Normal file
274
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/Teams.php
Normal file
@ -0,0 +1,274 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Teams
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Teams extends Api
|
||||
{
|
||||
/**
|
||||
* List an organization's teams.
|
||||
*
|
||||
* @param string $organization The organization name.
|
||||
* @param int $pageNumber The page number of results to return (1-based).
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
string $organization,
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$organization}/teams";
|
||||
|
||||
// Get the URI object.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the query parameters for page number and page size.
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a team.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(int $id): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a team.
|
||||
*
|
||||
* @param string $organization The organization name.
|
||||
* @param string $name The name of the team.
|
||||
* @param string $description The description of the team.
|
||||
* @param array $repoNames An array of repository names for the team (optional).
|
||||
* @param string $permission The team's permission level (optional).
|
||||
* @param array $units Units for the team (optional).
|
||||
* @param array $unitsMap Units map for the team (optional).
|
||||
* @param bool $canCreateOrgRepo Can create organization repository flag (optional).
|
||||
* @param bool $includesAllRepositories Includes all repositories flag (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function create(
|
||||
string $organization,
|
||||
string $name,
|
||||
string $description,
|
||||
array $repoNames = [],
|
||||
string $permission = 'read',
|
||||
array $units = [],
|
||||
array $unitsMap = [],
|
||||
bool $canCreateOrgRepo = null,
|
||||
bool $includesAllRepositories = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$organization}/teams";
|
||||
|
||||
// Set the team data.
|
||||
$data = new \stdClass();
|
||||
$data->name = $name;
|
||||
$data->description = $description;
|
||||
$data->permission = $permission;
|
||||
|
||||
if (!empty($repoNames))
|
||||
{
|
||||
$data->repo_names = $repoNames;
|
||||
}
|
||||
|
||||
if (!empty($units))
|
||||
{
|
||||
$data->units = $units;
|
||||
}
|
||||
|
||||
if (!empty($unitsMap))
|
||||
{
|
||||
$data->units_map = (object)$unitsMap;
|
||||
}
|
||||
|
||||
if ($canCreateOrgRepo !== null)
|
||||
{
|
||||
$data->can_create_org_repo = $canCreateOrgRepo;
|
||||
}
|
||||
|
||||
if ($includesAllRepositories !== null)
|
||||
{
|
||||
$data->includes_all_repositories = $includesAllRepositories;
|
||||
}
|
||||
|
||||
// Send the post request.
|
||||
return $this->response->get(
|
||||
$this->http->post(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
), 201
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for teams within an organization.
|
||||
*
|
||||
* @param string $organization The organization name.
|
||||
* @param string $keywords The search keywords.
|
||||
* @param bool $includeDesc Include search within team description (defaults to true).
|
||||
* @param int $page The page number.
|
||||
* @param int $limit The number of results per page.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function search(
|
||||
string $organization,
|
||||
string $keywords,
|
||||
bool $includeDesc = true,
|
||||
int $page = 1,
|
||||
int $limit = 10
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/orgs/{$organization}/teams/search";
|
||||
|
||||
// Configure the request URI.
|
||||
$uri = $this->uri->get($path);
|
||||
$uri->setVar('q', $keywords);
|
||||
$uri->setVar('include_desc', $includeDesc);
|
||||
$uri->setVar('page', $page);
|
||||
$uri->setVar('limit', $limit);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a team.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function delete(int $id): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a team.
|
||||
*
|
||||
* @param int $teamId The team ID.
|
||||
* @param string|null $teamName The team name (optional).
|
||||
* @param string|null $teamDescription The team description (optional).
|
||||
* @param string|null $teamPermission The team's permission level (optional).
|
||||
* @param bool|null $canCreateOrgRepo Can team create organization repositories (optional).
|
||||
* @param bool|null $includesAllRepositories Include all repositories (optional).
|
||||
* @param array|null $units List of units (optional).
|
||||
* @param array|null $unitsMap Units map (optional).
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function edit(
|
||||
int $teamId,
|
||||
?string $teamName = null,
|
||||
?string $teamDescription = null,
|
||||
?string $teamPermission = null,
|
||||
?bool $canCreateOrgRepo = null,
|
||||
?bool $includesAllRepositories = null,
|
||||
?array $units = null,
|
||||
?array $unitsMap = null
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$teamId}";
|
||||
|
||||
// Set the team data.
|
||||
$data = new \stdClass();
|
||||
if ($teamName !== null)
|
||||
{
|
||||
$data->name = $teamName;
|
||||
}
|
||||
if ($teamDescription !== null)
|
||||
{
|
||||
$data->description = $teamDescription;
|
||||
}
|
||||
if ($teamPermission !== null)
|
||||
{
|
||||
$data->permission = $teamPermission;
|
||||
}
|
||||
if ($canCreateOrgRepo !== null)
|
||||
{
|
||||
$data->can_create_org_repo = $canCreateOrgRepo;
|
||||
}
|
||||
if ($includesAllRepositories !== null)
|
||||
{
|
||||
$data->includes_all_repositories = $includesAllRepositories;
|
||||
}
|
||||
if ($units !== null)
|
||||
{
|
||||
$data->units = $units;
|
||||
}
|
||||
if ($unitsMap !== null)
|
||||
{
|
||||
$data->units_map = $unitsMap;
|
||||
}
|
||||
|
||||
// Send the patch request.
|
||||
return $this->response->get(
|
||||
$this->http->patch(
|
||||
$this->uri->get($path), json_encode($data)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization\Teams;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Teams Members
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Members extends Api
|
||||
{
|
||||
/**
|
||||
* List a team's members.
|
||||
*
|
||||
* @param int $teamId The team ID.
|
||||
* @param int $pageNumber The page number of results to return (1-based).
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
int $teamId,
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$teamId}/members";
|
||||
|
||||
// Get the URI object.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the query parameters for page number and page size.
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List a particular member of the team.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(int $id, string $username): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}/members/{$username}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a team member.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(int $id, string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}/members/{$username}";
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put(
|
||||
$this->uri->get($path), ''
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a team member.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
* @param string $username The user's username.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function remove(int $id, string $username): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}/members/{$username}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,135 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization\Teams;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization Teams Repository
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Repository extends Api
|
||||
{
|
||||
/**
|
||||
* List a team's repos.
|
||||
*
|
||||
* @param int $teamId The team ID.
|
||||
* @param int $pageNumber The page number of results to return (1-based).
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
int $teamId,
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$teamId}/repos";
|
||||
|
||||
// Get the URI object.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the query parameters for page number and page size.
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List a particular repo of the team.
|
||||
*
|
||||
* @param int $teamId The team ID.
|
||||
* @param string $organization The organization name.
|
||||
* @param string $repository The repository name.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(
|
||||
int $teamId,
|
||||
string $organization,
|
||||
string $repository
|
||||
): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$teamId}/repos/{$organization}/{$repository}";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a repository to a team.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
* @param string $org The organization name.
|
||||
* @param string $repo The repository name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function add(
|
||||
int $id,
|
||||
string $org,
|
||||
string $repo
|
||||
): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}/repos/{$org}/{$repo}";
|
||||
|
||||
// Send the put request.
|
||||
return $this->response->get(
|
||||
$this->http->put(
|
||||
$this->uri->get($path), ''
|
||||
),204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a repository from a team.
|
||||
*
|
||||
* @param int $id The team ID.
|
||||
* @param string $org The organization name.
|
||||
* @param string $repo The repository name.
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function remove(int $id, string $org, string $repo): string
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/teams/{$id}/repos/{$org}/{$repo}";
|
||||
|
||||
// Send the delete request.
|
||||
return $this->response->get(
|
||||
$this->http->delete(
|
||||
$this->uri->get($path)
|
||||
), 204, 'success'
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
111
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/User.php
Normal file
111
libraries/jcb_powers/VDM.Joomla.Gitea/src/Organization/User.php
Normal file
@ -0,0 +1,111 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
||||
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace VDM\Joomla\Gitea\Organization;
|
||||
|
||||
|
||||
use VDM\Joomla\Gitea\Abstraction\Api;
|
||||
|
||||
|
||||
/**
|
||||
* The Gitea Organization User
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class User extends Api
|
||||
{
|
||||
/**
|
||||
* List the current user's organizations.
|
||||
*
|
||||
* @param int $pageNumber The page number of results to return (1-based).
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function list(
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/user/orgs";
|
||||
|
||||
// Get the URI object.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the query parameters for page number and page size.
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* List a user's organizations.
|
||||
*
|
||||
* @param string $username The user's username.
|
||||
* @param int $pageNumber The page number of results to return (1-based).
|
||||
* @param int $pageSize The page size of results.
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function get(
|
||||
string $username,
|
||||
int $pageNumber = 1,
|
||||
int $pageSize = 10
|
||||
): ?array
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/users/{$username}/orgs";
|
||||
|
||||
// Get the URI object.
|
||||
$uri = $this->uri->get($path);
|
||||
|
||||
// Add the query parameters for page number and page size.
|
||||
$uri->setVar('page', $pageNumber);
|
||||
$uri->setVar('limit', $pageSize);
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get($uri)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user permissions in an organization.
|
||||
*
|
||||
* @param string $username The user's username.
|
||||
* @param string $org The organization name.
|
||||
*
|
||||
* @return object|null
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function permissions(string $username, string $org): ?object
|
||||
{
|
||||
// Build the request path.
|
||||
$path = "/users/{$username}/orgs/{$org}/permissions";
|
||||
|
||||
// Send the get request.
|
||||
return $this->response->get(
|
||||
$this->http->get(
|
||||
$this->uri->get($path)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user