/** * This function populates default message preferences for all existing providers * when the new message processor is added. * * @param string $processorname The name of message processor plugin (e.g. 'email', 'jabber') * @throws invalid_parameter_exception if $processorname does not exist in the database */ function message_update_processors($processorname) { global $DB; // validate if our processor exists $processor = $DB->get_records('message_processors', array('name' => $processorname)); if (empty($processor)) { throw new invalid_parameter_exception(); } $providers = $DB->get_records_sql('SELECT DISTINCT component FROM {message_providers}'); $transaction = $DB->start_delegated_transaction(); foreach ($providers as $provider) { // load message providers from files $fileproviders = message_get_providers_from_file($provider->component); foreach ($fileproviders as $messagename => $fileprovider) { message_set_default_message_preference($provider->component, $messagename, $fileprovider, $processorname); } } $transaction->allow_commit(); }
/** * This code updates the message_providers table with the current set of providers * @param $component - examples: 'moodle', 'mod_forum', 'block_quiz_results' * @return boolean */ function message_update_providers($component='moodle') { global $DB; // load message providers from files $fileproviders = message_get_providers_from_file($component); // load message providers from the database $dbproviders = message_get_providers_from_db($component); foreach ($fileproviders as $messagename => $fileprovider) { if (!empty($dbproviders[$messagename])) { // Already exists in the database if ($dbproviders[$messagename]->capability == $fileprovider['capability']) { // Same, so ignore // exact same message provider already present in db, ignore this entry unset($dbproviders[$messagename]); continue; } else { // Update existing one $provider = new stdClass(); $provider->id = $dbproviders[$messagename]->id; $provider->capability = $fileprovider['capability']; $DB->update_record('message_providers', $provider); unset($dbproviders[$messagename]); continue; } } else { // New message provider, add it $provider = new stdClass(); $provider->name = $messagename; $provider->component = $component; $provider->capability = $fileprovider['capability']; $DB->insert_record('message_providers', $provider); } } foreach ($dbproviders as $dbprovider) { // Delete old ones $DB->delete_records('message_providers', array('id' => $dbprovider->id)); } return true; }