function array_to_fields($fields, $prefix = '') { $form_html = ''; foreach ($fields as $name => $value) { if (!is_array($value)) { if (!empty($prefix)) { $name = $prefix . '[' . $name . ']'; } // generate the hidden field $form_html .= "<input type=\"hidden\" name=\"{$name}\" value=\"" . $value . "\" />\n"; } else { if (!empty($prefix)) { $subprefix = $prefix . '[' . $name . ']'; } else { $subprefix = $name; } $form_html .= array_to_fields($value, $subprefix); } } return $form_html; }
/** * this function returns an array of users who subsribe to a particular activitytype * including the notification method they are using to subscribe to it. * * @param int $activitytype the id of the activity type * @param array $userids an array of userids to filter by * @param array $userobjs an array of user objects to filterby * @param bool $adminonly whether to filter by admin flag * @param array $admininstitutions list of institution names to get admins for * @return array of users */ function activity_get_users($activitytype, $userids = null, $userobjs = null, $adminonly = false, $admininstitutions = array()) { $values = array($activitytype); $sql = ' SELECT u.id, u.username, u.firstname, u.lastname, u.preferredname, u.email, u.admin, u.staff, p.method, ap.value AS lang, apm.value AS maildisabled, aic.value AS mnethostwwwroot, h.appname AS mnethostapp FROM {usr} u LEFT JOIN {usr_activity_preference} p ON (p.usr = u.id AND p.activity = ?)' . (empty($admininstitutions) ? '' : ' LEFT OUTER JOIN {usr_institution} ui ON (u.id = ui.usr AND ui.institution IN (' . join(',', array_map('db_quote', $admininstitutions)) . '))') . ' LEFT OUTER JOIN {usr_account_preference} ap ON (ap.usr = u.id AND ap.field = \'lang\') LEFT OUTER JOIN {usr_account_preference} apm ON (apm.usr = u.id AND apm.field = \'maildisabled\') LEFT OUTER JOIN {auth_instance} ai ON (ai.id = u.authinstance AND ai.authname = \'xmlrpc\') LEFT OUTER JOIN {auth_instance_config} aic ON (aic.instance = ai.id AND aic.field = \'wwwroot\') LEFT OUTER JOIN {host} h ON aic.value = h.wwwroot WHERE u.deleted = 0'; if (!empty($userobjs) && is_array($userobjs)) { $sql .= ' AND u.id IN (' . implode(',', db_array_to_ph($userobjs)) . ')'; $values = array_merge($values, array_to_fields($userobjs)); } else { if (!empty($userids) && is_array($userids)) { $sql .= ' AND u.id IN (' . implode(',', db_array_to_ph($userids)) . ')'; $values = array_merge($values, $userids); } } if (!empty($admininstitutions)) { $sql .= ' GROUP BY u.id, u.username, u.firstname, u.lastname, u.preferredname, u.email, u.admin, u.staff, p.method, ap.value, apm.value, aic.value, h.appname HAVING (u.admin = 1 OR SUM(ui.admin) > 0)'; } else { if ($adminonly) { $sql .= ' AND u.admin = 1'; } } return get_records_sql_array($sql, $values); }
/** * this function returns an array of users who subsribe to a particular activitytype * including the notification method they are using to subscribe to it. * * @param int $activitytype the id of the activity type * @param array $userids an array of userids to filter by * @param array $userobjs an array of user objects to filterby * @param bool $adminonly whether to filter by admin flag * @param array $admininstitutions list of institution names to get admins for * @return array of users */ function activity_get_users($activitytype, $userids = null, $userobjs = null, $adminonly = false, $admininstitutions = array()) { $values = array($activitytype); $sql = ' SELECT u.id, u.username, u.firstname, u.lastname, u.preferredname, u.email, u.admin, u.staff, p.method, ap.value AS lang FROM {usr} u LEFT JOIN {usr_activity_preference} p ON (p.usr = u.id AND p.activity = ?)' . (empty($admininstitutions) ? '' : ' LEFT OUTER JOIN {usr_institution} ui ON (u.id = ui.usr AND ui.institution IN (' . join(',', array_map('db_quote', $admininstitutions)) . '))') . ' LEFT OUTER JOIN {usr_account_preference} ap ON (ap.usr = u.id AND ap.field = \'lang\') WHERE TRUE'; if (!empty($userobjs) && is_array($userobjs)) { $sql .= ' AND u.id IN (' . implode(',', db_array_to_ph($userobjs)) . ')'; $values = array_merge($values, array_to_fields($userobjs)); } else { if (!empty($userids) && is_array($userids)) { $sql .= ' AND u.id IN (' . implode(',', db_array_to_ph($userids)) . ')'; $values = array_merge($values, $userids); } } if (!empty($admininstitutions)) { $sql .= ' GROUP BY u.id, u.username, u.firstname, u.lastname, u.preferredname, u.email, u.admin, u.staff, p.method, ap.value HAVING (u.admin = 1 OR SUM(ui.admin) > 0)'; } else { if ($adminonly) { $sql .= ' AND u.admin = 1'; } } return get_records_sql_array($sql, $values); }