Plugin system enhancements (Custom user's settings tabs)

This commit is contained in:
RainLoop Team 2015-02-19 05:01:59 +04:00
parent a3f28b09f6
commit 9a58fd0a66
13 changed files with 398 additions and 16 deletions

View file

@ -176,7 +176,7 @@ abstract class AbstractPlugin
return $this;
}
/**
* @param string $sName
*
@ -354,4 +354,67 @@ abstract class AbstractPlugin
return $this;
}
/**
* @param string $sName
* @param string $sPlace
* @param string $sHtml
* @param bool $bPrepend = false
*
* @return self
*/
protected function ajaxResponse($sFunctionName, $aData)
{
if ($this->oPluginManager)
{
return $this->oPluginManager->AjaxResponseHelper(
$this->oPluginManager->convertPluginFolderNameToClassName($this->Name()).'::'.$sFunctionName, $aData);
}
return \json_encode($aData);
}
/**
* @param string $sKey
* @param mixed $mDefault = null
*
* @return mixed
*/
public function ajaxParam($sKey, $mDefault = null)
{
if ($this->oPluginManager)
{
return $this->oPluginManager->Actions()->GetActionParam($sKey, $mDefault);
}
return '';
}
/**
* @return array
*/
public function getUserSettings()
{
if ($this->oPluginManager)
{
return $this->oPluginManager->GetUserPluginSettings($this->Name());
}
return array();
}
/**
* @param array $aSettings
*
* @return bool
*/
public function saveUserSettings($aSettings)
{
if ($this->oPluginManager && \is_array($aSettings))
{
return $this->oPluginManager->SaveUserPluginSettings($this->Name(), $aSettings);
}
return false;
}
}

View file

@ -192,7 +192,7 @@ class Manager
*
* @return string
*/
private function convertPluginFolderNameToClassName($sFolderName)
public function convertPluginFolderNameToClassName($sFolderName)
{
$aParts = \array_map('ucfirst', \array_map('strtolower',
\explode(' ', \preg_replace('/[^a-z0-9]+/', ' ', $sFolderName))));
@ -515,19 +515,19 @@ class Manager
/**
* @param string $sActionName
* @param mixed $mCallbak
* @param mixed $mCallback
*
* @return \RainLoop\Plugins\Manager
*/
public function AddAdditionalAjaxAction($sActionName, $mCallbak)
public function AddAdditionalAjaxAction($sActionName, $mCallback)
{
if ($this->bIsEnabled && \is_callable($mCallbak) && 0 < \strlen($sActionName))
if ($this->bIsEnabled && \is_callable($mCallback) && 0 < \strlen($sActionName))
{
$sActionName = 'Do'.$sActionName;
$sActionName = 'DoPlugin'.$sActionName;
if (!isset($this->aAdditionalAjax[$sActionName]))
{
$this->aAdditionalAjax[$sActionName] = $mCallbak;
$this->aAdditionalAjax[$sActionName] = $mCallback;
}
}
@ -562,6 +562,82 @@ class Manager
return false;
}
/**
* @param string $sFunctionName
* @param mixed $mData
*
* @return mixed
*/
public function AjaxResponseHelper($sFunctionName, $mData)
{
return $this->oActions->DefaultResponse($sFunctionName, $mData);
}
/**
* @param string $sPluginName
*
* @return array
*/
public function GetUserPluginSettings($sPluginName)
{
$oAccount = $this->oActions->GetAccount();
if ($oAccount)
{
$oSettings = $this->oActions->SettingsProvider()->Load($oAccount);
if ($oSettings)
{
$aData = $oSettings->GetConf('Plugins', array());
if (isset($aData[$sPluginName]) && \is_array($aData[$sPluginName]))
{
return $aData[$sPluginName];
}
}
}
return array();
}
/**
* @param string $sPluginName
* @param array $aSettings
*
* @return bool
*/
public function SaveUserPluginSettings($sPluginName, $aSettings)
{
$oAccount = $this->oActions->GetAccount();
if ($oAccount && \is_array($aSettings))
{
$oSettings = $this->oActions->SettingsProvider()->Load($oAccount);
if ($oSettings)
{
$aData = $oSettings->GetConf('Plugins', array());
if (!\is_array($aData))
{
$aData = array();
}
$aPluginSettings = array();
if (isset($aData[$sPluginName]) && \is_array($aData[$sPluginName]))
{
$aPluginSettings = $aData[$sPluginName];
}
foreach ($aSettings as $sKey => $mValue)
{
$aPluginSettings[$sKey] = $mValue;
}
$aData[$sPluginName] = $aPluginSettings;
$oSettings->SetConf('Plugins',$aData);
return $this->oActions->SettingsProvider()->Save($oAccount, $oSettings);
}
}
return false;
}
/**
* @param string $sLang
* @param array $sActionName