Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Edit/create a policy document version.
19
 *
20
 * @package     tool_policy
21
 * @copyright   2018 David Mudrák <david@moodle.com>
22
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
use tool_policy\api;
26
use tool_policy\policy_version;
27
 
28
require(__DIR__.'/../../../config.php');
29
require_once($CFG->libdir.'/adminlib.php');
30
 
31
$policyid = optional_param('policyid', null, PARAM_INT);
32
$versionid = optional_param('versionid', null, PARAM_INT);
33
$makecurrent = optional_param('makecurrent', null, PARAM_INT);
34
$inactivate = optional_param('inactivate', null, PARAM_INT);
35
$delete = optional_param('delete', null, PARAM_INT);
36
$confirm = optional_param('confirm', false, PARAM_BOOL);
37
$moveup = optional_param('moveup', null, PARAM_INT);
38
$movedown = optional_param('movedown', null, PARAM_INT);
39
 
40
admin_externalpage_setup('tool_policy_managedocs', '', ['policyid' => $policyid, 'versionid' => $versionid],
41
    new moodle_url('/admin/tool/policy/editpolicydoc.php'));
42
require_capability('tool/policy:managedocs', context_system::instance());
43
 
44
$output = $PAGE->get_renderer('tool_policy');
45
$PAGE->navbar->add(get_string('editingpolicydocument', 'tool_policy'));
46
 
47
if ($makecurrent) {
48
    $version = api::get_policy_version($makecurrent);
49
 
50
    if ($confirm) {
51
        require_sesskey();
52
        api::make_current($makecurrent);
53
        redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
54
    }
55
 
56
    echo $output->header();
57
    echo $output->heading(get_string('activating', 'tool_policy'));
58
    echo $output->confirm(
59
        get_string('activateconfirm', 'tool_policy', [
60
            'name' => format_string($version->name),
61
            'revision' => format_string($version->revision),
62
        ]),
63
        new moodle_url($PAGE->url, ['makecurrent' => $makecurrent, 'confirm' => 1]),
64
        new moodle_url('/admin/tool/policy/managedocs.php')
65
    );
66
    echo $output->footer();
67
    die();
68
}
69
 
70
if ($inactivate) {
71
    $policies = api::list_policies([$inactivate]);
72
 
73
    if (empty($policies[0]->currentversionid)) {
74
        redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
75
    }
76
 
77
    if ($confirm) {
78
        require_sesskey();
79
        api::inactivate($inactivate);
80
        redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
81
    }
82
 
83
    echo $output->header();
84
    echo $output->heading(get_string('inactivating', 'tool_policy'));
85
    echo $output->confirm(
86
        get_string('inactivatingconfirm', 'tool_policy', [
87
            'name' => format_string($policies[0]->currentversion->name),
88
            'revision' => format_string($policies[0]->currentversion->revision),
89
        ]),
90
        new moodle_url($PAGE->url, ['inactivate' => $inactivate, 'confirm' => 1]),
91
        new moodle_url('/admin/tool/policy/managedocs.php')
92
    );
93
    echo $output->footer();
94
    die();
95
}
96
 
97
if ($delete) {
98
    $version = api::get_policy_version($delete);
99
 
100
    if ($confirm) {
101
        require_sesskey();
102
        api::delete($delete);
103
        redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
104
    }
105
 
106
    echo $output->header();
107
    echo $output->heading(get_string('deleting', 'tool_policy'));
108
    echo $output->confirm(
109
        get_string('deleteconfirm', 'tool_policy', [
110
            'name' => format_string($version->name),
111
            'revision' => format_string($version->revision),
112
        ]),
113
        new moodle_url($PAGE->url, ['delete' => $delete, 'confirm' => 1]),
114
        new moodle_url('/admin/tool/policy/managedocs.php')
115
    );
116
    echo $output->footer();
117
    die();
118
}
119
 
120
if ($moveup || $movedown) {
121
    require_sesskey();
122
 
123
    if ($moveup) {
124
        api::move_up($moveup);
125
    } else {
126
        api::move_down($movedown);
127
    }
128
 
129
    redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
130
}
131
 
132
if (!$versionid && $policyid) {
133
    if (($policies = api::list_policies([$policyid])) && !empty($policies[0]->currentversionid)) {
134
        $policy = $policies[0];
135
        $policyversion = new policy_version($policy->currentversionid);
136
    } else {
137
        redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
138
    }
139
} else {
140
    $policyversion = new policy_version($versionid);
141
    if ($policyversion->get('policyid')) {
142
        $policy = api::list_policies([$policyversion->get('policyid')])[0];
143
    } else {
144
        $policy = null;
145
    }
146
}
147
 
148
$formdata = api::form_policydoc_data($policyversion);
149
 
150
if ($policy && $formdata->id && $policy->currentversionid == $formdata->id) {
151
    // We are editing an active version.
152
    $formdata->status = policy_version::STATUS_ACTIVE;
153
} else {
154
    // We are editing a draft or archived version and the default next status is "draft".
155
    $formdata->status = policy_version::STATUS_DRAFT;
156
    // Archived versions can not be edited without creating a new version.
157
    $formdata->minorchange = $policyversion->get('archived') ? 0 : 1;
158
}
159
 
160
$form = new \tool_policy\form\policydoc($PAGE->url, ['formdata' => $formdata]);
161
 
162
if ($form->is_cancelled()) {
163
    redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
164
 
165
} else if ($data = $form->get_data()) {
166
 
167
    if (! $policyversion->get('id')) {
168
        $policyversion = api::form_policydoc_add($data);
169
 
170
    } else if (empty($data->minorchange)) {
171
        $data->policyid = $policyversion->get('policyid');
172
        $policyversion = api::form_policydoc_update_new($data);
173
 
174
    } else {
175
        $data->id = $policyversion->get('id');
176
        $policyversion = api::form_policydoc_update_overwrite($data);
177
    }
178
 
179
    if ($data->status == policy_version::STATUS_ACTIVE) {
180
        api::make_current($policyversion->get('id'));
181
    }
182
 
183
    redirect(new moodle_url('/admin/tool/policy/managedocs.php'));
184
 
185
} else {
186
    echo $output->header();
187
    echo $output->heading(get_string('editingpolicydocument', 'tool_policy'));
188
    echo $form->render();
189
    echo $output->footer();
190
}