/[drupal]/contributions/modules/virtual_site/virtual_site.module
ViewVC logotype

Contents of /contributions/modules/virtual_site/virtual_site.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (show annotations) (download) (as text)
Wed Apr 16 10:10:14 2008 UTC (19 months, 1 week ago) by fokke
Branch: MAIN
CVS Tags: HEAD
Changes since 1.7: +12 -9 lines
File MIME type: text/x-php
- Fixed #227993
1 <?php
2 // $Id: virtual_site.module,v 1.7 2008/04/16 10:03:09 fokke Exp $
3
4 /**
5 * Implementation of hook_menu().
6 */
7 function virtual_site_menu() {
8 $items = array();
9
10 $items['admin/build/sites'] = array(
11 'title' => t('Virtual sites'),
12 'description' => t('Create new virtual sites, much like Drupals multi-site feature does.'),
13 'page callback' => 'drupal_get_form',
14 'page arguments' => array('virtual_site_list_form'),
15 'access arguments' => array('administer virtual sites'),
16 'file' => 'virtual_site.admin.inc',
17 );
18 $items['admin/build/sites/list'] = array(
19 'title' => t('List'),
20 'file' => 'virtual_site.admin.inc',
21 'type' => MENU_DEFAULT_LOCAL_TASK,
22 'weight' => -10,
23 );
24 $items['admin/build/sites/add'] = array(
25 'title' => t('Add'),
26 'page callback' => 'drupal_get_form',
27 'page arguments' => array('virtual_site_edit_form'),
28 'access arguments' => array('administer virtual sites'),
29 'file' => 'virtual_site.admin.inc',
30 'type' => MENU_LOCAL_TASK,
31 );
32 $items['admin/build/sites/%virtual_site/edit'] = array(
33 'title' => t('Edit'),
34 'page callback' => 'drupal_get_form',
35 'page arguments' => array('virtual_site_edit_form', 3),
36 'access arguments' => array('administer virtual sites'),
37 'file' => 'virtual_site.admin.inc',
38 'type' => MENU_CALLBACK,
39 );
40
41 $features = virtual_site_features();
42
43 if (count($features)) {
44 $items['admin/build/sites/%virtual_site/edit/default'] = array(
45 'title' => t('Site'),
46 'file' => 'virtual_site.admin.inc',
47 'type' => MENU_DEFAULT_LOCAL_TASK,
48 'weight' => -10,
49 );
50
51 foreach ($features as $feature) {
52 $items['admin/build/sites/%virtual_site/edit/'.$feature['callback']] = array(
53 'title' => t($feature['name']),
54 'page callback' => 'drupal_get_form',
55 'page arguments' => array('virtual_site_edit_feature_form', 3, 5),
56 'access arguments' => array('administer virtual sites'),
57 'file' => 'virtual_site.admin.inc',
58 'type' => MENU_LOCAL_TASK,
59 );
60 }
61 }
62
63 $items['admin/build/sites/%virtual_site/delete'] = array(
64 'title' => t('Delete'),
65 'page callback' => 'drupal_get_form',
66 'page arguments' => array('virtual_site_delete_form', 3),
67 'access arguments' => array('administer virtual sites'),
68 'file' => 'virtual_site.admin.inc',
69 'type' => MENU_CALLBACK,
70 );
71
72 return $items;
73 }
74
75 /**
76 * Implementation of hook_perm().
77 */
78 function virtual_site_perm() {
79 return array('administer virtual sites');
80 }
81
82 /**
83 * Implementation of hook_perm().
84 */
85 function virtual_site_help($path, $arg) {
86
87 switch ($path) {
88
89 case 'admin/build/sites':
90 return '<p>'.t('Virtual sites offer almost the same (and more) functionality as the Drupal !multisite feature without the need for FTP or SSH. Depending on conditions (e.g. requested url or user role) handeld by the !condition module, you can override theme, site information, menu\'s and more to virtually present the visitor with a different website.', array('!multisite' => l(t('multi-site'), 'http://drupal.org/node/43816', array('attributes' => array('target' => '_blank'))), '!condition' => l(t('Condition'), 'admin/settings/condition'))).'</p><p>'.t('The first listed site that matches the specified conditions will be used. You can change the order by dragging the rows.').'</p>';
91
92 case 'admin/build/sites/%/edit':
93 return '<p>'.t('When to show this virtual site is decided by the !conditions module. Add a condition (e.g. to match for the url <em>sub.example.com</em>) and check the condition(s) to show this site for, in the form below. Edit the sites features (e.g. theme) using the tabs. If you see no tabs, first install and enable some !feature.', array('!conditions' => l(t('Conditions'), 'admin/settings/condition'), '!feature' => l(t('Virtual site feature module'), 'admin/build/modules/', array('fragment' => 'edit-status-virtual-site-variables-wrapper')))).'</p>';
94 }
95 }
96
97
98 /**
99 * Implementation of hook_theme().
100 */
101 function virtual_site_theme() {
102 return array(
103 'virtual_site_list_form' => array('arguments' => array('form' => NULL)),
104 'virtual_site_edit_form' => array('arguments' => array('form' => NULL)),
105 'virtual_site_edit_feature_form' => array('arguments' => array('form' => NULL)),
106 );
107 }
108
109 /**
110 * Implementation of hook_init().
111 */
112 function virtual_site_init() {
113
114 if ($site = virtual_site_load_active()) {
115 $features = virtual_site_features();
116
117 if (is_array($features) && count($features)) {
118
119 foreach ($features as $feature) {
120
121 if (isset($site->features[$feature['callback']])) {
122 $context = $site->features[$feature['callback']];
123 $context['site'] = $site;
124 $feature['callback']($context);
125 }
126 }
127 }
128 }
129 }
130
131 /**
132 * Get all features
133 */
134 function virtual_site_features() {
135 static $features;
136
137 if (is_null($features)) {
138 $features = (array) module_invoke_all('feature_info');
139
140 foreach ($features as $feature => $info) {
141 $features[$feature]['callback'] = function_exists($feature) ? $feature : NULL;
142 $features[$feature]['form'] = function_exists($feature.'_form') ? $feature.'_form' : NULL;
143 $features[$feature]['submit'] = function_exists($feature.'_submit') ? $feature.'_submit' : NULL;
144
145 if (!isset($features[$feature]['callback'], $features[$feature]['form'], $features[$feature]['submit'])) {
146 unset($features[$feature]);
147 }
148 }
149 }
150
151 return $features;
152 }
153
154 /**
155 * Implementation of hook_load
156 */
157 function virtual_site_load($sid = NULL, $refresh = FALSE) {
158 static $sites;
159
160 if (!is_array($sites) || $refresh) {
161
162 if (is_numeric($sid)) {
163 $site = db_fetch_object(db_query("SELECT * FROM {virtual_sites} WHERE sid = %d", $sid));
164 $site->conditions = (array) unserialize($site->conditions);
165 $site->features = (array) unserialize($site->features);
166 return $site;
167
168 } else {
169 $result = db_query("SELECT * FROM {virtual_sites} ORDER BY weight ASC");
170 $sites = array();
171
172 while ($site = db_fetch_object($result)) {
173 $site->conditions = (array) unserialize($site->conditions);
174 $site->features = (array) unserialize($site->features);
175 $sites[$site->sid] = $site;
176 }
177 }
178 }
179
180 if (is_array($sites)) {
181
182 if (is_numeric($sid)) {
183 return $sites[$sid];
184
185 } elseif (is_array($sid)) {
186 return array_intersect_key($sites, array_flip($sid));
187
188 } else {
189 return $sites;
190 }
191 }
192 }
193
194 /**
195 * Finds active virtual site and returns the data object.
196 */
197 function virtual_site_load_active() {
198 static $active;
199
200 if (!is_object($active)) {
201 $sites = virtual_site_load();
202
203 foreach ($sites as $site) {
204
205 if (!$site->status) {
206 continue;
207 }
208
209 if (module_invoke('condition', 'selection_validate', $site->conditions)) {
210 $active = $site;
211 break;
212 }
213 }
214 }
215
216 return $active;
217 }
218
219 /**
220 * Save one or more virtual sites.
221 */
222 function virtual_site_save($site) {
223
224 if (is_array($site)) {
225
226 foreach (array_keys($site) as $key) {
227 $site[$key]->saved = virtual_site_save($site[$key]);
228 }
229
230 return $site;
231 }
232
233 $site->conditions = serialize(is_array($site->conditions) ? $site->conditions : array());
234 $site->features = serialize(is_array($site->features) ? $site->features : array());
235
236 return drupal_write_record('virtual_sites', $site, $site->sid ? 'sid' : array());
237 }
238
239 /**
240 * Delete one or more conditions.
241 */
242 function virtual_site_delete($site) {
243
244 if (is_array($site)) {
245
246 foreach (array_keys($site) as $key) {
247 $site[$key]->deleted = virtual_site_delete($site[$key]);
248 }
249
250 return $site;
251 }
252
253 $sid = is_object($site) ? $site->sid : $site;
254
255 return db_query("DELETE FROM {virtual_sites} WHERE sid = %d", $sid);
256 }
257
258 ?>

  ViewVC Help
Powered by ViewVC 1.1.2