1 <?php
 2 /**
 3  * @package     Joomla.Platform
 4  * @subpackage  Form
 5  *
 6  * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 7  * @license     GNU General Public License version 2 or later; see LICENSE
 8  */
 9 
10 defined('JPATH_PLATFORM') or die;
11 
12 JFormHelper::loadFieldClass('list');
13 
14 /**
15  * Form Field class for the Joomla Platform.
16  * Provides a list of available database connections, optionally limiting to
17  * a given list.
18  *
19  * @see    JDatabaseDriver
20  * @since  11.3
21  */
22 class JFormFieldDatabaseConnection extends JFormFieldList
23 {
24     /**
25      * The form field type.
26      *
27      * @var    string
28      * @since  11.3
29      */
30     protected $type = 'DatabaseConnection';
31 
32     /**
33      * Method to get the list of database options.
34      *
35      * This method produces a drop down list of available databases supported
36      * by JDatabaseDriver classes that are also supported by the application.
37      *
38      * @return  array  The field option objects.
39      *
40      * @since   11.3
41      * @see     JDatabaseDriver::getConnectors()
42      */
43     protected function getOptions()
44     {
45         // This gets the connectors available in the platform and supported by the server.
46         $available = JDatabaseDriver::getConnectors();
47 
48         /**
49          * This gets the list of database types supported by the application.
50          * This should be entered in the form definition as a comma separated list.
51          * If no supported databases are listed, it is assumed all available databases
52          * are supported.
53          */
54         $supported = $this->element['supported'];
55 
56         if (!empty($supported))
57         {
58             $supported = explode(',', $supported);
59 
60             foreach ($supported as $support)
61             {
62                 if (in_array($support, $available))
63                 {
64                     $options[$support] = JText::_(ucfirst($support));
65                 }
66             }
67         }
68         else
69         {
70             foreach ($available as $support)
71             {
72                 $options[$support] = JText::_(ucfirst($support));
73             }
74         }
75 
76         // This will come into play if an application is installed that requires
77         // a database that is not available on the server.
78         if (empty($options))
79         {
80             $options[''] = JText::_('JNONE');
81         }
82 
83         return $options;
84     }
85 }
86