Proyectos de Subversion Moodle

Rev

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

Rev 1 Rev 1441
Línea 210... Línea 210...
210
 
210
 
211
            // TODO MDL-31118 performance improvement - edit the function so we can pass an array instead userid
211
            // TODO MDL-31118 performance improvement - edit the function so we can pass an array instead userid
212
            // Check if the recipient can be messaged by the sender.
212
            // Check if the recipient can be messaged by the sender.
213
            if ($success && !\core_message\api::can_send_message($tousers[$message['touserid']]->id, $USER->id)) {
213
            if ($success && !\core_message\api::can_send_message($tousers[$message['touserid']]->id, $USER->id)) {
214
                $success = false;
214
                $success = false;
215
                $errormessage = get_string('usercantbemessaged', 'message', fullname(\core_user::get_user($message['touserid'])));
215
                $errormessage = get_string('usercantbemessaged', 'message');
Línea 216... Línea 216...
216
            }
216
            }
217
 
217
 
218
            // Now we can send the message (at least try).
218
            // Now we can send the message (at least try).
Línea 1067... Línea 1067...
1067
            'isdeleted' => new external_value(PARAM_BOOL, 'Is the user deleted?'),
1067
            'isdeleted' => new external_value(PARAM_BOOL, 'Is the user deleted?'),
1068
            'canmessageevenifblocked' => new external_value(PARAM_BOOL,
1068
            'canmessageevenifblocked' => new external_value(PARAM_BOOL,
1069
                'If the user can still message even if they get blocked'),
1069
                'If the user can still message even if they get blocked'),
1070
            'canmessage' => new external_value(PARAM_BOOL, 'If the user can be messaged'),
1070
            'canmessage' => new external_value(PARAM_BOOL, 'If the user can be messaged'),
1071
            'requirescontact' => new external_value(PARAM_BOOL, 'If the user requires to be contacts'),
1071
            'requirescontact' => new external_value(PARAM_BOOL, 'If the user requires to be contacts'),
-
 
1072
            'cancreatecontact' => new external_value(PARAM_BOOL, 'Is the user permitted to add a contact'),
1072
        ];
1073
        ];
Línea 1073... Línea 1074...
1073
 
1074
 
