summaryrefslogblamecommitdiffstats
path: root/modules/baseconfig.inc.php
blob: 80dc6cd5f8e7e45fc1b7692bf5b765dbfe596799 (plain) (tree)
1
2
3
4
5
6
7
8



             
                                                    

                                   
                           










                                                            
         


 


                                                              






                                                                    
                                                                             
                                                                                               
                                                                      

                                                               















                                                                                                         

                                                                
                                                         









                                                   





                                                         
                                    
                            
                                                                                                                                                                          
                            
                                                    
                                                               
                                                                                                                   

                                                                        
                                                                                 
                                    

                                                                                          
         
                                            
                                                     
                                           



                                                       
<?php

User::load();

// Determine if we're setting global, distro or pool
$qry_extra = array();
if (isset($_REQUEST['distroid'])) {
	// TODO: Everything
	$qry_extra[] = array(
		'name'  => 'distroid',
		'value' => (int)$_REQUEST['distroid'],
		'table' => 'setting_distro',
	);
	if (isset($_REQUEST['poolid'])) {
		$qry_extra[] = array(
			'name'  => 'poolid',
			'value' => (int)$_REQUEST['poolid'],
			'table' => 'setting_pool',
		);
	}
}


if (isset($_POST['setting']) && is_array($_POST['setting'])) {
	if (User::hasPermission('superadmin')) {
		if (Util::verifyToken()) {
			// Build variables for specific sub-settings
			$qry_insert = '';
			$qry_values = '';
			foreach ($qry_extra as $item) {
				$qry_insert = ', ' . $item['name'];
				$qry_values = ', :' . $item['name'];
			}
			// Load all existing config options to validate input
			$res = Database::simpleQuery('SELECT setting, validator FROM setting');
			while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
				$key = $row['setting'];
				$validator = $row['validator'];
				$input = (isset($_POST['setting'][$key]) ? $_POST['setting'][$key] : '');
				// Validate data first!
				$value = Validator::validate($validator, $input);
				if ($value === false) {
					Message::addWarning('value-invalid', $key, $input);
					continue;
				}
				// Now put into DB
				Database::exec("INSERT INTO setting_global (setting, value $qry_insert)
					VALUES (:key, :value $qry_values)
					ON DUPLICATE KEY UPDATE value = :value",
					$qry_extra + array(
						'key'      => $key,
						'value'    => $value,
					)
				);
			}
			Message::addSuccess('settings-updated');
			Util::redirect('?do=baseconfig');
		}
	}
}

function render_module()
{
	if (!User::hasPermission('superadmin')) {
		Message::addError('no-permission');
		return;
	}
	// Build left joins for specific settings
	global $qry_extra;
	$joins = '';
	foreach ($qry_extra as $item) {
		$joins .= " LEFT JOIN ${item['table']} ";
	}
	// List global config option
	$settings = array();
	$res = Database::simpleQuery('SELECT cat_setting.name AS category_name, setting.setting, setting.defaultvalue, setting.permissions, setting.description, tbl.value
		FROM setting
		INNER JOIN cat_setting USING (catid)
		LEFT JOIN setting_global AS tbl USING (setting)
		ORDER BY cat_setting.sortval ASC, setting.setting ASC'); // TODO: Add setting groups and sort order
	while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
		$row['description'] = Util::markup($row['description']);
		if (is_null($row['value'])) $row['value'] = $row['defaultvalue'];
		$row['big'] = false;
		$settings[$row['category_name']]['settings'][] = $row;
		$settings[$row['category_name']]['category_name'] = $row['category_name'];
	}
	$settings = array_values($settings);
	Render::addTemplate('page-baseconfig', array(
		'categories'  => $settings,
		'token'       => Session::get('token'),
	));
}