Initial pass at the plugin
This commit is contained in:
		
							parent
							
								
									673d2cc981
								
							
						
					
					
						commit
						a8223a2139
					
				|  | @ -0,0 +1,141 @@ | |||
| <?php | ||||
| 
 | ||||
| /** | ||||
|  * Class for integrating mod_wsgi (py3) functionality with AlternC. | ||||
|  */ | ||||
| class m_wsgipy3 { | ||||
| 
 | ||||
|     function hook_subdomain_type_extra_fields($domain_type, $domain, $subdomain_id = FALSE) { | ||||
|         global $hooks; | ||||
|         $result = array(); | ||||
|         if ($this->domain_type_is_python($domain_type)) { | ||||
|             $ehe = ehe($domain_type['name']); | ||||
|             $default_values = $this->get_subdomain_settings($subdomain_id); | ||||
| 
 | ||||
|             $value = $subdomain_id ? ehe($default_values['venv']) : ""; | ||||
|             $title = ehe(_('Virtual Environment')); | ||||
|             $result['venv'] = <<<EOF | ||||
| <label for="venv_{$ehe}">{$title}</label><input type="text" class="int" name="venv_{$ehe}" id="venv_{$ehe}" value="{$value}" size="28" onKeyPress="getElementById('r_{$ehe}').checked=true;"/> | ||||
| EOF; | ||||
| 
 | ||||
|             # AlternC front end functions output directly, but here we catch it
 | ||||
|             # for later.
 | ||||
|             ob_start(); | ||||
|             display_browser($default_values['venv'], "venv_{$domain_type['name']}"); | ||||
|             $result['venv'] .= ob_get_contents(); | ||||
|             ob_end_clean(); | ||||
| 
 | ||||
|             $value = $subdomain_id ? ehe($default_values['app_subdir']) : ""; | ||||
|             $title = ehe(_('Application sub-directory')); | ||||
|             $result['app_subdir'] = <<<EOF | ||||
| <label for="venv_{$ehe}">{$title}</label><input type="text" class="int" name="app_subdir_{$ehe}" id="app_subdir_{$ehe}" value="{$value}" size="28" onKeyPress="getElementById('r_{$ehe}').checked=true;"/> | ||||
| EOF; | ||||
|         } | ||||
|         return $result; | ||||
|     } | ||||
| 
 | ||||
|     function domain_type_is_python($domain_type) { | ||||
|         global $hooks; | ||||
|         $result = $hooks->invoke('hook_domain_type_is_python', array($domain_type)); | ||||
|         foreach ($result as $module => $r) { | ||||
|             if (!empty($r)) { | ||||
|                 return TRUE; | ||||
|             } | ||||
|         } | ||||
|         return FALSE; | ||||
|     } | ||||
| 
 | ||||
|     function hook_domain_type_is_python($domain_type) { | ||||
|         if ($domain_type['name'] == 'wsgi') { | ||||
|             return array(TRUE); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the python settings for a given subdomain. | ||||
|      * | ||||
|      * @param $subdomain_id | ||||
|      * | ||||
|      * @returns array | ||||
|      *   An array of python settings indexed by key. | ||||
|      */ | ||||
|     function get_subdomain_settings($subdomain_id) { | ||||
|         global $db; | ||||
|         $db->query('SELECT * FROM subdomain_wsgi WHERE id = ?;', array($subdomain_id)); | ||||
|         if (!$db->next_record()) { | ||||
|             return FALSE; | ||||
|         } | ||||
|         return array( | ||||
|             'venv' => $db->f('venv'), | ||||
|             'app_subdir' => $db->f('app_subdir'), | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Sets the python settings for a given subdomain. | ||||
|      * | ||||
|      * @param $subdomain_id | ||||
|      * @param $venv | ||||
|      * @param $app_subdir | ||||
|      * | ||||
|      * @returns bool | array | ||||
|      */ | ||||
|     function set_subdomain_settings($subdomain_id, $venv = '', $app_subdir = '') { | ||||
|         global $db; | ||||
|         if ($this->get_subdomain_settings($subdomain_id) !== FALSE) { | ||||
|             $db->query('UPDATE subdomain_wsgi SET venv = ?, app_subdir = ? WHERE id = ?;', | ||||
|                        array($venv, $app_subdir, $subdomain_id)); | ||||
|         } | ||||
|         else { | ||||
|             $db->query('INSERT INTO subdomain_wsgi (id, venv, app_subdir) VALUES (?, ?, ?);', | ||||
|                        array($subdomain_id, $venv, $app_subdir)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function delete_subdomain_settings($subdomain_id) { | ||||
|         global $db; | ||||
|         if ($subdomain_id > 0) { | ||||
|             $db->query('DELETE FROM subdomain_wsgi WHERE id = ?;', array($subdomain_id)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function hook_dom_del_subdomain($subdomain_id) { | ||||
|         $this->delete_subdomain_settings($subdomain_id); | ||||
|     } | ||||
| 
 | ||||
|     function hook_dom_subdoedit_fields($type = NULL) { | ||||
|         global $dom; | ||||
|         if ($type) { | ||||
|             return array( | ||||
|                 "venv_{$type}" => array('post', 'string', ''), | ||||
|                 "app_subdir_{$type}" => array('post', 'string', ''), | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function hook_dom_subdoedit_set($context) { | ||||
|         // Deletion of old data is handled later, when update_domains is run.
 | ||||
|         // @TODO: Validation
 | ||||
|         $valid = TRUE; | ||||
|         // Set
 | ||||
|         if ($valid) { | ||||
|             $this->set_subdomain_settings( | ||||
|                 $context['sub_domain_id'], | ||||
|                 $context["venv_{$context['type']}"], | ||||
|                 $context["app_subdir_{$context['type']}"] | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     function hook_web_template_tokens($subdomain) { | ||||
|         $s = $this->get_subdomain_settings($subdomain['id']); | ||||
|         if ($s) { | ||||
|             return array( | ||||
|                 '%%VENV%%' => $s['venv'], | ||||
|                 '%%APP_SUBDIR%%' => $s['app_subdir'], | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| ?>
 | ||||
		Loading…
	
		Reference in New Issue