1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
|
3 |
|
|
/**
|
4 |
|
|
* @file
|
5 |
|
|
* Display Suite drush integration.
|
6 |
|
|
*/
|
7 |
|
|
|
8 |
|
|
/**
|
9 |
|
|
* Implements hook_drush_command().
|
10 |
|
|
*/
|
11 |
|
|
function ds_drush_command() {
|
12 |
|
|
$items = array();
|
13 |
|
|
|
14 |
|
|
$items['ds-build'] = array(
|
15 |
|
|
'description' => 'Create a basic template and configuration file for a new Display Suite layout.',
|
16 |
|
|
'arguments' => array(
|
17 |
|
|
'name' => 'Name for your layout.',
|
18 |
|
|
),
|
19 |
|
|
'options' => array(
|
20 |
|
|
'name' => 'Name for your layout.',
|
21 |
|
|
'regions' => 'Regions for your layout, comma-separated.',
|
22 |
|
|
'css' => 'Set this to true if you want to include a CSS file for your layout.',
|
23 |
|
|
'image' => 'Set this to true if you want to include a preview image for your layout.',
|
24 |
|
|
),
|
25 |
|
|
'examples' => array(
|
26 |
|
|
'drush ds-build "My layout name"' => 'Create a layout with a few example regions.',
|
27 |
|
|
'drush ds-build "My layout name" --regions="Region 1, Region 2"' => 'Create a layout with custom regions.',
|
28 |
|
|
'drush ds-build "My layout name" --css' => 'Create a layout with an included CSS file.',
|
29 |
|
|
),
|
30 |
|
|
);
|
31 |
|
|
|
32 |
|
|
return $items;
|
33 |
|
|
}
|
34 |
|
|
|
35 |
|
|
/**
|
36 |
|
|
* Create a basic template and configuration file for a new Display Suite layout.
|
37 |
|
|
*/
|
38 |
|
|
function drush_ds_build($name = NULL) {
|
39 |
|
|
// Determine the layout name.
|
40 |
|
|
if (!isset($name)) {
|
41 |
|
|
$name = drush_get_option('name');
|
42 |
|
|
}
|
43 |
|
|
if (!$name) {
|
44 |
|
|
drush_die(dt('You need to set a name for your layout. Type "drush help ds-build" for help.'));
|
45 |
|
|
}
|
46 |
|
|
|
47 |
|
|
// Determine the machine name.
|
48 |
|
|
$machine_name = ds_prepare_machine_name($name);
|
49 |
|
|
|
50 |
|
|
// Determine the path to our example layout templates.
|
51 |
|
|
$ds_layout_path = dirname(__FILE__) . '/example_layout';
|
52 |
|
|
|
53 |
|
|
// We create files in the current working directory.
|
54 |
|
|
$layout_path = drush_cwd() . '/' . $machine_name;
|
55 |
|
|
drush_op('mkdir', $layout_path);
|
56 |
|
|
|
57 |
|
|
// Determine regions.
|
58 |
|
|
$regions = drush_get_option('regions');
|
59 |
|
|
if ($regions) {
|
60 |
|
|
$regions = preg_split('/,(\ )?/', $regions);
|
61 |
|
|
}
|
62 |
|
|
|
63 |
|
|
// Copy the example templates.
|
64 |
|
|
$tpl_machine_name = strtr($machine_name, '_', '-');
|
65 |
|
|
drush_op('copy', $ds_layout_path . '/example-layout.tpl.php', $layout_path . "/$tpl_machine_name.tpl.php");
|
66 |
|
|
drush_op('copy', $ds_layout_path . '/example_layout.inc', $layout_path . "/$machine_name.inc");
|
67 |
|
|
|
68 |
|
|
// Prepare an array of things that need to be rewritten in our templates.
|
69 |
|
|
$find = array();
|
70 |
|
|
$replace = array();
|
71 |
|
|
|
72 |
|
|
// Replace example name.
|
73 |
|
|
$find[] = '/example layout/i';
|
74 |
|
|
$replace[] = $name;
|
75 |
|
|
$find[] = '/example_layout/';
|
76 |
|
|
$replace[] = $machine_name;
|
77 |
|
|
|
78 |
|
|
// Include a CSS file for this layout.
|
79 |
|
|
$css = drush_get_option('css');
|
80 |
|
|
if (isset($css)) {
|
81 |
|
|
drush_op('copy', $ds_layout_path . '/example_layout.css', $layout_path . "/$machine_name.css");
|
82 |
|
|
|
83 |
|
|
// Replace example styling if we have custom regions.
|
84 |
|
|
if ($regions) {
|
85 |
|
|
// Separate variables so this won't mess up our other templates.
|
86 |
|
|
$css_find = $find;
|
87 |
|
|
$css_replace = $replace;
|
88 |
|
|
|
89 |
|
|
$css_find[] = "/(\*\/\n\n).+(\n)$/s";
|
90 |
|
|
$css_replace[] = '$1' . ds_prepare_regions_css($regions) . '$2';
|
91 |
|
|
|
92 |
|
|
drush_op('ds_file_preg_replace', array($layout_path . "/$machine_name.css"), $css_find, $css_replace);
|
93 |
|
|
}
|
94 |
|
|
|
95 |
|
|
// Uncomment the CSS rule in our configuration.
|
96 |
|
|
$find[] = "/\/\/ ('css' => TRUE,)/";
|
97 |
|
|
$replace[] = '$1';
|
98 |
|
|
}
|
99 |
|
|
|
100 |
|
|
// Check on form option.
|
101 |
|
|
$image = drush_get_option('image');
|
102 |
|
|
if (isset($image)) {
|
103 |
|
|
// Uncomment the Form rule in our configuration.
|
104 |
|
|
$find[] = "/\/\/ ('image' => TRUE,)/";
|
105 |
|
|
$replace[] = '$1';
|
106 |
|
|
}
|
107 |
|
|
|
108 |
|
|
// Replace example region PHP/HTML code.
|
109 |
|
|
if ($regions) {
|
110 |
|
|
$find[] = '/ <!-- regions -->.+<!-- \/regions -->/s';
|
111 |
|
|
$replace[] = ds_prepare_regions_html($regions);
|
112 |
|
|
$find[] = "/( \* Regions:\n).+(\n \*\/)/s";
|
113 |
|
|
$replace[] = '$1' . ds_prepare_regions_variable_documentation($regions) . '$2';
|
114 |
|
|
$find[] = "/( 'regions' => array\(\n).+(\n \),)/s";
|
115 |
|
|
$replace[] = '$1' . ds_prepare_regions_configuration($regions) . '$2';
|
116 |
|
|
}
|
117 |
|
|
|
118 |
|
|
// Rewrite templates.
|
119 |
|
|
drush_op('ds_file_preg_replace', array($layout_path . "/$tpl_machine_name.tpl.php", $layout_path . "/$machine_name.inc"), $find, $replace);
|
120 |
|
|
|
121 |
|
|
// Notify user of the newly created templates.
|
122 |
|
|
drush_print(dt('Templates for "!name" created in: !path', array('!name' => $name, '!path' => $layout_path)));
|
123 |
|
|
}
|
124 |
|
|
|
125 |
|
|
/**
|
126 |
|
|
* Prepare a string for use as a valid machine name.
|
127 |
|
|
*/
|
128 |
|
|
function ds_prepare_machine_name($string) {
|
129 |
|
|
$machine_name = str_replace(' ', '_', drupal_strtolower($string));
|
130 |
|
|
// Remove characters not valid in function names.
|
131 |
|
|
$machine_name = preg_replace('/[^a-z0-9_]/', '', $machine_name);
|
132 |
|
|
|
133 |
|
|
return $machine_name;
|
134 |
|
|
}
|
135 |
|
|
|
136 |
|
|
/**
|
137 |
|
|
* Perform preg_replace() on the contents of an array of files.
|
138 |
|
|
*/
|
139 |
|
|
function ds_file_preg_replace($file_paths, $find, $replace) {
|
140 |
|
|
foreach ($file_paths as $path) {
|
141 |
|
|
$file_contents = file_get_contents($path);
|
142 |
|
|
$file_contents = preg_replace($find, $replace, $file_contents);
|
143 |
|
|
file_put_contents($path, $file_contents);
|
144 |
|
|
}
|
145 |
|
|
}
|
146 |
|
|
|
147 |
|
|
/**
|
148 |
|
|
* Prepare HTML structure for an array of regions.
|
149 |
|
|
*/
|
150 |
|
|
function ds_prepare_regions_html($region_names) {
|
151 |
|
|
$output = array();
|
152 |
|
|
|
153 |
|
|
foreach ($region_names as $name) {
|
154 |
|
|
$machine_name = ds_prepare_machine_name($name);
|
155 |
|
|
$html_class = drupal_html_class($name);
|
156 |
|
|
|
157 |
|
|
$output[] = <<<END
|
158 |
|
|
<<?php print \${$machine_name}_wrapper; ?> class="ds-$html_class<?php print \${$machine_name}_classes; ?>">
|
159 |
|
|
<?php print \$$machine_name; ?>
|
160 |
|
|
</<?php print \${$machine_name}_wrapper; ?>>
|
161 |
|
|
END;
|
162 |
|
|
}
|
163 |
|
|
|
164 |
|
|
return implode("\n\n", $output);
|
165 |
|
|
}
|
166 |
|
|
|
167 |
|
|
/**
|
168 |
|
|
* Prepare variable documentation for an array of regions.
|
169 |
|
|
*/
|
170 |
|
|
function ds_prepare_regions_variable_documentation($region_names) {
|
171 |
|
|
$output = array();
|
172 |
|
|
|
173 |
|
|
foreach ($region_names as $name) {
|
174 |
|
|
$machine_name = ds_prepare_machine_name($name);
|
175 |
|
|
|
176 |
|
|
$output[] = <<<END
|
177 |
|
|
*
|
178 |
|
|
* - \$$machine_name: Rendered content for the "$name" region.
|
179 |
|
|
* - \${$machine_name}_classes: String of classes that can be used to style the "$name" region.
|
180 |
|
|
END;
|
181 |
|
|
}
|
182 |
|
|
|
183 |
|
|
return implode("\n", $output);
|
184 |
|
|
}
|
185 |
|
|
|
186 |
|
|
/**
|
187 |
|
|
* Prepare configuration for an array of regions.
|
188 |
|
|
*/
|
189 |
|
|
function ds_prepare_regions_configuration($region_names) {
|
190 |
|
|
$output = array();
|
191 |
|
|
|
192 |
|
|
foreach ($region_names as $name) {
|
193 |
|
|
$machine_name = ds_prepare_machine_name($name);
|
194 |
|
|
$output[] = " '$machine_name' => t('$name'),";
|
195 |
|
|
}
|
196 |
|
|
|
197 |
|
|
return implode("\n", $output);
|
198 |
|
|
}
|
199 |
|
|
|
200 |
|
|
/**
|
201 |
|
|
* Prepare styling for an array of regions.
|
202 |
|
|
*/
|
203 |
|
|
function ds_prepare_regions_css($region_names) {
|
204 |
|
|
$output = array();
|
205 |
|
|
|
206 |
|
|
foreach ($region_names as $name) {
|
207 |
|
|
$machine_name = ds_prepare_machine_name($name);
|
208 |
|
|
$html_class = drupal_html_class($name);
|
209 |
|
|
|
210 |
|
|
$output[] = <<<END
|
211 |
|
|
.ds-$html_class {
|
212 |
|
|
/* Styles for the "$html_class" region go here */
|
213 |
|
|
}
|
214 |
|
|
END;
|
215 |
|
|
}
|
216 |
|
|
|
217 |
|
|
return implode("\n\n", $output);
|
218 |
|
|
} |