Пример #1
0
 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';
 }
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
/**
 * 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;
}
Пример #5
0
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);
            }
        }
    }
}
Пример #6
0
 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));
 }
Пример #7
0
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);
            }
        }
    }
}
Пример #8
0
/**
 * 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;
}