Drush: includes/drupal.inc Source File

  1. 7.x doxygen/html/includes_2drupal_8inc_source.html
  2. master doxygen/html/drupal_8inc_source.html
  3. master doxygen/html/includes_2drupal_8inc_source.html
Go to the documentation of this file.
1 <?php
2 
3 /**
4  * @file
5  * Utility functions related to Drupal.
6  */
7 
8 /**
9  * Loads the Drupal autoloader and returns the instance.
10  */
11 function drush_drupal_load_autoloader($drupal_root) {
12  static $autoloader = FALSE;
13  if (!$autoloader) {
14  $autoloader = require_once $drupal_root .'/core/vendor/autoload.php';
15  }
16  return $autoloader;
17 }
18 
19 /**
20  * Detects the version number of the current Drupal installation,
21  * if any. Returns FALSE if there is no current Drupal installation,
22  * or it is somehow broken.
23  *
24  * @return
25  * A string containing the version number of the current
26  * Drupal installation, if any. Otherwise, return FALSE.
27  */
28 function drush_drupal_version($drupal_root = NULL) {
29  static $version = FALSE;
30 
31  if (!$version) {
32  if (($drupal_root != NULL) || ($drupal_root = drush_get_context('DRUSH_DRUPAL_ROOT'))) {
33  // Try and find D8.
34  if (file_exists($drupal_root . '/core/vendor/autoload.php')) {
35  // Load the autoloader so we can access the class constants.
36  drush_drupal_load_autoloader($drupal_root);
37  // Drush depends on bootstrap being loaded at this point.
38  require_once $drupal_root .'/core/includes/bootstrap.inc';
39  if (defined('Drupal::VERSION')) {
40  $version = Drupal::VERSION;
41  }
42  }
43  else {
44  // D7 stores VERSION in bootstrap.inc.
45  // D6 and below does it in system.module.
46  $version_constant_paths = array('/includes/bootstrap.inc', '/modules/system/system.module');
47  foreach ($version_constant_paths as $path) {
48  if (file_exists($drupal_root . $path)) {
49  require_once $drupal_root . $path;
50  if (defined('VERSION')) {
51  $version = VERSION;
52  break;
53  }
54  }
55  }
56  }
57  }
58  }
59  return $version;
60 }
61 
63  if (drush_drupal_major_version() >= 8) {
64  drush_invoke_process('@self', 'cache-rebuild');
65  }
66  else {
67  // $prior = drush_get_context('DRUSH_AFFIRMATIVE');
68  // drush_set_context('DRUSH_AFFIRMATIVE', TRUE);
69  drush_invoke_process('@self', 'cache-clear', array('all'));
70  // drush_set_context('DRUSH_AFFIRMATIVE', $prior);
71  }
72 }
73 
74 /**
75  * Returns the Drupal major version number (6, 7, 8 ...)
76  */
77 function drush_drupal_major_version($drupal_root = NULL) {
78  $major_version = FALSE;
79  if ($version = drush_drupal_version($drupal_root)) {
80  $version_parts = explode('.', $version);
81  if (is_numeric($version_parts[0])) {
82  $major_version = (integer)$version_parts[0];
83  }
84  }
85  return $major_version;
86 }
87 
88 /**
89  * Log Drupal watchdog() calls.
90  *
91  * A sneaky implementation of hook_watchdog().
92  */
93 function system_watchdog($log_entry) {
94  // Transform non informative severity levels to 'error' for compatibility with _drush_print_log.
95  // Other severity levels are coincident with the ones we use in drush.
96  if (drush_drupal_major_version() >= 6 && $log_entry['severity'] <= 2) {
97  $severity = 'error';
98  }
99  else {
100  drush_include_engine('drupal', 'environment');
101  $levels = drush_watchdog_severity_levels();
102  $severity = $levels[$log_entry['severity']];
103  }
104  // Format the message.
105  if (is_array($log_entry['variables'])) {
106  $message = strtr($log_entry['message'], $log_entry['variables']);
107  }
108  else {
109  $message = $log_entry['message'];
110  }
111 
112  // decode_entities() only loaded after FULL bootstrap.
113  if (function_exists('decode_entities')) {
114  $message = decode_entities($message);
115  }
116  $message = strip_tags($message);
117 
118  // Log or print or ignore. Just printing saves memory but thats rarely needed.
119  switch (drush_get_option('watchdog', 'log')) {
120  case 'log':
121  drush_log('WD '. $log_entry['type'] . ': ' . $message, $severity);
122  break;
123  case 'print':
124  // Disable in backend mode since it logs output and the goal is to conserve memory.
125  // @see _drush_bootstrap_drush().
126  if (ob_get_length() === FALSE) {
127  drush_print('WD '. $severity . ' ' . $log_entry['type'] . ': ' . $message);
128  }
129  break;
130  default:
131  // Do nothing.
132  }
133 }
134 
135 /**
136  * Log the return value of Drupal hook_update_n functions.
137  *
138  * This is used during install and update to log the output
139  * of the update process to the logging system.
140  */
141 function _drush_log_update_sql($ret) {
142  if (count($ret)) {
143  foreach ($ret as $info) {
144  if (is_array($info)) {
145  if (!$info['success']) {
146  drush_set_error('DRUPAL_UPDATE_FAILED', $info['query']);
147  }
148  else {
149  drush_log($info['query'], ($info['success']) ? 'success' : 'error');
150  }
151  }
152  }
153  }
154 }
155 
156 function drush_find_profiles($drupal_root , $key = 'name') {
157  return drush_scan_directory($drupal_root . '/profiles', "/.*\.profile$/", array('.', '..', 'CVS', 'tests'), 0, 2, $key);
158 }
159 
160 /**
161  * Parse Drupal info file format.
162  *
163  * Copied with modifications from includes/common.inc.
164  *
165  * @see drupal_parse_info_file
166  */
167 function drush_drupal_parse_info_file($filename) {
168  if (!file_exists($filename)) {
169  return array();
170  }
171 
172  $data = file_get_contents($filename);
173  return _drush_drupal_parse_info_file($data);
174 }
175 
176 /**
177  * Parse the info file.
178  */
179 function _drush_drupal_parse_info_file($data, $merge_item = NULL) {
180  if (!$data) {
181  return FALSE;
182  }
183 
184  if (preg_match_all('
185  @^\s* # Start at the beginning of a line, ignoring leading whitespace
186  ((?:
187  [^=;\[\]]| # Key names cannot contain equal signs, semi-colons or square brackets,
188  \[[^\[\]]*\] # unless they are balanced and not nested
189  )+?)
190  \s*=\s* # Key/value pairs are separated by equal signs (ignoring white-space)
191  (?:
192  ("(?:[^"]|(?<=\\\\)")*")| # Double-quoted string, which may contain slash-escaped quotes/slashes
193  (\'(?:[^\']|(?<=\\\\)\')*\')| # Single-quoted string, which may contain slash-escaped quotes/slashes
194  ([^\r\n]*?) # Non-quoted string
195  )\s*$ # Stop at the next end of a line, ignoring trailing whitespace
196  @msx', $data, $matches, PREG_SET_ORDER)) {
197  $info = array();
198  foreach ($matches as $match) {
199  // Fetch the key and value string.
200  $i = 0;
201  foreach (array('key', 'value1', 'value2', 'value3') as $var) {
202  $$var = isset($match[++$i]) ? $match[$i] : '';
203  }
204  $value = stripslashes(substr($value1, 1, -1)) . stripslashes(substr($value2, 1, -1)) . $value3;
205 
206  // Parse array syntax.
207  $keys = preg_split('/\]?\[/', rtrim($key, ']'));
208  $last = array_pop($keys);
209  $parent = &$info;
210 
211  // Create nested arrays.
212  foreach ($keys as $key) {
213  if ($key == '') {
214  $key = count($parent);
215  }
216  if (isset($merge_item) && isset($parent[$key]) && !is_array($parent[$key])) {
217  $parent[$key] = array($merge_item => $parent[$key]);
218  }
219  if (!isset($parent[$key]) || !is_array($parent[$key])) {
220  $parent[$key] = array();
221  }
222  $parent = &$parent[$key];
223  }
224 
225  // Handle PHP constants.
226  if (defined($value)) {
227  $value = constant($value);
228  }
229 
230  // Insert actual value.
231  if ($last == '') {
232  $last = count($parent);
233  }
234  if (isset($merge_item) && isset($parent[$last]) && is_array($parent[$last])) {
235  $parent[$last][$merge_item] = $value;
236  }
237  else {
238  $parent[$last] = $value;
239  }
240  }
241  return $info;
242  }
243  return FALSE;
244 }
245 
246 /**
247  * Build a cache id to store the install_profile for a given site.
248  */
250  return drush_get_cid('install_profile', array(), array(drush_get_context('DRUSH_SELECTED_DRUPAL_SITE_CONF_PATH')));
251 }
252 