1074
        $result['contactrequests'] = new external_multiple_structure(
1075
        $result['contactrequests'] = new external_multiple_structure(
1075
            new external_single_structure(
1076
            new external_single_structure(
Línea 1331... Línea 1332...
1331
     *             when private conversations are requested.
1332
     *             when private conversations are requested.
1332
     * @return stdClass
1333
     * @return stdClass
1333
     * @throws \moodle_exception if the messaging feature is disabled on the site.
1334
     * @throws \moodle_exception if the messaging feature is disabled on the site.
1334
     * @since 3.2
1335
     * @since 3.2
1335
     */
1336
     */
1336
    public static function get_conversations($userid, $limitfrom = 0, $limitnum = 0, int $type = null, bool $favourites = null,
1337
    public static function get_conversations($userid, $limitfrom = 0, $limitnum = 0, ?int $type = null, ?bool $favourites = null,
1337
            bool $mergeself = false) {
1338
            bool $mergeself = false) {
1338
        global $CFG, $USER;
1339
        global $CFG, $USER;
Línea 1339... Línea 1340...
1339
 
1340
 
1340
        // All the standard BL checks.
1341
        // All the standard BL checks.
Línea 3026... Línea 3027...
3026
    /**
3027
    /**
3027
     * Returns a notification or message preference structure.
3028
     * Returns a notification or message preference structure.
3028
     *
3029
     *
3029
     * @return external_single_structure the structure
3030
     * @return external_single_structure the structure
3030
     * @since  Moodle 3.2
3031
     * @since  Moodle 3.2
3031
     * @todo Remove loggedin and loggedoff from processors structure on MDL-73284.
-
 
3032
     */
3032
     */
3033
    protected static function get_preferences_structure() {
3033
    protected static function get_preferences_structure() {
3034
        return new external_single_structure(
3034
        return new external_single_structure(
3035
            array(
3035
            array(
3036
                'userid' => new external_value(PARAM_INT, 'User id'),
3036
                'userid' => new external_value(PARAM_INT, 'User id'),
Línea 3063... Línea 3063...
3063
                                                    'name' => new external_value(PARAM_PLUGIN, 'Processor name'),
3063
                                                    'name' => new external_value(PARAM_PLUGIN, 'Processor name'),
3064
                                                    'locked' => new external_value(PARAM_BOOL, 'Is locked by admin?'),
3064
                                                    'locked' => new external_value(PARAM_BOOL, 'Is locked by admin?'),
3065
                                                    'lockedmessage' => new external_value(PARAM_TEXT,
3065
                                                    'lockedmessage' => new external_value(PARAM_TEXT,
3066
                                                        'Text to display if locked', VALUE_OPTIONAL),
3066
                                                        'Text to display if locked', VALUE_OPTIONAL),
3067
                                                    'userconfigured' => new external_value(PARAM_INT, 'Is configured?'),
3067
                                                    'userconfigured' => new external_value(PARAM_INT, 'Is configured?'),
3068
                                                    'loggedin' => new external_single_structure(
-
 
3069
                                                        array(
-
 
3070
                                                            'name' => new external_value(PARAM_NOTAGS, 'Name'),
-
 
3071
                                                            'displayname' => new external_value(PARAM_TEXT, 'Display name'),
-
 
3072
                                                            'checked' => new external_value(PARAM_BOOL, 'Is checked?'),
-
 
3073
                                                        ),
-
 
3074
                                                        'DEPRECATED ATTRIBUTE -
-
 
3075
                                                        Kept for backward compatibility, use enabled instead.',
-
 
3076
                                                    ),
-
 
3077
                                                    'loggedoff' => new external_single_structure(
-
 
3078
                                                        array(
-
 
3079
                                                            'name' => new external_value(PARAM_NOTAGS, 'Name'),
-
 
3080
                                                            'displayname' => new external_value(PARAM_TEXT, 'Display name'),
-
 
3081
                                                            'checked' => new external_value(PARAM_BOOL, 'Is checked?'),
-
 
3082
                                                        ),
-
 
3083
                                                        'DEPRECATED ATTRIBUTE -
-
 
3084
                                                        Kept for backward compatibility, use enabled instead.',
-
 
3085
                                                    ),
-
 
3086
                                                    'enabled' => new external_value(PARAM_BOOL, 'Is enabled?'),
3068
                                                    'enabled' => new external_value(PARAM_BOOL, 'Is enabled?'),
3087
                                                )
3069
                                                )
3088
                                            ),
3070
                                            ),
3089
                                            'Processors values for this notification'
3071
                                            'Processors values for this notification'
3090
                                        ),
3072
                                        ),
Línea 3393... Línea 3375...
3393
        int $referenceuserid,
3375
        int $referenceuserid,
3394
        array $userids,
3376
        array $userids,
3395
        bool $includecontactrequests = false,
3377
        bool $includecontactrequests = false,
3396
        bool $includeprivacyinfo = false
3378
        bool $includeprivacyinfo = false
3397
    ) {
3379
    ) {
3398
        global $CFG, $USER;
3380
        global $CFG, $USER, $DB;
Línea 3399... Línea 3381...
3399
 
3381
 
3400
        // All the business logic checks that really shouldn't be in here.
3382
        // All the business logic checks that really shouldn't be in here.
3401
        if (empty($CFG->messaging)) {
3383
        if (empty($CFG->messaging)) {
3402
            throw new moodle_exception('disabled', 'message');
3384
            throw new moodle_exception('disabled', 'message');
Línea 3413... Línea 3395...
3413
 
3395
 
3414
        if (($USER->id != $referenceuserid) && !has_capability('moodle/site:readallmessages', $systemcontext)) {
3396
        if (($USER->id != $referenceuserid) && !has_capability('moodle/site:readallmessages', $systemcontext)) {
3415
            throw new moodle_exception('You do not have permission to perform this action.');
3397
            throw new moodle_exception('You do not have permission to perform this action.');
Línea -... Línea 3398...
-
 
3398
        }
-
 
3399
 
-
 
3400
        // Return early if no userids are provided.
-
 
3401
        if (empty($params['userids'])) {
-
 
3402
            return [];
-
 
3403
        }
-
 
3404
 
-
 
3405
        // Filter the user IDs, removing the IDs of the users that the current user cannot view.
-
 
3406
        require_once($CFG->dirroot . '/user/lib.php');
-
 
3407
        $userfieldsapi = \core_user\fields::for_userpic()->including('username', 'deleted');
-
 
3408
        $userfields = $userfieldsapi->get_sql('', false, '', '', false)->selects;
-
 
3409
        $users = $DB->get_records_list('user', 'id', $userids, '', $userfields, 0, 100);
-
 
3410
        $filteredids = array_filter($params['userids'], function($userid) use ($users, $params) {
-
 
3411
            $targetuser = $users[$userid];
-
 
3412
            // Check if the user has the contact already.
-
 
3413
            $iscontact = \core_message\api::is_contact($params['referenceuserid'], $userid);
-
 
3414
            if ($iscontact) {
-
 
3415
                // User is a contact, so we can return the info for this user.
-
 
3416
                return true;
-
 
3417
            } else {
-
 
3418
                // User is not a contact, so we need to check if the user is allowed to see the profile or not.
-
 
3419
                return user_can_view_profile($targetuser);
-
 
3420
            }
-
 
3421
        });
-
 
3422
 
-
 
3423
        // Return early if no user IDs are left after filtering.
-
 
3424
        if (empty($filteredids)) {
-
 
3425
            return [];
3416
        }
3426
        }
3417
 
3427
 
3418
        return \core_message\helper::get_member_info(
3428
        return \core_message\helper::get_member_info(
3419
            $params['referenceuserid'],
3429
            $params['referenceuserid'],
3420
            $params['userids'],
3430
            $filteredids,
3421
            $params['includecontactrequests'],
3431
            $params['includecontactrequests'],
3422
            $params['includeprivacyinfo']
3432
            $params['includeprivacyinfo']