Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Returns a list of classes which implement MailSystemInterface.
- */
- function &mailsystem_get_classes() {
- $mailsystem_classes = &drupal_static(__FUNCTION__);
- if (!isset($mailsystem_classes) && $cache = cache_get('mailsystem_get_classes')) {
- $mailsystem_classes = $cache->data;
- }
- if (!isset($mailsystem_classes)) {
- $mailsystem_classes = array();
- // @todo Is there a better way to find all mail-related classes?
- $declared_classes = get_declared_classes();
- $all_classes = array_combine(
- $declared_classes,
- array_fill(0, count($declared_classes), 0)
- );
- $mail_classes = db_select('registry', 'registry')
- ->distinct()
- ->fields('registry', array('name', 'filename'))
- ->where("type=:type AND ( filename like :filename OR name like :name )",
- // Making the HUGE assumption that all classes which implement
- // MailSystemInterface have filenames containing '.mail.' or
- // classnames ending in 'MailSystem'.
- array(
- ':type' => 'class',
- ':name' => '%MailSystem',
- ':filename' => '%.mail.%',
- )
- )
- ->execute()
- ->fetchAllKeyed();
- foreach ($mail_classes as $classname => $classfile) {
- if ( file_exists($classfile)
- && drupal_autoload_class($classname)
- ) {
- $all_classes[$classname] = 1;
- }
- }
- foreach ($all_classes as $classname => $autoload) {
- if ( ($autoload || preg_match('/MailSystem/', $classname))
- && ($object = new $classname)
- && ($object instanceof MailSystemInterface)
- ) {
- $mailsystem_classes[$classname] = $classname;
- }
- elseif ($autoload) {
- // Clear classes that are no longer available.
- db_delete('registry')
- ->condition('name', $classname)
- ->execute();
- }
- }
- foreach (array_unique(mailsystem_get()) as $classname) {
- if (class_exists($classname)) {
- $mailsystem_classes[$classname] = $classname;
- }
- else {
- mailsystem_clear(array(mailsystem_default_id() => $classname));
- }
- }
- ksort($mailsystem_classes);
- cache_set('mailsystem_get_classes', $mailsystem_classes, 'cache', time() + 3600);
- }
- return $mailsystem_classes;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement