Completed
Push — master ( 6e5918...2d50a5 )
by Andreas
13:56
created

datamanager::prepare_url()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 2
nop 1
dl 0
loc 7
ccs 5
cts 5
cp 1
crap 3
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @package midcom.workflow
4
 * @author CONTENT CONTROL http://www.contentcontrol-berlin.de/
5
 * @copyright CONTENT CONTROL http://www.contentcontrol-berlin.de/
6
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License
7
 */
8
9
namespace midcom\workflow;
10
11
use Symfony\Component\OptionsResolver\OptionsResolver;
12
use midcom_core_context;
13
use midcom;
14
use midcom\datamanager\controller;
15
use Symfony\Component\HttpFoundation\Request;
16
17
/**
18
 * @package midcom.workflow
19
 */
20
class datamanager extends dialog
21
{
22
    /**
23
     *
24
     * @var \midcom\datamanager\controller
25
     */
26
    protected $controller;
27
28
    /**
29
     *
30
     * @var callable
31
     */
32
    protected $save_callback;
33
34
    /**
35
     * Disable relocate after execute
36
     *
37
     * Returns the uimessage as JSON instead
38
     *
39
     * @var boolean
40
     */
41
    protected $relocate;
42
43
    /**
44
     * {@inheritdoc}
45
     */
46 338
    public function configure(OptionsResolver $resolver)
47
    {
48
        $resolver
49 338
            ->setDefaults([
50 338
                'controller' => null,
51
                'save_callback' => null,
52
                'relocate' => true
53
            ])
54 338
            ->setAllowedTypes('controller', ['null', '\midcom\datamanager\controller']);
55 338
    }
56
57 314
    public function get_button_config()
58
    {
59
        return [
60 314
            MIDCOM_TOOLBAR_LABEL => midcom::get()->i18n->get_l10n('midcom')->get('edit'),
61 314
            MIDCOM_TOOLBAR_GLYPHICON => 'pencil',
62 314
            MIDCOM_TOOLBAR_OPTIONS => [
63 314
                'data-dialog' => 'dialog',
64 314
                'data-dialog-cancel-label' => midcom::get()->i18n->get_l10n('midcom')->get('cancel')
65
            ]
66
        ];
67
    }
68
69 68
    public function run(Request $request)
70
    {
71 68
        $context = midcom_core_context::get();
72 68
        midcom::get()->head->add_jsfile(MIDCOM_STATIC_URL . '/midcom.workflow/dialog.js');
73 68
        midcom::get()->style->append_styledir(__DIR__ . '/style');
74 68
        $this->state = $this->controller->handle($request);
75
76 68
        if ($this->state == controller::SAVE) {
77 11
            if ($this->relocate) {
78 9
                $url = '';
79 9
                if (is_callable($this->save_callback)) {
80 8
                    $url = call_user_func($this->save_callback, $this->controller);
81 8
                    if ($url !== null) {
82 4
                        $url = $this->prepare_url($url);
83
                    }
84
                }
85 9
                midcom::get()->head->add_jscript('refresh_opener(' . $url . ');');
86
            } else {
87 2
                $dm = $this->controller->get_datamanager();
88 2
                $data = $dm->get_content_html();
89 2
                $object = $dm->get_storage()->get_value();
90 2
                if ($object instanceof \midcom_core_dbaobject) {
91 2
                    $data['guid'] = $object->guid;
92
                }
93 2
                midcom::get()->head->add_jscript('close(' . json_encode($data) . ');');
94
            }
95 11
            $context->set_key(MIDCOM_CONTEXT_SHOWCALLBACK, [midcom::get(), 'finish']);
96
        } else {
97 68
            $context->set_key(MIDCOM_CONTEXT_SHOWCALLBACK, [$this->controller, 'display_form']);
98
        }
99 68
        return new \midcom_response_styled($context, 'POPUP');
100
    }
101
102 3
    public function add_post_button($url, $label, array $args)
103
    {
104 3
        midcom::get()->head->add_jsfile(MIDCOM_STATIC_URL . '/midcom.workflow/dialog.js');
105 3
        midcom::get()->head->add_jscript('add_post_button(' . $this->prepare_url($url) . ', "' . $label . '", ' . json_encode($args) . ');');
106 3
    }
107
108 5
    public function add_dialog_button(dialog $dialog, $url)
109
    {
110 5
        $config = $dialog->get_button_config();
111 5
        midcom::get()->head->add_jsfile(MIDCOM_STATIC_URL . '/midcom.workflow/dialog.js');
112 5
        midcom::get()->head->add_jscript('add_dialog_button(' . $this->prepare_url($url) . ', "' . $config[MIDCOM_TOOLBAR_LABEL] . '", ' . json_encode($config[MIDCOM_TOOLBAR_OPTIONS]) . ');');
113 5
    }
114
115 12
    private function prepare_url($url)
116
    {
117 12
        if (   substr($url, 0, 1) != '/'
118 12
            && ! preg_match('|^https?://|', $url)) {
119 3
            $url = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX) . $url;
0 ignored issues
show
Bug introduced by
Are you sure midcom_core_context::get...M_CONTEXT_ANCHORPREFIX) of type false|mixed can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

119
            $url = /** @scrutinizer ignore-type */ midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX) . $url;
Loading history...
120
        }
121 12
        return '"' . $url . '"';
122
    }
123
}
124