]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Fix #2466 add plugin directive support in fileset resource
authorMarcin Haba <marcin.haba@bacula.pl>
Mon, 29 Apr 2019 04:57:45 +0000 (06:57 +0200)
committerMarcin Haba <marcin.haba@bacula.pl>
Mon, 29 Apr 2019 04:57:45 +0000 (06:57 +0200)
12 files changed:
gui/baculum/protected/Common/Class/Miscellaneous.php
gui/baculum/protected/Web/Lang/en/messages.mo
gui/baculum/protected/Web/Lang/en/messages.po
gui/baculum/protected/Web/Lang/ja/messages.mo
gui/baculum/protected/Web/Lang/ja/messages.po
gui/baculum/protected/Web/Lang/pl/messages.mo
gui/baculum/protected/Web/Lang/pl/messages.po
gui/baculum/protected/Web/Lang/pt/messages.mo
gui/baculum/protected/Web/Lang/pt/messages.po
gui/baculum/protected/Web/Portlets/DirectiveFileSet.php
gui/baculum/protected/Web/Portlets/DirectiveFileSet.tpl
gui/baculum/protected/Web/Portlets/NewFileSetFileOptMenu.tpl

index 0c18b1bd452c908ea6d2ab183ad52bdf3df7b193..21f64439a547c1cb004f3d7e769ba82196fb2ce4 100644 (file)
@@ -402,7 +402,7 @@ class Miscellaneous extends TModule {
                                        'name' => $match['name'],
                                        'type' => 'dir'
                                );