File

doxygen/html/includes_2drupal_8inc_source.html
View source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Drush: includes/drupal.inc Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Drush
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_09e761304027c904456130627fd4dcf5.html">includes</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">drupal.inc</div>  </div>
</div><!--header-->
<div class="contents">
<a href="includes_2drupal_8inc.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;&lt;?php</div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * @file</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Utility functions related to Drupal.</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * Loads the Drupal autoloader and returns the instance.</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#aa7ac001ed15d678fa533b54d962eb5bc">   11</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#aa7ac001ed15d678fa533b54d962eb5bc">drush_drupal_load_autoloader</a>($drupal_root) {</div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;  <span class="keyword">static</span> $autoloader = FALSE;</div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;  <span class="keywordflow">if</span> (!$autoloader) {</div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    $autoloader = require_once $drupal_root .<span class="stringliteral">&#39;/core/vendor/autoload.php&#39;</span>;</div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;  }</div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;  <span class="keywordflow">return</span> $autoloader;</div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;}</div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * Detects the version number of the current Drupal installation,</span></div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * if any. Returns FALSE if there is no current Drupal installation,</span></div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * or it is somehow broken.</span></div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * @return</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> *   A string containing the version number of the current</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *   Drupal installation, if any. Otherwise, return FALSE.</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#a203e989fd043d054d774954e2b2dff21">   28</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#a203e989fd043d054d774954e2b2dff21">drush_drupal_version</a>($drupal_root = NULL) {</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="keyword">static</span> $version = FALSE;</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="keywordflow">if</span> (!$version) {</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <span class="keywordflow">if</span> (($drupal_root != NULL) || ($drupal_root = <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_DRUPAL_ROOT&#39;</span>))) {</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;      <span class="comment">// Try and find D8.</span></div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;      <span class="keywordflow">if</span> (file_exists($drupal_root . <span class="stringliteral">&#39;/core/vendor/autoload.php&#39;</span>)) {</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        <span class="comment">// Load the autoloader so we can access the class constants.</span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <a class="code" href="includes_2drupal_8inc.html#aa7ac001ed15d678fa533b54d962eb5bc">drush_drupal_load_autoloader</a>($drupal_root);</div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        <span class="comment">// Drush depends on bootstrap being loaded at this point.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        require_once $drupal_root .<span class="stringliteral">&#39;/core/includes/bootstrap.inc&#39;</span>;</div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">if</span> (defined(<span class="stringliteral">&#39;Drupal::VERSION&#39;</span>)) {</div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;          $version = Drupal::VERSION;</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        }</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;      }</div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;        <span class="comment">// D7 stores VERSION in bootstrap.inc.</span></div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="comment">// D6 and below does it in system.module.</span></div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        $version_constant_paths = array(<span class="stringliteral">&#39;/includes/bootstrap.inc&#39;</span>, <span class="stringliteral">&#39;/modules/system/system.module&#39;</span>);</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        <span class="keywordflow">foreach</span> ($version_constant_paths as $path) {</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;          <span class="keywordflow">if</span> (file_exists($drupal_root . $path)) {</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;            require_once $drupal_root . $path;</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;            <span class="keywordflow">if</span> (defined(<span class="stringliteral">&#39;VERSION&#39;</span>)) {</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;              $version = VERSION;</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;              <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;            }</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;          }</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        }</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      }</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    }</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  }</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <span class="keywordflow">return</span> $version;</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;}</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keyword">function</span> drush_drupal_cache_clear_all() {</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="includes_2drupal_8inc.html#ad2ccab77d4bc8e7355186f26cd328ac0">drush_drupal_major_version</a>() &gt;= 8) {</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <a class="code" href="group__dispatching.html#ga125471885af052278a0874446b332cf9">drush_invoke_process</a>(<span class="stringliteral">&#39;@self&#39;</span>, <span class="stringliteral">&#39;cache-rebuild&#39;</span>);</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  }</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="comment">// $prior = drush_get_context(&#39;DRUSH_AFFIRMATIVE&#39;);</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="comment">// drush_set_context(&#39;DRUSH_AFFIRMATIVE&#39;, TRUE);</span></div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <a class="code" href="group__dispatching.html#ga125471885af052278a0874446b332cf9">drush_invoke_process</a>(<span class="stringliteral">&#39;@self&#39;</span>, <span class="stringliteral">&#39;cache-clear&#39;</span>, array(<span class="stringliteral">&#39;all&#39;</span>));</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="comment">// drush_set_context(&#39;DRUSH_AFFIRMATIVE&#39;, $prior);</span></div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  }</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;}</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment"> * Returns the Drupal major version number (6, 7, 8 ...)</span></div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#ad2ccab77d4bc8e7355186f26cd328ac0">   77</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#ad2ccab77d4bc8e7355186f26cd328ac0">drush_drupal_major_version</a>($drupal_root = NULL) {</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  $major_version = FALSE;</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keywordflow">if</span> ($version = <a class="code" href="includes_2drupal_8inc.html#a203e989fd043d054d774954e2b2dff21">drush_drupal_version</a>($drupal_root)) {</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    $version_parts = explode(<span class="charliteral">&#39;.&#39;</span>, $version);</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">if</span> (is_numeric($version_parts[0])) {</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      $major_version = (integer)$version_parts[0];</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  }</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordflow">return</span> $major_version;</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment"> * Log Drupal watchdog() calls.</span></div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment"> * A sneaky implementation of hook_watchdog().</span></div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#ac194fb53f4e5500f275a2debb0dfc608">   93</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#ac194fb53f4e5500f275a2debb0dfc608">system_watchdog</a>($log_entry) {</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <span class="comment">// Transform non informative severity levels to &#39;error&#39; for compatibility with _drush_print_log.</span></div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="comment">// Other severity levels are coincident with the ones we use in drush.</span></div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="includes_2drupal_8inc.html#ad2ccab77d4bc8e7355186f26cd328ac0">drush_drupal_major_version</a>() &gt;= 6 &amp;&amp; $log_entry[<span class="stringliteral">&#39;severity&#39;</span>] &lt;= 2) {</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    $severity = <span class="stringliteral">&#39;error&#39;</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  }</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <a class="code" href="engines_8inc.html#a91df31f18b0a1d05540ccaf85e6d9a88">drush_include_engine</a>(<span class="stringliteral">&#39;drupal&#39;</span>, <span class="stringliteral">&#39;environment&#39;</span>);</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    $levels = <a class="code" href="commands_2core_2drupal_2environment_8inc.html#ae44a69423e59e63b8acd6dadc602081d">drush_watchdog_severity_levels</a>();</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    $severity = $levels[$log_entry[<span class="stringliteral">&#39;severity&#39;</span>]];</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  }</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="comment">// Format the message.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="keywordflow">if</span> (is_array($log_entry[<span class="stringliteral">&#39;variables&#39;</span>])) {</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    $message = strtr($log_entry[<span class="stringliteral">&#39;message&#39;</span>], $log_entry[<span class="stringliteral">&#39;variables&#39;</span>]);</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  }</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    $message = $log_entry[<span class="stringliteral">&#39;message&#39;</span>];</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  }</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="comment">// decode_entities() only loaded after FULL bootstrap.</span></div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keywordflow">if</span> (function_exists(<span class="stringliteral">&#39;decode_entities&#39;</span>)) {</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    $message = decode_entities($message);</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  }</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  $message = strip_tags($message);</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="comment">// Log or print or ignore. Just printing saves memory but thats rarely needed.</span></div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordflow">switch</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;watchdog&#39;</span>, <span class="stringliteral">&#39;log&#39;</span>)) {</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;log&#39;</span>:</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>(<span class="stringliteral">&#39;WD &#39;</span>. $log_entry[<span class="stringliteral">&#39;type&#39;</span>] . <span class="stringliteral">&#39;: &#39;</span> . $message, $severity);</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keywordflow">case</span> <span class="stringliteral">&#39;print&#39;</span>:</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;      <span class="comment">// Disable in backend mode since it logs output and the goal is to conserve memory.</span></div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      <span class="comment">// @see _drush_bootstrap_drush().</span></div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;      <span class="keywordflow">if</span> (ob_get_length() === FALSE) {</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<span class="stringliteral">&#39;WD &#39;</span>. $severity . <span class="charliteral">&#39; &#39;</span> . $log_entry[<span class="stringliteral">&#39;type&#39;</span>] . <span class="stringliteral">&#39;: &#39;</span> . $message);</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;      }</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;      <span class="comment">// Do nothing.</span></div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  }</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;}</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment"> * Log the return value of Drupal hook_update_n functions.</span></div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment"> * This is used during install and update to log the output</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment"> * of the update process to the logging system.</span></div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#abc6906957148e12e75f22aec44c45ec9">  141</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#abc6906957148e12e75f22aec44c45ec9">_drush_log_update_sql</a>($ret) {</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keywordflow">if</span> (count($ret)) {</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keywordflow">foreach</span> ($ret as $info) {</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      <span class="keywordflow">if</span> (is_array($info)) {</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        <span class="keywordflow">if</span> (!$info[<span class="stringliteral">&#39;success&#39;</span>]) {</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;          <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;DRUPAL_UPDATE_FAILED&#39;</span>, $info[<span class="stringliteral">&#39;query&#39;</span>]);</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        }</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;          <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>($info[<span class="stringliteral">&#39;query&#39;</span>], ($info[<span class="stringliteral">&#39;success&#39;</span>]) ? <span class="stringliteral">&#39;success&#39;</span> : <span class="stringliteral">&#39;error&#39;</span>);</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        }</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;      }</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    }</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  }</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;}</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="keyword">function</span> drush_find_profiles($drupal_root , $key = <span class="stringliteral">&#39;name&#39;</span>) {</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="group__filesystemfunctions.html#ga1c545390a8890f6ea47385f79fbe2e82">drush_scan_directory</a>($drupal_root . <span class="stringliteral">&#39;/profiles&#39;</span>, <span class="stringliteral">&quot;/.*\.profile$/&quot;</span>, array(<span class="charliteral">&#39;.&#39;</span>, <span class="stringliteral">&#39;..&#39;</span>, <span class="stringliteral">&#39;CVS&#39;</span>, <span class="stringliteral">&#39;tests&#39;</span>), 0, 2, $key);</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;}</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment"> * Parse Drupal info file format.</span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment"> * Copied with modifications from includes/common.inc.</span></div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment"> * @see drupal_parse_info_file</span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#ad1b1feb800eb96bd22b0e9179ef79c86">  167</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#ad1b1feb800eb96bd22b0e9179ef79c86">drush_drupal_parse_info_file</a>($filename) {</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordflow">if</span> (!file_exists($filename)) {</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">return</span> array();</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  }</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  $data = file_get_contents($filename);</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="includes_2drupal_8inc.html#a47c8064fb8f359786a3bddaf55cd9953">_drush_drupal_parse_info_file</a>($data);</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;}</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="comment"> * Parse the info file.</span></div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#a47c8064fb8f359786a3bddaf55cd9953">  179</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#a47c8064fb8f359786a3bddaf55cd9953">_drush_drupal_parse_info_file</a>($data, $merge_item = NULL) {</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  <span class="keywordflow">if</span> (!$data) {</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  }</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="keywordflow">if</span> (preg_match_all(<span class="stringliteral">&#39;</span></div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="stringliteral">    @^\s*                           # Start at the beginning of a line, ignoring leading whitespace</span></div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;<span class="stringliteral">    ((?:</span></div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="stringliteral">      [^=;\[\]]|                    # Key names cannot contain equal signs, semi-colons or square brackets,</span></div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="stringliteral">      \[[^\[\]]*\]                  # unless they are balanced and not nested</span></div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="stringliteral">    )+?)</span></div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="stringliteral">    \s*=\s*                         # Key/value pairs are separated by equal signs (ignoring white-space)</span></div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="stringliteral">    (?:</span></div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="stringliteral">      (&quot;(?:[^&quot;]|(?&lt;=\\\\)&quot;)*&quot;)|     # Double-quoted string, which may contain slash-escaped quotes/slashes</span></div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="stringliteral">      (\&#39;(?:[^\&#39;]|(?&lt;=\\\\)\&#39;)*\&#39;)| # Single-quoted string, which may contain slash-escaped quotes/slashes</span></div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="stringliteral">      ([^\r\n]*?)                   # Non-quoted string</span></div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="stringliteral">    )\s*$                           # Stop at the next end of a line, ignoring trailing whitespace</span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="stringliteral">    @msx&#39;</span>, $data, $matches, PREG_SET_ORDER)) {</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    $info = array();</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">foreach</span> ($matches as $match) {</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      <span class="comment">// Fetch the key and value string.</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;      $i = 0;</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;      <span class="keywordflow">foreach</span> (array(<span class="stringliteral">&#39;key&#39;</span>, <span class="stringliteral">&#39;value1&#39;</span>, <span class="stringliteral">&#39;value2&#39;</span>, <span class="stringliteral">&#39;value3&#39;</span>) as $var) {</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        $$var = isset($match[++$i]) ? $match[$i] : <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;      }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      $value = stripslashes(substr($value1, 1, -1)) . stripslashes(substr($value2, 1, -1)) . $value3;</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;      <span class="comment">// Parse array syntax.</span></div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;      $keys = preg_split(<span class="stringliteral">&#39;/\]?\[/&#39;</span>, rtrim($key, <span class="charliteral">&#39;]&#39;</span>));</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;      $last = array_pop($keys);</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      $parent = &amp;$info;</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;      <span class="comment">// Create nested arrays.</span></div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;      <span class="keywordflow">foreach</span> ($keys as $key) {</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        <span class="keywordflow">if</span> ($key == <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;          $key = count($parent);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        }</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">if</span> (isset($merge_item) &amp;&amp; isset($parent[$key]) &amp;&amp; !is_array($parent[$key])) {</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;          $parent[$key] = array($merge_item =&gt; $parent[$key]);</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        }</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordflow">if</span> (!isset($parent[$key]) || !is_array($parent[$key])) {</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;          $parent[$key] = array();</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        }</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        $parent = &amp;$parent[$key];</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      }</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;      <span class="comment">// Handle PHP constants.</span></div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="keywordflow">if</span> (defined($value)) {</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        $value = constant($value);</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;      }</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;      <span class="comment">// Insert actual value.</span></div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;      <span class="keywordflow">if</span> ($last == <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        $last = count($parent);</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;      }</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;      <span class="keywordflow">if</span> (isset($merge_item) &amp;&amp; isset($parent[$last]) &amp;&amp; is_array($parent[$last])) {</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        $parent[$last][$merge_item] = $value;</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;      }</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        $parent[$last] = $value;</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      }</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    }</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <span class="keywordflow">return</span> $info;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  <span class="keywordflow">return</span> FALSE;</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;}</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment"> * Build a cache id to store the install_profile for a given site.</span></div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="code" href="includes_2drupal_8inc.html#a6def9b165115bf72a27e13f4949149da">  249</a></span>&#160;<span class="keyword">function</span> <a class="code" href="includes_2drupal_8inc.html#a6def9b165115bf72a27e13f4949149da">drush_cid_install_profile</a>() {</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="includes_2cache_8inc.html#a70613777c5e1a0e258bd0d8e213e0156">drush_get_cid</a>(<span class="stringliteral">&#39;install_profile&#39;</span>, array(), array(<a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_SELECTED_DRUPAL_SITE_CONF_PATH&#39;</span>)));</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;}</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Oct 8 2014 09:04:54 for Drush by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>