public function setUp() { parent::setUp(); //If somehow this package already exists copy it if (file_exists('custom/modules/' . $this->package)) { $this->packageExists = true; mkdir_recursive('custom/modules/' . $this->package . '_bak'); copy_recursive('custom/modules/' . $this->package, 'custom/modules/' . $this->package . '_bak'); } //Make the custom package directory and simulate copying the file in mkdir_recursive('custom/modules/' . $this->package . '/Ext/WirelessLayoutdefs'); $theArray = array($this->package => array('subpanel_setup' => array($this->package . '_accounts' => array('order' => 100, 'module' => 'Contacts', 'subpanel_name' => 'default', 'title_key' => 'LBL_BUG48784TEST', 'get_subpanel_data' => 'Bug48748Test')))); $theFile = 'custom/modules/' . $this->package . '/Ext/WirelessLayoutdefs/wireless.subpaneldefs.ext.php'; write_array_to_file('layout_defs', $theArray, $theFile); sugar_chmod('custom/modules/' . $this->package . '/Ext/WirelessLayoutdefs/wireless.subpaneldefs.ext.php', 0655); global $beanList, $beanFiles, $current_user; //$beanList['Contacts'] = 'Contact'; //$beanFiles['Bug48784Mock'] = 'modules/Contacts/Contact.php'; //Create an anonymous user for login purposes/ $current_user = SugarTestUserUtilities::createAnonymousUser(); $current_user->status = 'Active'; $current_user->is_admin = 1; $current_user->save(); $GLOBALS['db']->commit(); // Making sure we commit any changes before continuing $_SESSION['avail_modules'][$this->package] = 'write'; }
function make_not_writable($file) { // Returns true if the given file/dir has been made not writable $ret_val = false; if (is_file($file) || is_dir($file)) { if (!is_writable($file)) { $ret_val = true; } else { $original_fileperms = fileperms($file); // take away writable permissions $new_fileperms = $original_fileperms & ~0x92; @sugar_chmod($file, $new_fileperms); if (!is_writable($file)) { $ret_val = true; } } } return $ret_val; }
function make_writable($file) { $ret_val = false; if (is_file($file) || is_dir($file)) { if (is_writable($file)) { $ret_val = true; } else { $original_fileperms = fileperms($file); // add user writable permission $new_fileperms = $original_fileperms | 0x80; @sugar_chmod($file, $new_fileperms); clearstatcache(); if (is_writable($file)) { $ret_val = true; } else { // add group writable permission $new_fileperms = $original_fileperms | 0x10; @chmod($file, $new_fileperms); clearstatcache(); if (is_writable($file)) { $ret_val = true; } else { // add world writable permission $new_fileperms = $original_fileperms | 0x2; @chmod($file, $new_fileperms); clearstatcache(); if (is_writable($file)) { $ret_val = true; } } } } } return $ret_val; }
/** * sugar_touch * Attempts to set the access and modification times of the file named in the filename * parameter to the value given in time . Note that the access time is always modified, * regardless of the number of parameters. If the file does not exist it will be created. * This method is basically a wrapper to the PHP touch method except that created files * may be set with the permissions specified in the configuration file (if set). * * @param $filename - The name of the file being touched. * @param $time - The touch time. If time is not supplied, the current system time is used. * @param $atime - If present, the access time of the given filename is set to the value of atime * @return boolean - Returns TRUE on success or FALSE on failure. * */ function sugar_touch($filename, $time = null, $atime = null) { $result = false; if (!empty($atime) && !empty($time)) { $result = @touch($filename, $time, $atime); } else { if (!empty($time)) { $result = @touch($filename, $time); } else { $result = @touch($filename); } } if (!$result) { $GLOBALS['log']->error("File {$filename} cannot be touched"); return $result; } if (!empty($GLOBALS['sugar_config']['default_permissions']['file_mode'])) { sugar_chmod($filename, $GLOBALS['sugar_config']['default_permissions']['file_mode']); } if (!empty($GLOBALS['sugar_config']['default_permissions']['user'])) { sugar_chown($filename); } if (!empty($GLOBALS['sugar_config']['default_permissions']['group'])) { sugar_chgrp($filename); } return true; }
function ConcatenateFiles($from_path) { // Minifying the group files takes a long time sometimes. @ini_set('max_execution_time', 300); $js_groupings = array(); if (isset($_REQUEST['root_directory'])) { require 'jssource/JSGroupings.php'; } else { require 'JSGroupings.php'; } //get array with file sources to concatenate $file_groups = $js_groupings; //from JSGroupings.php; $files_opened = array(); $currPerm = ''; $excludedFiles = get_exclude_files($from_path); //for each item in array, concatenate the source files foreach ($file_groups as $fg) { //process each group array foreach ($fg as $loc => $trgt) { $already_minified = FALSE; $minified_loc = str_replace('.js', '-min.js', $loc); if (is_file($minified_loc)) { $loc = $minified_loc; $already_minified = TRUE; } $relpath = $loc; $loc = $from_path . '/' . $loc; $trgt = sugar_cached($trgt); //check to see that source file is a file, and is readable. if (is_file($loc) && is_readable($loc)) { $currPerm = fileperms($loc); //check to see if target exists, if it does then open file if (file_exists($trgt)) { if (in_array($trgt, $files_opened)) { //open target file if (function_exists('sugar_fopen')) { $trgt_handle = sugar_fopen($trgt, 'a'); } else { $trgt_handle = fopen($trgt, 'a'); } } else { //open target file if (function_exists('sugar_fopen')) { $trgt_handle = sugar_fopen($trgt, 'w'); } else { $trgt_handle = fopen($trgt, 'w'); } } } else { if (!function_exists('mkdir_recursive')) { require_once 'include/dir_inc.php'; } mkdir_recursive(dirname($trgt)); //create and open target file if (function_exists('sugar_fopen')) { $trgt_handle = @sugar_fopen($trgt, 'w'); } else { $trgt_handle = @fopen($trgt, 'w'); } // todo: make this failure more friendly. Ideally, it will display a // warning to admin users and revert back to displaying all of the // Javascript files insted of displaying the minified versions. if ($trgt_handle === false) { $target_directory = dirname($trgt); $base = dirname($target_directory); while (!is_dir($base) && !empty($base) && $base != dirname($base)) { $base = dirname($base); } sugar_die("Creating {$target_directory} failed: please make sure {$base} is writable\n"); } } $files_opened[] = $trgt; //make sure we have handles to both source and target file if ($trgt_handle) { if ($already_minified || isset($excludedFiles[dirname($loc)])) { $buffer = file_get_contents($loc); } else { $buffer = SugarMin::minify(file_get_contents($loc)); } $buffer .= "/* End of File {$relpath} */\n\n"; $num = fwrite($trgt_handle, $buffer); if ($num === false) { //log error, file did not get appended echo "Error while concatenating file {$loc} to target file {$trgt} \n"; } //close file opened. fclose($trgt_handle); } } } //set permissions on this file if (!empty($currPerm) && $currPerm !== false) { //if we can retrieve permissions from target files, use same //permission on concatenated file if (function_exists('sugar_chmod')) { @sugar_chmod($trgt, $currPerm); } else { @chmod($trgt, $currPerm); } } else { //no permissions could be retrieved, so set to 777 if (function_exists('sugar_chmod')) { @sugar_chmod($trgt, 0777); } else { @chmod($trgt, 0777); } } } }
public function testSugarChmodWithModeDefaultModeNotAnInteger() { $GLOBALS['sugar_config']['default_permissions']['file_mode'] = ''; $mode = 0411; $this->assertTrue(sugar_chmod($this->_filename, $mode)); $this->assertEquals($this->_getTestFilePermissions(), decoct($mode)); }
function ConcatenateFiles($from_path) { $js_groupings = array(); if (isset($_REQUEST['root_directory'])) { require 'jssource/JSGroupings.php'; } else { require 'JSGroupings.php'; } //get array with file sources to concatenate $file_groups = $js_groupings; //from JSGroupings.php; $files_opened = array(); $currPerm = ''; //for each item in array, concatenate the source files foreach ($file_groups as $fg) { //process each group array foreach ($fg as $loc => $trgt) { $relpath = $loc; $loc = $from_path . '/' . $loc; $trgt = $from_path . '/' . $trgt; //check to see that source file exists, that it is a file, and is readable if (file_exists($loc) && is_file($loc) && is_readable($loc)) { $currPerm = fileperms($loc); //check to see if target exists, if it does then open file if (file_exists($trgt)) { if (in_array($trgt, $files_opened)) { //open target file if (function_exists('sugar_fopen')) { $trgt_handle = sugar_fopen($trgt, 'a'); } else { $trgt_handle = fopen($trgt, 'a'); } } else { //open target file if (function_exists('sugar_fopen')) { $trgt_handle = sugar_fopen($trgt, 'w'); } else { $trgt_handle = fopen($trgt, 'w'); } } } else { //create and open target file if (function_exists('sugar_fopen')) { $trgt_handle = @sugar_fopen($trgt, 'w'); } else { $trgt_handle = @fopen($trgt, 'w'); } // todo: make this failure more friendly. Ideally, it will display a // warning to admin users and revert back to displaying all of the // Javascript files insted of displaying the minified versions. if ($trgt_handle === false) { $target_directory = dirname($trgt); $base_name = realpath(dirname(__FILE__) . '/..') . '/'; $target_directory = substr($target_directory, strlen($base_name)); sugar_die("please make sure {$target_directory} is writable\n"); } } $files_opened[] = $trgt; //make sure we have handles to both source and target file if ($trgt_handle) { $buffer = file_get_contents($loc); $buffer .= "// End of File {$relpath}\n \n"; $num = fwrite($trgt_handle, $buffer); if ($num === false) { //log error, file did not get appended echo "Error while concatenating file {$loc} to target file {$trgt} \n"; } //close file opened. fclose($trgt_handle); } } } //set permissions on this file if (!empty($currPerm) && $currPerm !== false) { //if we can retrieve permissions from target files, use same //permission on concatenated file if (function_exists('sugar_chmod')) { @sugar_chmod($trgt, $currPerm); } else { @chmod($trgt, $currPerm); } } else { //no permissions could be retrieved, so set to 777 if (function_exists('sugar_chmod')) { @sugar_chmod($trgt, 0777); } else { @chmod($trgt, 0777); } } } }
/** * sugar_touch * Attempts to set the access and modification times of the file named in the filename * parameter to the value given in time . Note that the access time is always modified, * regardless of the number of parameters. If the file does not exist it will be created. * This method is basically a wrapper to the PHP touch method except that created files * may be set with the permissions specified in the configuration file (if set). * * @param $filename - The name of the file being touched. * @param $time - The touch time. If time is not supplied, the current system time is used. * @param $atime - If present, the access time of the given filename is set to the value of atime * @return boolean - Returns TRUE on success or FALSE on failure. * */ function sugar_touch($filename, $time = null, $atime = null) { if (!empty($GLOBALS['sugar_config']['default_permissions']['dir_mode'])) { $dirmode = $GLOBALS['sugar_config']['default_permissions']['dir_mode']; } else { $dirmode = null; } $result = sugar_mkdir(dirname($filename), $dirmode, true); if (!$result) { return $result; } if (!empty($atime) && !empty($time)) { $result = @touch($filename, $time, $atime); } else { if (!empty($time)) { $result = @touch($filename, $time); } else { $result = @touch($filename); } } if (!$result) { $GLOBALS['log']->error("File {$filename} cannot be touched"); return $result; } if (!empty($GLOBALS['sugar_config']['default_permissions']['file_mode'])) { sugar_chmod($filename, $GLOBALS['sugar_config']['default_permissions']['file_mode']); } if (!empty($GLOBALS['sugar_config']['default_permissions']['user'])) { sugar_chown($filename); } if (!empty($GLOBALS['sugar_config']['default_permissions']['group'])) { sugar_chgrp($filename); } // Add this to the file loader cache if (!SugarAutoLoader::fileExists($filename)) { SugarAutoLoader::addToMap($filename); } return true; }