mirror of
https://github.com/salesagility/SuiteCRM.git
synced 2024-11-21 23:47:57 +00:00
669 lines
20 KiB
PHP
Executable File
669 lines
20 KiB
PHP
Executable File
<?php
|
|
if (!defined('sugarEntry') || !sugarEntry) {
|
|
die('Not A Valid Entry Point');
|
|
}
|
|
/**
|
|
*
|
|
* SugarCRM Community Edition is a customer relationship management program developed by
|
|
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
|
|
*
|
|
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
|
|
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Affero General Public License version 3 as published by the
|
|
* Free Software Foundation with the addition of the following permission added
|
|
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
|
|
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
|
|
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License along with
|
|
* this program; if not, see http://www.gnu.org/licenses or write to the Free
|
|
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA.
|
|
*
|
|
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
|
|
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of this program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU Affero General Public License version 3.
|
|
*
|
|
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
|
|
* these Appropriate Legal Notices must retain the display of the "Powered by
|
|
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
|
|
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
|
|
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
require_once('include/utils/array_utils.php');
|
|
|
|
/**
|
|
* @return bool
|
|
* @desc Creates the include language directory under the custom directory.
|
|
*/
|
|
function create_include_lang_dir()
|
|
{
|
|
if (!is_dir("custom/include/language")) {
|
|
return sugar_mkdir("custom/include/language", null, true);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param module string
|
|
* @desc Creates the module's language directory under the custom directory.
|
|
*/
|
|
function create_module_lang_dir($module)
|
|
{
|
|
if (!is_dir("custom/modules/$module/language")) {
|
|
return sugar_mkdir("custom/modules/$module/language", null, true);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return string&
|
|
* @param the_array array, language string, module string
|
|
* @desc Returns the contents of the customized language pack.
|
|
*/
|
|
function &create_field_lang_pak_contents($old_contents, $key, $value, $language, $module)
|
|
{
|
|
if (!empty($old_contents)) {
|
|
$old_contents = preg_replace("'[^\[\n\r]+\[\'{$key}\'\][^\;]+;[\ \r\n]*'i", '', (string) $old_contents);
|
|
$contents = str_replace("\n?>", "\n\$mod_strings['{$key}'] = '$value';\n?>", $old_contents);
|
|
} else {
|
|
$contents = "<?php\n"
|
|
. '// Creation date: ' . date('Y-m-d H:i:s') . "\n"
|
|
. "// Module: $module\n"
|
|
. "// Language: $language\n\n"
|
|
. "\$mod_strings['$key'] = '$value';"
|
|
. "\n?>";
|
|
}
|
|
|
|
return $contents;
|
|
}
|
|
|
|
/**
|
|
* @return string&
|
|
* @param the_array array, language string
|
|
* @desc Returns the contents of the customized language pack.
|
|
*/
|
|
function &create_dropdown_lang_pak_contents(&$the_array, $language)
|
|
{
|
|
$contents = "<?php\n" .
|
|
'// ' . date('Y-m-d H:i:s') . "\n" .
|
|
"// Language: $language\n\n" .
|
|
'$app_list_strings = ' .
|
|
var_export($the_array, true) .
|
|
";\n?>";
|
|
|
|
return $contents;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param module string, key string, value string
|
|
* @desc Wrapper function that will create a field label for every language.
|
|
*/
|
|
function create_field_label_all_lang($module, $key, $value, $overwrite = false)
|
|
{
|
|
$languages = get_languages();
|
|
$return_value = false;
|
|
|
|
foreach ($languages as $lang_key => $lang_value) {
|
|
$return_value = create_field_label($module, $lang_key, $key, $value, $overwrite);
|
|
if (!$return_value) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param module string, language string, key string, value string
|
|
* @desc Returns true if new field label can be created, false otherwise.
|
|
* Probable reason for returning false: new_field_key already exists.
|
|
*/
|
|
function create_field_label($module, $language, $key, $value, $overwrite=false)
|
|
{
|
|
$return_value = false;
|
|
$mod_strings = return_module_language($language, $module);
|
|
|
|
if (isset($mod_strings[$key]) && !$overwrite) {
|
|
$GLOBALS['log']->info("Tried to create a key that already exists: $key");
|
|
} else {
|
|
$mod_strings = array_merge($mod_strings, array($key => $value));
|
|
$dirname = "custom/modules/$module/language";
|
|
$dir_exists = is_dir($dirname);
|
|
|
|
if (!$dir_exists) {
|
|
$dir_exists = create_module_lang_dir($module);
|
|
}
|
|
|
|
if ($dir_exists) {
|
|
$filename = "$dirname/$language.lang.php";
|
|
if (is_file($filename) && filesize($filename) > 0) {
|
|
$old_contents = file_get_contents($filename);
|
|
} else {
|
|
$old_contents = '';
|
|
}
|
|
|
|
if (sugar_file_put_contents($filename, create_field_lang_pak_contents(
|
|
$old_contents,
|
|
$key,
|
|
$value,
|
|
$language,
|
|
$module
|
|
)) !== false) {
|
|
$return_value = true;
|
|
$GLOBALS['log']->info("Successful write to: $filename");
|
|
} else {
|
|
$GLOBALS['log']->info("Unable to write edited language pak to file: $filename");
|
|
}
|
|
} else {
|
|
$GLOBALS['log']->info("Unable to create dir: $dirname");
|
|
}
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param dropdown_name string
|
|
* @desc Wrapper function that creates a dropdown type for all languages.
|
|
*/
|
|
function create_dropdown_type_all_lang($dropdown_name)
|
|
{
|
|
$languages = get_languages();
|
|
$return_value = false;
|
|
|
|
foreach ($languages as $lang_key => $lang_value) {
|
|
$return_value = create_dropdown_type($dropdown_name, $lang_key);
|
|
if (!$return_value) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param app_list_strings array
|
|
* @desc Saves the app_list_strings to file in the 'custom' dir.
|
|
*/
|
|
function save_custom_app_list_strings_contents(&$contents, $language, $custom_dir_name = '')
|
|
{
|
|
$return_value = false;
|
|
$dirname = 'custom/include/language';
|
|
if (!empty($custom_dir_name)) {
|
|
$dirname = $custom_dir_name;
|
|
}
|
|
|
|
$dir_exists = is_dir($dirname);
|
|
|
|
if (!$dir_exists) {
|
|
$dir_exists = create_include_lang_dir($dirname);
|
|
}
|
|
|
|
if ($dir_exists) {
|
|
$filename = "$dirname/$language.lang.php";
|
|
|
|
if (sugar_file_put_contents($filename, $contents) !== false) {
|
|
$return_value = true;
|
|
LoggerManager::getLogger()->info("Successful write to: $filename");
|
|
} else {
|
|
LoggerManager::getLogger()->info("Unable to write edited language pack to file: $filename");
|
|
}
|
|
} else {
|
|
LoggerManager::getLogger()->info("Unable to create dir: $dirname");
|
|
}
|
|
if ($return_value) {
|
|
$cache_key = 'app_list_strings.'.$language;
|
|
sugar_cache_clear($cache_key);
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param app_list_strings array
|
|
* @desc Saves the app_list_strings to file in the 'custom' dir.
|
|
*/
|
|
function save_custom_app_list_strings(&$app_list_strings, $language)
|
|
{
|
|
$return_value = false;
|
|
$dirname = 'custom/include/language';
|
|
|
|
$dir_exists = is_dir($dirname);
|
|
|
|
if (!$dir_exists) {
|
|
$dir_exists = create_include_lang_dir($dirname);
|
|
}
|
|
|
|
if ($dir_exists) {
|
|
$filename = "$dirname/$language.lang.php";
|
|
|
|
$contents =create_dropdown_lang_pak_contents(
|
|
$app_list_strings,
|
|
$language
|
|
);
|
|
|
|
if (sugar_file_put_contents($filename, $contents) !== false) {
|
|
$return_value = true;
|
|
$GLOBALS['log']->info("Successful write to: $filename");
|
|
} else {
|
|
$GLOBALS['log']->info("Unable to write edited language pak to file: $filename");
|
|
}
|
|
} else {
|
|
$GLOBALS['log']->info("Unable to create dir: $dirname");
|
|
}
|
|
if ($return_value) {
|
|
$cache_key = 'app_list_strings.'.$language;
|
|
sugar_cache_clear($cache_key);
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
function return_custom_app_list_strings_file_contents($language, $custom_filename = '')
|
|
{
|
|
$contents = '';
|
|
|
|
$filename = "custom/include/language/$language.lang.php";
|
|
if (!empty($custom_filename)) {
|
|
$filename = $custom_filename;
|
|
}
|
|
|
|
if (is_file($filename)) {
|
|
$contents = file_get_contents($filename);
|
|
}
|
|
|
|
return $contents;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
* @param dropdown_name string, language string
|
|
* @desc Creates a new dropdown type.
|
|
*/
|
|
function create_dropdown_type($dropdown_name, $language)
|
|
{
|
|
$return_value = false;
|
|
$app_list_strings = return_app_list_strings_language($language);
|
|
|
|
if (isset($app_list_strings[$dropdown_name])) {
|
|
$GLOBALS['log']->info("Tried to create a dropdown list key that already exists: $dropdown_name");
|
|
} else {
|
|
// get the contents of the custom app list strings file
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
|
|
// add the new dropdown_name to it
|
|
if ($contents == '') {
|
|
$new_contents = "<?php\n\$app_list_strings['$dropdown_name'] = array(''=>'');\n?>";
|
|
} else {
|
|
$new_contents = str_replace('?>', "\$app_list_strings['$dropdown_name'] = array(''=>'');\n?>", (string) $contents);
|
|
}
|
|
|
|
// save the new contents to file
|
|
$return_value = save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
|
|
return $return_value;
|
|
}
|
|
|
|
/**
|
|
* @return string&
|
|
* @param identifier string, pairs array, first_entry string, selected_key string
|
|
* @desc Generates the HTML for a dropdown list.
|
|
*/
|
|
function &create_dropdown_html($identifier, &$pairs, $first_entry='', $selected_key='')
|
|
{
|
|
$html = "<select name=\"$identifier\">\n";
|
|
|
|
if ('' != $first_entry) {
|
|
$html .= "<option name=\"\">$first_entry</option>\n";
|
|
}
|
|
|
|
foreach ($pairs as $key => $value) {
|
|
$html .= $selected_key == $key ?
|
|
"<option name=\"$key\" selected=\"selected\">$value</option>\n" :
|
|
"<option name=\"$key\">$value</option>\n";
|
|
}
|
|
|
|
$html .= "</select>\n";
|
|
|
|
return $html;
|
|
}
|
|
|
|
|
|
function dropdown_item_delete($dropdown_type, $language, $index)
|
|
{
|
|
$app_list_strings_to_edit = return_app_list_strings_language($language);
|
|
$dropdown_array =$app_list_strings_to_edit[$dropdown_type];
|
|
helper_dropdown_item_delete($dropdown_array, $index);
|
|
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
$new_contents = replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$contents
|
|
);
|
|
|
|
save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
|
|
function helper_dropdown_item_delete(&$dropdown_array, $index)
|
|
{
|
|
// perform the delete from the array
|
|
$sliced_off_array = array_splice($dropdown_array, $index);
|
|
array_shift($sliced_off_array);
|
|
$dropdown_array = array_merge($dropdown_array, $sliced_off_array);
|
|
}
|
|
|
|
function dropdown_item_move_up($dropdown_type, $language, $index)
|
|
{
|
|
$app_list_strings_to_edit = return_app_list_strings_language($language);
|
|
$dropdown_array =$app_list_strings_to_edit[$dropdown_type];
|
|
|
|
if ($index > 0 && $index < (is_countable($dropdown_array) ? count($dropdown_array) : 0)) {
|
|
$key = '';
|
|
$value = '';
|
|
$i = 0;
|
|
|
|
reset($dropdown_array);
|
|
foreach ($dropdown_array as $k => $v) {
|
|
if ($i == $index) {
|
|
$key = $k;
|
|
$value = $v;
|
|
break;
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
helper_dropdown_item_delete($dropdown_array, $index);
|
|
helper_dropdown_item_insert($dropdown_array, $index - 1, $key, $value);
|
|
|
|
// get the contents of the custom app list strings file
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
$new_contents = replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$contents
|
|
);
|
|
|
|
save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
}
|
|
|
|
function dropdown_item_move_down($dropdown_type, $language, $index)
|
|
{
|
|
$app_list_strings_to_edit = return_app_list_strings_language($language);
|
|
$dropdown_array =$app_list_strings_to_edit[$dropdown_type];
|
|
|
|
if ($index >= 0 && $index < (is_countable($dropdown_array) ? count($dropdown_array) : 0) - 1) {
|
|
$key = '';
|
|
$value = '';
|
|
$i = 0;
|
|
|
|
reset($dropdown_array);
|
|
foreach ($dropdown_array as $k => $v) {
|
|
if ($i == $index) {
|
|
$key = $k;
|
|
$value = $v;
|
|
break;
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
helper_dropdown_item_delete($dropdown_array, $index);
|
|
helper_dropdown_item_insert($dropdown_array, $index + 1, $key, $value);
|
|
|
|
// get the contents of the custom app list strings file
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
$new_contents = replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$contents
|
|
);
|
|
|
|
save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
}
|
|
|
|
function dropdown_item_insert($dropdown_type, $language, $index, $key, $value)
|
|
{
|
|
$app_list_strings_to_edit = return_app_list_strings_language($language);
|
|
$dropdown_array =$app_list_strings_to_edit[$dropdown_type];
|
|
helper_dropdown_item_insert($dropdown_array, $index, $key, $value);
|
|
|
|
// get the contents of the custom app list strings file
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
$new_contents = replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$contents
|
|
);
|
|
|
|
save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
|
|
function helper_dropdown_item_insert(&$dropdown_array, $index, $key, $value)
|
|
{
|
|
$pair = array($key => $value);
|
|
if ($index <= 0) {
|
|
$dropdown_array = array_merge($pair, $dropdown_array);
|
|
}
|
|
if ($index >= (is_countable($dropdown_array) ? count($dropdown_array) : 0)) {
|
|
$dropdown_array = array_merge($dropdown_array, $pair);
|
|
} else {
|
|
$sliced_off_array = array_splice($dropdown_array, $index);
|
|
$dropdown_array = array_merge($dropdown_array, $pair);
|
|
$dropdown_array = array_merge($dropdown_array, $sliced_off_array);
|
|
}
|
|
}
|
|
|
|
function dropdown_item_edit($dropdown_type, $language, $key, $value)
|
|
{
|
|
$app_list_strings_to_edit = return_app_list_strings_language($language);
|
|
$dropdown_array =$app_list_strings_to_edit[$dropdown_type];
|
|
|
|
$dropdown_array[$key] = $value;
|
|
|
|
$contents = return_custom_app_list_strings_file_contents($language);
|
|
|
|
// get the contents of the custom app list strings file
|
|
$new_contents = replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$contents
|
|
);
|
|
|
|
save_custom_app_list_strings_contents($new_contents, $language);
|
|
}
|
|
|
|
function replace_or_add_dropdown_type(
|
|
$dropdown_type,
|
|
&$dropdown_array,
|
|
&$file_contents
|
|
) {
|
|
$new_contents = "<?php\n?>";
|
|
$new_entry = override_value_to_string(
|
|
'app_list_strings',
|
|
$dropdown_type,
|
|
$dropdown_array
|
|
);
|
|
|
|
if (empty($file_contents)) {
|
|
// empty file, must create the php tags
|
|
$new_contents = "<?php\n$new_entry\n?>";
|
|
} else {
|
|
// existing file, try to replace
|
|
$new_contents = replace_dropdown_type(
|
|
$dropdown_type,
|
|
$dropdown_array,
|
|
$file_contents
|
|
);
|
|
|
|
$new_contents = dropdown_duplicate_check($dropdown_type, $new_contents);
|
|
|
|
if ($new_contents == $file_contents) {
|
|
// replace failed, append to end of file
|
|
$new_contents = str_replace("?>", '', (string) $file_contents);
|
|
$new_contents .= "\n$new_entry\n?>";
|
|
}
|
|
}
|
|
|
|
return $new_contents;
|
|
}
|
|
|
|
function replace_or_add_app_string(
|
|
$name,
|
|
$value,
|
|
&$file_contents
|
|
) {
|
|
$new_contents = "<?php\n?>";
|
|
$new_entry = override_value_to_string(
|
|
'app_strings',
|
|
$name,
|
|
$value
|
|
);
|
|
|
|
if (empty($file_contents)) {
|
|
// empty file, must create the php tags
|
|
$new_contents = "<?php\n$new_entry\n?>";
|
|
} else {
|
|
// existing file, try to replace
|
|
$new_contents = replace_app_string(
|
|
$name,
|
|
$value,
|
|
$file_contents
|
|
);
|
|
|
|
$new_contents = app_string_duplicate_check($name, $new_contents);
|
|
|
|
if ($new_contents == $file_contents) {
|
|
// replace failed, append to end of file
|
|
$new_contents = str_replace("?>", '', (string) $file_contents);
|
|
$new_contents .= "\n$new_entry\n?>";
|
|
}
|
|
}
|
|
|
|
return $new_contents;
|
|
}
|
|
|
|
|
|
function dropdown_duplicate_check($dropdown_type, &$file_contents)
|
|
{
|
|
if (!empty($dropdown_type) &&
|
|
!empty($file_contents)) {
|
|
$pattern = '/\$app_list_strings\[\''. $dropdown_type .
|
|
'\'\][\ ]*=[\ ]*array[\ ]*\([^\)]*\)[\ ]*;/';
|
|
|
|
$result = array();
|
|
preg_match_all($pattern, (string) $file_contents, $result);
|
|
|
|
if ((is_countable($result[0]) ? count($result[0]) : 0) > 1) {
|
|
$new_entry = $result[0][0];
|
|
$new_contents = preg_replace($pattern, '', (string) $file_contents);
|
|
|
|
// Append the new entry.
|
|
$new_contents = str_replace("?>", '', $new_contents);
|
|
$new_contents .= "\n$new_entry\n?>";
|
|
return $new_contents;
|
|
}
|
|
|
|
return $file_contents;
|
|
}
|
|
|
|
return $file_contents;
|
|
}
|
|
|
|
function replace_dropdown_type(
|
|
$dropdown_type,
|
|
&$dropdown_array,
|
|
&$file_contents
|
|
) {
|
|
$new_contents = $file_contents;
|
|
|
|
if (!empty($dropdown_type) &&
|
|
is_array($dropdown_array) &&
|
|
!empty($file_contents)) {
|
|
$pattern = '/\$app_list_strings\[\''. $dropdown_type .
|
|
'\'\][\ ]*=[\ ]*array[\ ]*\([^\)]*\)[\ ]*;/';
|
|
$replacement = override_value_to_string(
|
|
'app_list_strings',
|
|
$dropdown_type,
|
|
$dropdown_array
|
|
);
|
|
$new_contents = preg_replace($pattern, $replacement, (string) $file_contents, 1);
|
|
}
|
|
|
|
return $new_contents;
|
|
}
|
|
|
|
function replace_app_string(
|
|
$name,
|
|
$value,
|
|
&$file_contents
|
|
) {
|
|
$new_contents = $file_contents;
|
|
|
|
if (!empty($name) &&
|
|
is_string($value) &&
|
|
!empty($file_contents)) {
|
|
$pattern = '/\$app_strings\[\''. $name .'\'\][\ ]*=[\ ]*\'[^\']*\'[\ ]*;/';
|
|
$replacement = override_value_to_string(
|
|
'app_strings',
|
|
$name,
|
|
$value
|
|
);
|
|
$new_contents = preg_replace($pattern, $replacement, (string) $file_contents, 1);
|
|
}
|
|
|
|
return $new_contents;
|
|
}
|
|
|
|
function app_string_duplicate_check($name, &$file_contents)
|
|
{
|
|
if (!empty($name) &&
|
|
!empty($file_contents)) {
|
|
$pattern = '/\$app_strings\[\''. $name .'\'\][\ ]*=[\ ]*\'[^\']*\'[\ ]*;/';
|
|
|
|
$result = array();
|
|
preg_match_all($pattern, (string) $file_contents, $result);
|
|
|
|
if ((is_countable($result[0]) ? count($result[0]) : 0) > 1) {
|
|
$new_entry = $result[0][0];
|
|
$new_contents = preg_replace($pattern, '', (string) $file_contents);
|
|
|
|
// Append the new entry.
|
|
$new_contents = str_replace("?>", '', $new_contents);
|
|
$new_contents .= "\n$new_entry\n?>";
|
|
return $new_contents;
|
|
}
|
|
return $file_contents;
|
|
}
|
|
|
|
return $file_contents;
|
|
}
|