Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 23... Línea 23...
23
use context_system;
23
use context_system;
24
use core_collator;
24
use core_collator;
25
use core_component;
25
use core_component;
26
use core_reportbuilder\local\audiences\base;
26
use core_reportbuilder\local\audiences\base;
27
use core_reportbuilder\local\models\{audience as audience_model, schedule};
27
use core_reportbuilder\local\models\{audience as audience_model, schedule};
-
 
28
use invalid_parameter_exception;
Línea 28... Línea 29...
28
 
29
 
29
/**
30
/**
30
 * Class containing report audience helper methods
31
 * Class containing report audience helper methods
31
 *
32
 *
Línea 206... Línea 207...
206
 
207
 
207
        return [$where, $params];
208
        return [$where, $params];
Línea 208... Línea 209...
208
    }
209
    }
-
 
210
 
-
 
211
    /**
-
 
212
     * Return appropriate select clause and params for given audience
-
 
213
     *
-
 
214
     * @param audience_model $audience
-
 
215
     * @param string $userfieldsql
-
 
216
     * @return array [$select, $params]
-
 
217
     */
-
 
218
    public static function user_audience_single_sql(audience_model $audience, string $userfieldsql): array {
-
 
219
        $select = '';
-
 
220
        $params = [];
-
 
221
 
-
 
222
        if ($instance = base::instance(0, $audience->to_record())) {
-
 
223
            $innerusertablealias = database::generate_alias();
-
 
224
            [$join, $where, $params] = $instance->get_sql($innerusertablealias);
-
 
225
 
-
 
226
            $select = "{$userfieldsql} IN (
-
 
227
                SELECT {$innerusertablealias}.id
-
 
228
                  FROM {user} {$innerusertablealias}
-
 
229
                       {$join}
-
 
230
                 WHERE {$where}
-
 
231
            )";
-
 
232
        }
-
 
233
 
-
 
234
        return [$select, $params];
-
 
235
    }
209
 
236
 
210
    /**
237
    /**
211
     * Return appropriate list of where clauses and params for given audiences
238
     * Return appropriate list of select clauses and params for given audiences
212
     *
239
     *
213
     * @param audience_model[] $audiences
240
     * @param audience_model[] $audiences
214
     * @param string $usertablealias
241
     * @param string $usertablealias
215
     * @return array[] [$wheres, $params]
242
     * @return array[] [$selects, $params]
216
     */
243
     */
Línea 217... Línea 244...
217
    public static function user_audience_sql(array $audiences, string $usertablealias = 'u'): array {
244
    public static function user_audience_sql(array $audiences, string $usertablealias = 'u'): array {
218
        $wheres = $params = [];
-
 
219
 
-
 
220
        foreach ($audiences as $audience) {
245
        $selects = $params = [];
221
            if ($instance = base::instance(0, $audience->to_record())) {
-
 
222
                $instancetablealias = database::generate_alias();
-
 
223
                [$instancejoin, $instancewhere, $instanceparams] = $instance->get_sql($instancetablealias);
246
 
224
 
-
 
225
                $wheres[] = "{$usertablealias}.id IN (
-
 
226
                    SELECT {$instancetablealias}.id
247
        foreach ($audiences as $audience) {
227
                      FROM {user} {$instancetablealias}
-
 
228
                           {$instancejoin}
248
            [$instanceselect, $instanceparams] = self::user_audience_single_sql($audience, "{$usertablealias}.id");
229
                     WHERE {$instancewhere}
249
            if ($instanceselect !== '') {
230
                     )";
250
                $selects[] = $instanceselect;
Línea 231... Línea 251...
231
                $params += $instanceparams;
251
                $params += $instanceparams;
232
            }
252
            }
Línea 233... Línea 253...
233
        }
253
        }
234
 
254
 
235
        return [$wheres, $params];
255
        return [$selects, $params];
Línea 253... Línea 273...
253
 
273
 
254
        return array_unique($audienceids, SORT_NUMERIC);
274
        return array_unique($audienceids, SORT_NUMERIC);
Línea 255... Línea 275...
255
    }
