* @package AgileBill * @version 1.4.93 */ class htaccess_dir { # Open the constructor for this mod function htaccess_dir() { # name of this module: $this->module = "htaccess_dir"; # location of the construct XML file: $this->xml_construct = PATH_MODULES . "" . $this->module . "/" . $this->module . "_construct.xml"; # open the construct file for parsing $C_xml = new CORE_xml; $construct = $C_xml->xml_to_array($this->xml_construct); $this->method = $construct["construct"]["method"]; $this->trigger = $construct["construct"]["trigger"]; $this->field = $construct["construct"]["field"]; $this->table = $construct["construct"]["table"]; $this->module = $construct["construct"]["module"]; $this->cache = $construct["construct"]["cache"]; $this->order_by = $construct["construct"]["order_by"]; $this->limit = $construct["construct"]["limit"]; # add extra lines needed in the .htaccess files when added/updated: # Example: #$this->htaccess_extra = "Options +FollowSymlinks\n"; $this->htaccess_extra = ''; } ############################## ## ADD ## ############################## function add($VAR) { global $C_translate, $C_debug; $VAR['htaccess_dir_htaccess'] = '# Error!'; $this->validated = true; ### Change the path... if ( isset ( $VAR['htaccess_dir_path'] ) && $VAR['htaccess_dir_path'] != '' ) { # trim whitspaces $VAR['htaccess_dir_path'] = trim ( $VAR['htaccess_dir_path'] ); # replace all forward slashes with back slashes $VAR['htaccess_dir_path'] = ereg_replace('\\\\', '/', $VAR['htaccess_dir_path']); # add the final trailing slash if missing if ( !ereg ('[/]$', $VAR['htaccess_dir_path'] ) ) $VAR['htaccess_dir_path'] = $VAR['htaccess_dir_path'] . '/'; } if( isset ( $VAR['htaccess_dir_path'] ) && $VAR['htaccess_dir_path'] != '' ) { ################################################################ ### VERIFY LOCAL PATH & WRITABILITY! @$filename = $VAR['htaccess_dir_path'] . '.htaccess'; @$id = $VAR['htaccess_dir_htaccess_id']; $db = &DB(); $sql = 'SELECT name FROM ' . AGILE_DB_PREFIX . 'htaccess WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND id = ' . $db->qstr($id); $result = $db->Execute($sql); @$name = $result->fields['name']; ### Check path $path = $VAR['htaccess_dir_path']; if ( is_dir ( $path ) ) { ### Check if is writable! if ( !is_writable ( $path ) ) { ## Path not writable! $this->validated = false; $this->val_error[] = array( 'field' => 'none', 'field_trans' => $C_translate->translate('error', 'core', ""), 'error' => $C_translate->translate('path_auth', 'htaccess_dir', "")); } } else { ### Path broken! $this->validated = false; $this->val_error[] = array( 'field' => 'none', 'field_trans' => $C_translate->translate('error', 'core', ""), 'error' => $C_translate->translate('path_broke', 'htaccess_dir', "")); } } #################################################################### ### If validation was failed, skip the db insert & ### set the errors & origonal fields as Smarty objects, ### and change the page to be loaded. #################################################################### if(!$this->validated) { global $smarty; # set the errors as a Smarty Object $smarty->assign('form_validation', $this->val_error); # set the page to be loaded if(!defined("FORCE_PAGE")) { define('FORCE_PAGE', $VAR['_page_current']); } return; } #################################################################### ### Create the record/verify fields $type = "add"; $this->method["$type"] = split(",", $this->method["$type"]); $db = new CORE_database; $dir_id = $db->add($VAR, $this, $type); #################################################################### ### Create the .htaccess file if( isset ( $dir_id ) && $dir_id > 0 ) { ### GENERATE THE EXCLUDE LIST $exclude_list = $this->exclude_list(); ### GENERATE THE .HTACCESS FILE $nl = "\n"; $data = $this->htaccess_extra . 'RewriteEngine on' . $nl; if(empty($VAR['htaccess_dir_recursive'])) $data .= 'RewriteRule ^(.*)/.*$ - [L]' . $nl; $data .= 'RewriteRule ' . $exclude_list . '$ htaccess_index.php?_HTACCESS_ID='.$id.'&_HTACCESS_DIR_ID='.$dir_id; ### Update the db record $db = &DB(); $sql = "UPDATE ".AGILE_DB_PREFIX."htaccess_dir SET htaccess = " . $db->qstr( $data ) . " WHERE id = " . $db->qstr( $dir_id ) . " AND site_id = " . $db->qstr( DEFAULT_SITE ); $result = $db->Execute($sql); ### WRITE THE LOCAL .HTACCESS FILE $fp = fopen($filename, "w+"); fwrite($fp,$data); fclose($fp); ### WRITE THE htaccess_index.php FILE $php_filename = $VAR['htaccess_dir_path'] . 'htaccess_index.php'; $data = $this->create_php(); $fp = fopen($php_filename, "w+"); fwrite($fp,$data); fclose($fp); } } ############################## ## UPDATE ## ############################## function update($VAR) { global $C_translate, $C_debug; $this->validated = true; ### Change the path... if ( isset ( $VAR['htaccess_dir_path'] ) && $VAR['htaccess_dir_path'] != '' ) { # trim whitspaces $VAR['htaccess_dir_path'] = trim ( $VAR['htaccess_dir_path'] ); # replace all forward slashes with back slashes $VAR['htaccess_dir_path'] = ereg_replace('\\\\', '/', $VAR['htaccess_dir_path']); # add the final trailing slash if missing if ( !ereg ('[/]$', $VAR['htaccess_dir_path'] ) ) $VAR['htaccess_dir_path'] = $VAR['htaccess_dir_path'] . '/'; } ### Change the .htaccess data if( isset ( $VAR['htaccess_dir_path'] ) && $VAR['htaccess_dir_path'] != '' ) { ################################################################ ### VERIFY LOCAL PATH & WRITABILITY! @$filename = $VAR['htaccess_dir_path'] . '.htaccess'; @$php_filename = $VAR['htaccess_dir_path'] . 'htaccess_index.php'; @$id = $VAR['htaccess_dir_htaccess_id']; $db = &DB(); $sql = 'SELECT name FROM ' . AGILE_DB_PREFIX . 'htaccess WHERE site_id = ' . $db->qstr(DEFAULT_SITE) . ' AND id = ' . $db->qstr($id); $result = $db->Execute($sql); @$name = $result->fields['name']; ### Check path $path = $VAR['htaccess_dir_path']; if ( is_dir ( $path ) ) { ### Check if is writable! if ( is_writable ( $path ) ) { ### GENERATE THE EXCLUDE LIST $exclude_list = $this->exclude_list(); $nl = "\n"; /* $data = $this->htaccess_extra . 'RewriteEngine on' . $nl . 'RewriteRule ^(.*)/.*$ - [L]' . $nl . 'RewriteRule ' . '' . $exclude_list . '$ ' . 'htaccess_index.php' . '?_HTACCESS_ID='.$id.'&_HTACCESS_DIR_ID='.$VAR["htaccess_dir_id"]; */ $data = $this->htaccess_extra . 'RewriteEngine on' . $nl; if(empty($VAR['htaccess_dir_recursive'])) $data .= 'RewriteRule ^(.*)/.*$ - [L]' . $nl; $data .= 'RewriteRule ' . $exclude_list . '$ htaccess_index.php?_HTACCESS_ID='.$id.'&_HTACCESS_DIR_ID='.$VAR["htaccess_dir_id"]; ### Set the .htaccess var for the db $VAR['htaccess_dir_htaccess'] = $data; } else { ## Path not writable! $this->validated = false; $this->val_error[] = array( 'field' => 'none', 'field_trans' => $C_translate->translate('error', 'core', ""), 'error' => $C_translate->translate('path_auth', 'htaccess_dir', "")); } } else { ### Path broken! $this->validated = false; $this->val_error[] = array( 'field' => 'none', 'field_trans' => $C_translate->translate('error', 'core', ""), 'error' => $C_translate->translate('path_broke', 'htaccess_dir', "")); } } #################################################################### ### If validation was failed, skip the db insert & ### set the errors & origonal fields as Smarty objects, ### and change the page to be loaded. #################################################################### if(!$this->validated) { global $smarty; # set the errors as a Smarty Object $smarty->assign('form_validation', $this->val_error); # set the page to be loaded if(!defined("FORCE_PAGE")) { define('FORCE_PAGE', $VAR['_page']); } return; } ### Update the db record $type = "update"; $this->method["$type"] = split(",", $this->method["$type"]); $db = new CORE_database; $dir = $db->update($VAR, $this, $type); if($dir != false) { ### UPDATE THE LOCAL .HTACCESS FILE $fp = fopen($filename, "w+"); fwrite($fp,$data); fclose($fp); ### UPDATE THE LOCAL htaccess_index.php $data = $this->create_php(); $fp = fopen($php_filename, "w+"); fwrite($fp,$data); fclose($fp); } } ############################## ## DELETE ## ############################## function delete($VAR) { ### Get the array if(isset($VAR["delete_id"])) $id = split(',', $VAR["delete_id"]); elseif (isset($VAR["id"])) $id = split(',', $VAR["id"]); ### Loop: for($i=0; $idelete_one($id[$i]); } } ############################## ## DELETE ONE ## ############################## function delete_one($id) { global $C_debug, $C_translate; if ($id == '') return false; ### Get the details of this directory record $db = &DB(); $sql = "SELECT * FROM ".AGILE_DB_PREFIX."htaccess_dir WHERE site_id = ".$db->qstr(DEFAULT_SITE)." AND id = ".$db->qstr($id); $result = $db->Execute($sql); $type = $result->fields['type']; $path = $result->fields['path']; if( $result != false ) { ### DELETE THE LOCAL .HTACCESS FILE $filename = $result->fields['path'] . '.htaccess'; if ( @unlink ($filename) === false) { $C_translate->value['htaccess_dir']['dir'] = $result->fields['path'] . '.htaccess'; $C_debug->alert($C_translate->translate('remove_fail','htaccess_dir','')); } ### DELETE THE LOCAL HTACCESS_ATILE.PHP FILE $filename = $result->fields['path'] . 'htaccess_index.php'; @unlink ($filename); } ### Delete the Record: $db = &DB(); $sql = "DELETE FROM ".AGILE_DB_PREFIX."htaccess_dir WHERE site_id = ".$db->qstr(DEFAULT_SITE)." AND id = ".$db->qstr($id); $resulta = $db->Execute($sql); ### Success message $C_translate->value['htaccess_dir']['dira'] = $path; $C_debug->alert($C_translate->translate('remove_success','htaccess_dir','')); return true; } ############################## ## VIEW ## ############################## function view($VAR) { $type = "view"; $this->method["$type"] = split(",", $this->method["$type"]); $db = new CORE_database; $db->view($VAR, $this, $type); } ############################## ## SEARCH ## ############################## function search($VAR) { $type = "search"; $this->method["$type"] = split(",", $this->method["$type"]); $db = new CORE_database; $db->search($VAR, $this, $type); } ############################## ## SEARCH SHOW ## ############################## function search_show($VAR) { $type = "search"; $this->method["$type"] = split(",", $this->method["$type"]); $db = new CORE_database; $db->search_show($VAR, $this, $type); } function exclude_list() { global $VAR; $list = ''; @$Arr = $VAR['htaccess_dir_exclude']; if ( count($Arr) == 0) return ''; $db = &DB(); $sql = 'SELECT * FROM ' . AGILE_DB_PREFIX . 'htaccess_exclude WHERE site_id = ' . $db->qstr(DEFAULT_SITE); $result = $db->Execute($sql); if($result->RecordCount() == 0) return ''; while(!$result->EOF) { $id = $result->fields['id']; $ext= $result->fields['extension']; ### GENERATE THE EXCLUDE LIST for ($i=0; $iMoveNext(); } if ($list != '') $list = '!(\.+' . $list . ')'; return $list; } function create_php() { $data = ''; return $data; } } ?>