summaryrefslogtreecommitdiffstats
path: root/library/Director/Job/ImportJob.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/Job/ImportJob.php')
-rw-r--r--library/Director/Job/ImportJob.php122
1 files changed, 122 insertions, 0 deletions
diff --git a/library/Director/Job/ImportJob.php b/library/Director/Job/ImportJob.php
new file mode 100644
index 0000000..5f2c81c
--- /dev/null
+++ b/library/Director/Job/ImportJob.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Icinga\Module\Director\Job;
+
+use Icinga\Module\Director\Hook\JobHook;
+use Icinga\Module\Director\Objects\ImportSource;
+use Icinga\Module\Director\Web\Form\DirectorObjectForm;
+use Icinga\Module\Director\Web\Form\QuickForm;
+
+class ImportJob extends JobHook
+{
+ /**
+ * @throws \Icinga\Exception\NotFoundError
+ * @throws \Icinga\Module\Director\Exception\DuplicateKeyException
+ */
+ public function run()
+ {
+ $db = $this->db();
+ $id = $this->getSetting('source_id');
+ if ($id === '__ALL__') {
+ foreach (ImportSource::loadAll($db) as $source) {
+ $this->runForSource($source);
+ }
+ } else {
+ $this->runForSource(ImportSource::loadWithAutoIncId($id, $db));
+ }
+ }
+
+ /**
+ * @return array
+ * @throws \Icinga\Exception\NotFoundError
+ */
+ public function exportSettings()
+ {
+ $settings = parent::exportSettings();
+ if (array_key_exists('source_id', $settings)) {
+ $id = $settings['source_id'];
+ if ($id !== '__ALL__') {
+ $settings['source'] = ImportSource::loadWithAutoIncId(
+ $id,
+ $this->db()
+ )->get('source_name');
+ }
+
+ unset($settings['source_id']);
+ }
+
+ return $settings;
+ }
+
+ /**
+ * @param ImportSource $source
+ * @throws \Icinga\Module\Director\Exception\DuplicateKeyException
+ */
+ protected function runForSource(ImportSource $source)
+ {
+ if ($this->getSetting('run_import') === 'y') {
+ $source->runImport();
+ } else {
+ $source->checkForChanges();
+ }
+ }
+
+ public static function getDescription(QuickForm $form)
+ {
+ return $form->translate(
+ 'The "Import" job allows to run import actions at regular intervals'
+ );
+ }
+
+ /**
+ * @param QuickForm $form
+ * @throws \Zend_Form_Exception
+ */
+ public static function addSettingsFormFields(QuickForm $form)
+ {
+ $rules = self::enumImportSources($form);
+
+ $form->addElement('select', 'source_id', array(
+ 'label' => $form->translate('Import source'),
+ 'description' => $form->translate(
+ 'Please choose your import source that should be executed.'
+ . ' You could create different schedules for different sources'
+ . ' or also opt for running all of them at once.'
+ ),
+ 'required' => true,
+ 'class' => 'autosubmit',
+ 'multiOptions' => $rules
+ ));
+
+ $form->addElement('select', 'run_import', array(
+ 'label' => $form->translate('Run import'),
+ 'description' => $form->translate(
+ 'You could immediately apply eventual changes or just learn about them.'
+ . ' In case you do not want them to be applied immediately, defining a'
+ . ' job still makes sense. You will be made aware of available changes'
+ . ' in your Director GUI.'
+ ),
+ 'value' => 'n',
+ 'multiOptions' => array(
+ 'y' => $form->translate('Yes'),
+ 'n' => $form->translate('No'),
+ )
+ ));
+ }
+
+ protected static function enumImportSources(QuickForm $form)
+ {
+ /** @var DirectorObjectForm $form */
+ $db = $form->getDb();
+ $query = $db->select()->from(
+ 'import_source',
+ array('id', 'source_name')
+ )->order('source_name');
+
+ $res = $db->fetchPairs($query);
+ return array(
+ null => $form->translate('- please choose -'),
+ '__ALL__' => $form->translate('Run all imports at once')
+ ) + $res;
+ }
+}