275
    }
256
 
276
 
257
    /**
277
    /**
-
 
278
     * Delete given audience from report
-
 
279
     *
258
     * Returns the list of audiences types in the system.
280
     * @param int $reportid
-
 
281
     * @param int $audienceid
259
     *
282
     * @return bool
260
     * @return array
283
     * @throws invalid_parameter_exception
-
 
284
     */
261
     */
285
    public static function delete_report_audience(int $reportid, int $audienceid): bool {
-
 
286
        $audience = audience_model::get_record(['id' => $audienceid, 'reportid' => $reportid]);
-
 
287
        if ($audience === false) {
Línea 262... Línea -...
262
    private static function get_audience_types(): array {
-
 
263
        $sources = [];
288
            throw new invalid_parameter_exception('Invalid audience');
264
 
-
 
265
        $audiences = core_component::get_component_classes_in_namespace(null, 'reportbuilder\\audience');
289
        }
266
        foreach ($audiences as $class => $path) {
290
 
267
            $audienceclass = $class::instance();
291
        $instance = base::instance(0, $audience->to_record());
268
            if (is_subclass_of($class, base::class) && $audienceclass->user_can_add()) {
292
        if ($instance && $instance->user_can_edit()) {
269
                $componentname = $audienceclass->get_component_displayname();
293
            $persistent = $instance->get_persistent();
Línea 270... Línea 294...
270
                $sources[$componentname][$class] = $audienceclass->get_name();
294
            $persistent->delete();
271
            }
295
            return true;
Línea 272... Línea 296...
272
        }
296
        }
273
 
-
 
274
        return $sources;
-
 
275
    }
-
 
276
 
-
 
277
    /**
297
 
278
     * Get all the audiences types the current user can add to, organised by categories.
298
        return false;
279
     *
-
 
280
     * @return array
-
 
281
     *
299
    }
282
     * @deprecated since Moodle 4.1 - please do not use this function any more, {@see custom_report_audience_cards_exporter}
-
 
283
     */
-
 
284
    public static function get_all_audiences_menu_types(): array {
-
 
285
        debugging('The function ' . __FUNCTION__ . '() is deprecated, please do not use it any more. ' .
-
 
286
            'See \'custom_report_audience_cards_exporter\' class for replacement', DEBUG_DEVELOPER);
300
 
287
 
-
 
288
        $menucardsarray = [];
301
    /**
289
        $notavailablestr = get_string('notavailable', 'moodle');
-
 
290
 
-
 
291
        $audiencetypes = self::get_audience_types();
-
 
292
        $audiencetypeindex = 0;
-
 
293
        foreach ($audiencetypes as $categoryname => $audience) {
-
 
294
            $menucards = [
-
 
295
                'name' => $categoryname,
-
 
296
                'key' => 'index' . ++$audiencetypeindex,
-
 
297
            ];
-
 
298
 
-
 
299
            foreach ($audience as $classname => $name) {
-
 
300
                $class = $classname::instance();
-
 
301
                $title = $class->is_available() ? get_string('addaudience', 'core_reportbuilder', $class->get_name()) :
-
 
302
                    $notavailablestr;
-
 
303
                $menucard['title'] = $title;
-
 
304
                $menucard['name'] = $class->get_name();
-
 
305
                $menucard['disabled'] = !$class->is_available();
-
 
306
                $menucard['identifier'] = get_class($class);
-
 
307
                $menucard['action'] = 'add-audience';
-
 
308
                $menucards['items'][] = $menucard;
-
 
309
            }
-
 
310
 
-
 
311
            // Order audience types on each category alphabetically.
-
 
312
            core_collator::asort_array_of_arrays_by_key($menucards['items'], 'name');
-
 
313
            $menucards['items'] = array_values($menucards['items']);
-
 
314
 
302
     * @deprecated since Moodle 4.1 - please do not use this function any more, {@see custom_report_audience_cards_exporter}
315
            $menucardsarray[] = $menucards;
303
     */