-                       } elseif(preg_match('/^(?P<pathid>\d+)\t(?P<filenameid>\d+)\t(?P<fileid>\d+)\t(?P<jobid>\d+)\t(?P<lstat>[a-zA-z0-9\+\/\ ]+)\t(?P<name>[^\/]+)$/', $list[$i], $match) == 1) {
+                       } elseif(preg_match('/^(?P<pathid>\d+)\t(?P<filenameid>\d+)\t(?P<fileid>\d+)\t(?P<jobid>\d+)\t(?P<lstat>[a-zA-z0-9\+\-\/\ ]+)\t(?P<name>[^\/]+)$/', $list[$i], $match) == 1) {
                                if($match['name'] == '.') {
                                        continue;
                                }
index 4f74e8b41cedc35655e55ae0d731f20cbf4477de..5c643256f7ff9309f65cbdccac5385974bae12fd 100644 (file)
Binary files a/gui/baculum/protected/Web/Lang/en/messages.mo and b/gui/baculum/protected/Web/Lang/en/messages.mo differ
index f8cc341c005738282a120349884722d05ed22afb..bfc857393fcc43b71a5e5f31b4a3766d28e45a0c 100644 (file)
@@ -1988,3 +1988,8 @@ msgstr "Add exclude block"
 msgid "Add file/directory"
 msgstr "Add file/directory"
 
+msgid "Plugins"
+msgstr "Plugins"
+
+msgid "Add plugin"
+msgstr "Add plugin"
index 5696e66f3ac73ae82f877d2702a2e59345760076..1845bf2946045e58aa6157e8f2f983749e5ee42c 100644 (file)
Binary files a/gui/baculum/protected/Web/Lang/ja/messages.mo and b/gui/baculum/protected/Web/Lang/ja/messages.mo differ
index 31cb3f3198f636720420560cc148f6e1c18e3067..3600886f8d51c6a8876fa6058ebf7fcd982b1087 100644 (file)
@@ -2089,3 +2089,8 @@ msgstr "Add exclude block"
 msgid "Add file/directory"
 msgstr "Add file/directory"
 
+msgid "Add plugin"
+msgstr "Add plugin"
+
+msgid "Plugins"
+msgstr "Plugins"
index 2cbaf9dc99610ee0c38d884875cd8cd83bbb9eb6..7c49bdcfb1ad2cb6a7480f709b1126dec4f6205e 100644 (file)
Binary files a/gui/baculum/protected/Web/Lang/pl/messages.mo and b/gui/baculum/protected/Web/Lang/pl/messages.mo differ
index 6be3f33a05c0da30604da54df2a3d3220a89d7aa..6d27962060daf65e7841c29f7ea60a9e8a227dde 100644 (file)
@@ -1995,3 +1995,8 @@ msgstr "Dodaj blok listy wykluczeń"
 msgid "Add file/directory"
 msgstr "Dodaj plik/katalog"
 
+msgid "Add plugin"
+msgstr "Dodaj wtyczkę"
+
+msgid "Plugins"
+msgstr "Wtyczki"
index 954ed54d9617ed52bd1805285e028c6e47344848..3e92bc03391bb625ffeb6a15a83273aed99ab21f 100644 (file)
Binary files a/gui/baculum/protected/Web/Lang/pt/messages.mo and b/gui/baculum/protected/Web/Lang/pt/messages.mo differ
index 3099b93ec2dd06ccd2be1797b78e6bceed964630..3a5bd66c22908f856b9c6ebd122003c6e36f8ea8 100644 (file)
@@ -2002,3 +2002,9 @@ msgstr "Excluir Arquivos"
 
 msgid "Add file/directory"
 msgstr "Arquivo/diretório"
+
+msgid "Add plugin"
+msgstr "Add plugin"
+
+msgid "Plugins"
+msgstr "Plugins"
index 6b73d9d764ed5aeb38cfb3b54d071f1ee63ee633..89fdb4b4b911d028ab2c55e01c9749042fc961c1 100644 (file)
@@ -56,6 +56,7 @@ class DirectiveFileSet extends DirectiveListTemplate {
                $directives = $this->getData();
                $includes = array();
                $file = array();
+               $plugin = array();
                $exclude = array();
                $options = array();
                if (!is_array($directives) || $directive_name === 'Exclude') {
@@ -74,6 +75,10 @@ class DirectiveFileSet extends DirectiveListTemplate {
                                                                $this->setFile($file, $name, $values);
                                                                break;
                                                        }
+                                                       case 'Plugin': {
+                                                               $this->setPlugin($plugin, $name, $values);
+                                                               break;
+                                                       }
                                                        case 'Options': {
                                                                $this->setOption($options, $name, $values);
                                                                break;
@@ -82,9 +87,10 @@ class DirectiveFileSet extends DirectiveListTemplate {
                                        }
                                        $includes[] = array(
                                                'file' => $file,
+                                               'plugin' => $plugin,
                                                'options' => $options
                                        );
-                                       $file = $options = array();
+                                       $file = $plugin = $options = array();
                                }
                        } elseif ($index === 'Exclude') {
                                if (!key_exists('File', $subres)) {
@@ -137,6 +143,41 @@ class DirectiveFileSet extends DirectiveListTemplate {
                }
        }
 
+       private function setPlugin(&$plugins, $name, $config) {
+               $host = $this->getHost();
+               $component_type = $this->getComponentType();
+               $component_name = $this->getComponentName();
+               $resource_type = $this->getResourceType();
+               $resource_name = $this->getResourceName();
+               $directive_name = 'Plugin';
+               $field_type = 'TextBox';
+               $default_value = '';
+               $required = false;
+
+               for ($i = 0; $i < count($config); $i++) {
+                       $plugins[] = array(
+                               'host' => $host,
+                               'component_type' => $component_type,
+                               'component_name' => $component_name,
+                               'resource_type' => $resource_type,
+                               'resource_name' => $resource_name,
+                               'directive_name' => $name,
+                               'directive_value' => $config[$i],
+                               'parent_name' => $name,
+                               'field_type' => $field_type,
+                               'default_value' => $default_value,
+                               'required' => $required,
+                               'data' => null,
+                               'resource' => null,
+                               'in_config' => true,
+                               'label' => $directive_name,
+                               'show' => true,
+                               'parent_name' => $name,
+                               'group_name' => $i
+                       );
+               }
+       }
+
        private function setOption(&$options, $name, $config) {
                $misc = $this->getModule('misc');
                $load_values = $this->getLoadValues();
@@ -281,6 +322,22 @@ class DirectiveFileSet extends DirectiveListTemplate {
                                        }
                                        $directive_values['Include'][$counter][$directive_name][] = $directive_value;
                                }
+                               $controls = $value->RepeaterFileSetPlugin->findControlsByType($this->directive_types[$i]);
+                               for ($j = 0; $j < count($controls); $j++) {
+                                       $directive_name = $controls[$j]->getDirectiveName();
+                                       $directive_value = $controls[$j]->getDirectiveValue();
+                                       if (empty($directive_value)) {
+                                               // Include plugin directive removed
+                                               continue;
+                                       }
+                                       if (!key_exists($counter, $directive_values['Include'])) {
+                                               $directive_values['Include'][$counter] = array();
+                                       }
+                                       if (!key_exists($directive_name, $directive_values['Include'][$counter])) {
+                                               $directive_values['Include'][$counter][$directive_name] = array();
+                                       }
+                                       $directive_values['Include'][$counter][$directive_name][] = $directive_value;
+                               }
                        }
                        for ($i = 0; $i < count($this->directive_list_types); $i++) {
                                $controls = $value->RepeaterFileSetOptions->findControlsByType($this->directive_list_types[$i]);
@@ -330,6 +387,8 @@ class DirectiveFileSet extends DirectiveListTemplate {
                $param->Item->RepeaterFileSetOptions->dataBind();
                $param->Item->RepeaterFileSetInclude->DataSource = $param->Item->Data['file'];
                $param->Item->RepeaterFileSetInclude->dataBind();
+               $param->Item->RepeaterFileSetPlugin->DataSource = $param->Item->Data['plugin'];
+               $param->Item->RepeaterFileSetPlugin->dataBind();
                $param->Item->FileSetFileOptMenu->setItemIndex($param->Item->getItemIndex());
        }
 
@@ -372,6 +431,18 @@ class DirectiveFileSet extends DirectiveListTemplate {
                $this->loadConfig();
        }
 
+       public function newIncludePlugin($sender, $param) {
+               $data = $this->getDirectiveValue();
+               $inc_index = $sender->Parent->getItemIndex();
+               $plugin_index = 0;
+               if (key_exists($inc_index, $data['Include']) && key_exists('Plugin', $data['Include'][$inc_index])) {
+                       $plugin_index = count($data['Include'][$inc_index]['Plugin']);
+               }
+               $data['Include'][$inc_index]['Plugin'][$plugin_index] = '';
+               $this->setData($data);
+               $this->loadConfig();
+       }
+
        public function newExcludeFile($sender, $param) {
                $data = $this->getDirectiveValue();
                $file_index = 0;
index 4524c47dbc80f7050bc89eec7248c925273e94ec..da25a10b52fc4ca3fe7406f35a660abb127febb6 100644 (file)
                                </div>
                        </prop:FooterTemplate>
                </com:TActiveRepeater>
+               <com:TActiveRepeater ID="RepeaterFileSetPlugin"  ItemRenderer="Application.Web.Portlets.DirectiveRenderer" CssClass="incexc_item">
+                       <prop:HeaderTemplate>
+                               <div class="w3-card-4 w3-padding w3-margin-bottom directive include_plugin">
+                                       <h3><%[ Plugins ]%></h3>
+                       </prop:HeaderTemplate>
+                       <prop:FooterTemplate>
+                               </div>
+                       </prop:FooterTemplate>
+               </com:TActiveRepeater>
                </div>
        </prop:ItemTemplate>
 </com:TActiveRepeater>
index 2dd89c892f1851f95919293459af4af584c3134b..4de53da4d802036cb03b25e44d5f0d38518d35d5 100644 (file)
                        <i class='fa fa-plus'></i> &nbsp;<%[ Add options block ]%>
                </com:TActiveLinkButton>
                </li>
+               <li><com:TActiveLinkButton
+                       ID="PluginsItem"
+                       OnCommand="Parent.SourceTemplateControl.newIncludePlugin"
+                       CommandParameter="save"
+                       ClientSide.OnComplete="var el1 = $('#<%=$this->PluginsItem->ClientID%>').parents('div').find('div.include_plugin')[<%=$this->Parent->ItemIndex%>]; var el2 = $(el1).find('div'); BaculaConfig.scroll_to_element(el2[el2.length-1], -80); $(el2[el2.length-1]).find('input')[0].focus();"
+                       Attributes.onclick="$(this).closest('div.config_new_fileset').hide();"
+                       >
+                       <i class='fa fa-plus'></i> &nbsp;<%[ Add plugin ]%>
+               </com:TActiveLinkButton>
+               </li>
        </ul>
 </div>