Completed
Push — master ( 534aa6...b0bf1d )
by Andreas
17:36
created

net_nehmer_blog_handler_admin   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Test Coverage

Coverage 62.5%

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 78
ccs 20
cts 32
cp 0.625
rs 10
c 0
b 0
f 0
wmc 9

3 Methods

Rating   Name   Duplication   Size   Complexity  
A save_callback() 0 6 1
A _handler_delete() 0 8 2
B _handler_edit() 0 36 6
1
<?php
2
/**
3
 * @package net.nehmer.blog
4
 * @author The Midgard Project, http://www.midgard-project.org
5
 * @copyright The Midgard Project, http://www.midgard-project.org
6
 * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
7
 */
8
9
use midcom\datamanager\datamanager;
10
use midcom\datamanager\controller;
11
use Symfony\Component\HttpFoundation\Request;
12
13
/**
14
 * n.n.blog admin page handler
15
 *
16
 * @package net.nehmer.blog
17
 */
18
class net_nehmer_blog_handler_admin extends midcom_baseclasses_components_handler
19
{
20
    use net_nehmer_blog_handler;
0 ignored issues
show
introduced by
The trait net_nehmer_blog_handler requires some properties which are not provided by net_nehmer_blog_handler_admin: $admin, $name, $auth, $url, $guid, $revised, $metadata, $user
Loading history...
21
22
    /**
23
     * The article to operate on
24
     *
25
     * @var midcom_db_article
26
     */
27
    private $article;
28
29
    /**
30
     * Displays an article edit view.
31
     *
32
     * @param Request $request The request object
33
     * @param array $args The argument list.
34
     * @param array $data The local request data.
35
     */
36 1
    public function _handler_edit(Request $request, array $args, array &$data)
37
    {
38 1
        $this->article = new midcom_db_article($args[0]);
39
40
        // Relocate for the correct content topic, let the true content topic take care of the ACL
41 1
        if ($this->article->topic !== $this->_topic->id) {
42
            $nap = new midcom_helper_nav();
43
            $node = $nap->get_node($this->article->topic);
44
45
            if (!empty($node[MIDCOM_NAV_ABSOLUTEURL])) {
46
                return new midcom_response_relocate($node[MIDCOM_NAV_ABSOLUTEURL] . "edit/{$args[0]}/");
47
            }
48
            throw new midcom_error_notfound("The article with GUID {$args[0]} was not found.");
49
        }
50
51 1
        $this->article->require_do('midgard:update');
52
53 1
        $schemadb = $data['schemadb'];
54 1
        if (   $this->_config->get('simple_name_handling')
55 1
            && !midcom::get()->auth->can_user_do('midcom:urlname')) {
56
            foreach ($schemadb->all() as $schema) {
57
                $schema->get_field('name')['readonly'] = true;
58
            }
59
        }
60
61 1
        $dm = new datamanager($schemadb);
62 1
        $data['controller'] = $dm->set_storage($this->article)
63 1
            ->get_controller();
64
65 1
        midcom::get()->head->set_pagetitle($this->_l10n->get('edit article'));
66
67 1
        $workflow = $this->get_workflow('datamanager', [
68 1
            'controller' => $data['controller'],
69 1
            'save_callback' => [$this, 'save_callback']
70
        ]);
71 1
        return $workflow->run($request);
72
    }
73
74
    public function save_callback(controller $controller)
75
    {
76
        // Reindex the article
77
        $indexer = midcom::get()->indexer;
78
        net_nehmer_blog_viewer::index($controller->get_datamanager(), $indexer, $this->_topic);
79
        return $this->get_url($this->article);
80
    }
81
82
    /**
83
     * Handles article deletion
84
     *
85
     * @param Request $request The request object
86
     * @param array $args The argument list.
87
     */
88 1
    public function _handler_delete(Request $request, array $args)
89
    {
90 1
        $this->article = new midcom_db_article($args[0]);
91 1
        if ($this->article->topic !== $this->_topic->id) {
92
            throw new midcom_error_forbidden('Article does not belong to this topic');
93
        }
94 1
        $workflow = $this->get_workflow('delete', ['object' => $this->article]);
95 1
        return $workflow->run($request);
96
    }
97
}
98