Raffales-LMS/app/Helpers/bibHelper.php
2024-04-16 15:43:24 +05:45

695 lines
25 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use App\Helpers\BibClass;
use App\Http\Controllers\NepaliDictonary\DictonaryController;
use App\Models\Log\ActivityLog;
use App\Models\Log\ErrorLog;
use App\Models\Log\OperationLog;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
function pre($object, $die = false)
{
echo "<pre>";
print_r($object);
echo "</pre>";
if ($die) die;
}
function label($text, $echo = true)
{
if ($echo) {
echo $text;
} else {
return $text;
}
}
function template($filepath)
{
$filepath = env("APP_URL") .'/' .env("CLIENT_PATH") . '/' . $filepath;
// $filepath=str_replace('\\','/',env("APP_URL")."/layout/".$filepath);
echo $filepath;
// return
}
if (!function_exists('N2')) {
function N2($N)
{
return number_format($N, 2, '.', ',');
}
}
if (!function_exists('slugify')) {
function slugify($text, $tableName = null)
{
// Generate the initial slug from the text
$slug = preg_replace('/[^a-zA-Z0-9\-]/', '-', $text);
$slug = preg_replace('/-+/', '-', $slug);
$slug = trim($slug, '-');
$slug = strtolower($slug);
// If the table name is provided, check for uniqueness and modify the slug if needed
if ($tableName) {
$originalSlug = $slug;
$count = 1;
while (isSlugExists($tableName, $slug)) {
$slug = $originalSlug . '-' . $count;
$count++;
}
}
return $slug;
}
}
if (!function_exists('isSlugExists')) {
function isSlugExists($tableName, $slug)
{
$aliasField = 'alias';
$count = DB::table($tableName)
->where($aliasField, $slug)
->count();
return $count > 0;
}
}
function createButton($class = "", $type = "submit", $display = "Submit", $url = "")
{
if (!$url) :
?>
<button class="btn <?php echo $class; ?>" type="<?php echo ($display == "Submit") ? $display : $type; ?>">
<?php echo label($display) ?>
</button>
<?php
else :
?>
<a class="btn <?php echo $class; ?>" href="<?php echo $url; ?>">
<?php echo label($display) ?>
</a>
<?php
endif;
}
function createText($name, $id, $display, $class = "", $value = "", $placeHolder = "", $readonly = "", $required = "")
{
?>
<?php if ($display != "") : ?><label for="<?php echo $id; ?>" class="form-label col-form-label"> <?php echo label($display); ?> </label><?php endif; ?>
<div class="form-control-wrap">
<input type="text" id="<?php echo $id; ?>" <?php echo $readonly; ?> placeholder="<?php echo $placeHolder; ?>" name="<?php echo $name; ?>" class="form-control <?php echo $class; ?>" value="<?php echo $value; ?>" <?php if ($required != "") : ?>required<?php endif; ?>>
</div>
<p id='error_<?php echo $name; ?>' class='text-danger custom-error'></p>
<?php
}
/**
* $tableName = Name of table
* $pk = primary key of table
* $name = table select column name
* $class = extra class
* $data = Existing data or for edit case showing selected data
* $display = Displaying name or showing label name.
*/
function getSelectForForeignColumn($tableName, $pk, $name, $class = "form-control", $data = null, $display = null, $customColumnName = null)
{
$tableName = strtolower(trim($tableName));
$pk = trim($pk);
$name = trim($name);
$class = trim($class);
$systems = DB::table($tableName)->where('status', '<>', -1)->orderBy($pk, 'asc')->pluck($name, $pk);
$customColumnName = !empty($customColumnName) ? $customColumnName : $pk; //if we pass column name other then primary key.
customCreateSelect($pk, $pk, $class, $display ?? $name, $systems, ($data) ? $data->$customColumnName : null);
}
function customCreateSelect($name, $id, $class = "form-control", $display = '', $values = array(), $defaultValue = '')
{
$disabled = (in_array("DISABLED", explode(" ", strtoupper($class)))) ? "Disabled" : false;
$required = (in_array("REQUIRED", explode(" ", strtoupper($class)))) ? "Required" : false;
?><label for="<?php echo $id; ?>" class="form-label col-form-label"> <?php echo label($display); ?> </label>
<?php if ($disabled) : ?>
<input type="hidden" name="<?php echo $name; ?>" value="<?php echo $defaultValue; ?>" /><?php endif; ?>
<select class="form-select <?php echo $class ?>" name="<?php echo $name; ?>" data-search="true" id="<?php echo $name; ?>" aria-label="Default select example" <?php echo ($disabled) ? "Disabled" : ""; ?> <?php echo ($required) ? "Required" : ""; ?>>
<option value=""><?php label("Select Option"); ?></option>
<?php foreach ($values as $key => $value) { ?>
<option value="<?= $key ?>" <?php echo $defaultValue == $key ? 'selected' : '' ?>><?= $value ?></option>
<?php } ?>
</select>
<p id='error_<?php echo $name; ?>' class='text-danger custom-error'></p>
<?php
}
function createCustomSelectFromArray($Array, $displayTextForLabel, $HTMLElementName, $defaultValueSelected = '', $additionalClass = "form-control")
{
$disabled = (in_array("DISABLED", explode(" ", strtoupper($additionalClass)))) ? "Disabled" : false;
$required = (in_array("REQUIRED", explode(" ", strtoupper($additionalClass)))) ? "Required" : false;
?>
<label for="<?php echo $HTMLElementName; ?>" class="form-label col-form-label"> <?php echo label($displayTextForLabel); ?> </label>
<?php if ($disabled) : ?>
<input type="hidden" name="<?php echo $HTMLElementName; ?>" value="<?php echo $defaultValueSelected; ?>" />
<?php endif; ?>
<select class="form-select <?php echo $additionalClass ?>" name="<?php echo $HTMLElementName; ?>" data-search="true" id="<?php echo $HTMLElementName; ?>" aria-label="Default select example" <?php echo ($disabled) ? "Disabled" : ""; ?> <?php echo ($required) ? "Required" : ""; ?>>
<option <?php if ($required) : ?>value="-1" <?php endif; ?>><?php label("Select Option"); ?></option>
<?php foreach ($Array as $option) : ?>
<option value="<?php echo $option['value']; ?>" <?php echo $defaultValueSelected == $option['value'] ? 'selected' : ''; ?>>
<?php echo $option['display']; ?>
</option>
<?php endforeach; ?>
</select>
<p id='error_<?php echo $HTMLElementName; ?>' class='text-danger custom-error'></p>
<?php
}
function createCustomSelect($tableName, $fieldNameToDisplay, $fieldNameForValue, $defaultValueSelected, $displayTextForLabel, $HTMLElementName, $additionalClass = "form-control", $defaultCondition = null, $extra = null)
{
// Supply conditions as $defaultCondition = "column_name = 'value'";
$tableName = strtolower(trim($tableName));
$fieldNameToDisplay = trim($fieldNameToDisplay);
$fieldNameForValue = trim($fieldNameForValue);
$additionalClass = trim($additionalClass);
$query = DB::table(DB::raw("`$tableName`"))->where('status', '<>', -1);
if ($defaultCondition) {
$query->whereRaw($defaultCondition);
}
$systems = $query->orderBy($fieldNameForValue, 'asc')->pluck($fieldNameToDisplay, $fieldNameForValue);
?><?php if ($displayTextForLabel != '') : ?><label class="form-label col-form-label"><?php echo label($displayTextForLabel); ?></label><?php endif; ?>
<select class="form-select <?php echo $additionalClass; ?>" name="<?php echo $HTMLElementName; ?>" data-search="true" aria-label="" <?php if (stripos($additionalClass, 'required') !== false) {
echo "REQUIRED";
} ?> <?php echo $extra; ?>>
<?php if (stripos($additionalClass, 'required') !== false) { ?>
<option value=""><?php label("Select Option"); ?></option>
<?php } else { ?>
<option value="0"><?php label("Select Option"); ?></option>
<?php } ?>
<?php foreach ($systems as $key => $value) { ?>
<option value="<?= $key ?>" <?php echo $defaultValueSelected == $key ? 'selected' : '' ?>><?= $value ?></option>
<?php } ?>
</select>
<p id='error_<?php echo $fieldNameForValue; ?>' class='text-danger custom-error'></p>
<?php
}
function createImageInput($name, $display = "", $class = "", $default = "")
{
?>
<div class="input-group">
<span class="input-group-btn">
<a id="<?php echo $name; ?>" data-input="<?php echo $name; ?>_url" data-preview="<?php echo $name; ?>holder" class="btn btn-primary">
<i class="fa fa-picture-o"></i> <?php echo ($display != "") ? $display : "Upload"; ?>
</a>
</span>
<input id="<?php echo $name; ?>_url" class="form-control lfm <?php echo $class; ?>" type="text" name="<?php echo $name; ?>" <?php if ($default != "") : ?> value="<?php echo env("APP_URL") . "/" . $default; ?>" <?php endif; ?> multiple>
</div>
<div id="<?php echo $name; ?>holder" style="margin-top:15px;max-height:80px;overflow:hidden;">
<?php if ($default != "") : ?> <img src="<?php echo env("APP_URL") . "/" . $default; ?>" style="height: 5rem" /> <?php endif; ?>
</div>
<?php
collectScripts(function () use ($name) {
?>
<script>
lfm('<?php echo $name; ?>', 'image', {
prefix: '<?php echo env("APP_URL"); ?>/files'
});
</script>
<?php });
}
function createMultiImageInput($name, $display = "", $class = "", $default = "")
{
?>
<div class="input-group">
<span class="input-group-btn">
<a id="<?php echo $name; ?>" data-input="<?php echo $name; ?>_url" data-preview="<?php echo $name; ?>holder" class="btn btn-primary">
<i class="fa fa-picture-o"></i> <?php echo ($display != "") ? $display : "Choose Photo"; ?>
</a>
</span>
<input id="<?php echo $name; ?>_url" class="form-control lfm <?php echo $class; ?>" type="text" name="<?php echo $name; ?>" <?php if ($default != "") : ?> value="<?php echo env("APP_URL") . "/" . $default; ?>" <?php endif; ?> multiple>
</div>
<div id="<?php echo $name; ?>holder" style="margin-top:15px;max-height:80px;overflow:hidden;">
<?php if ($default != "") : ?> <img src="<?php echo env("APP_URL") . "/" . $default; ?>" style="height: 5rem" /> <?php endif; ?>
</div>
<?php
collectScripts(function () use ($name) {
?>
<script>
lfm('<?php echo $name; ?>', 'image', {
prefix: '<?php echo env("APP_URL"); ?>/files',
type: 'file',
multi_selection: true
});
</script>
<?php });
}
function site_url($url = "")
{
return env("APP_URL") . "/" . trim($url, "/");
}
function base_url($url = "")
{
return env("APP_URL") . "/" . trim($url, "/");
}
function showImageThumb($url)
{ ?>
<div style="max-height:40px;overflow:hidden">
<?php if ($url != "") : ?> <img src="<?php echo env("APP_URL") . "/" . $url; ?>" style="height: 40px;" class="img-fluid" /> <?php endif; ?>
</div>
<?php
}
function getFieldData($tableName, $returnField, $referenceFieldName, $referenceValue)
{
$tableName = strtolower(trim($tableName));
$returnField = trim($returnField);
$referenceFieldName = trim($referenceFieldName);
$query = DB::table(DB::raw("`$tableName`"))->where($referenceFieldName, $referenceValue);
$fieldData = ($query->value($returnField)) ? $query->value($returnField) : "N/A";
return $fieldData;
}
function createErrorParagraph($name, $class = null)
{
echo "<p id='error_$name' class='text-danger custom-error $class'></p>";
}
function createActivityLog($controllerName, $methodName, $activity)
{
$user_id = (auth()->user()) ? auth()->user()->id : "0";
ActivityLog::create([
'user_id' => $user_id,
'controllerName' => $controllerName,
'methodName' => $methodName,
'actionUrl' => request()->fullUrl(),
'activity' => $activity,
]);
}
function getOperationNumber()
{
$startNumber = date('YmdHis') . rand(1000, 9999);
$isExists = OperationLog::where('operation_end_no', $startNumber)->first();
while ($isExists) {
$startNumber = date('YmdHis') . rand(1000, 9999);
$isExists = OperationLog::where('operation_end_no', $startNumber)->first();
}
return $startNumber;
}
function createOperationLog($startOperationNumber, $endOperationNumber, $modelName, $modelId, $operationName, $previousValues, $newValues)
{
$operationId = getOperationNumber();
$user_id = (auth()->user()) ? auth()->user()->id : "0";
OperationLog::create([
'user_id' => $user_id,
'operation_start_no' => $startOperationNumber,
'operation_end_no' => $endOperationNumber,
'model_name' => $modelName,
'model_id' => $modelId,
'operation_name' => $operationName,
'previous_values' => $previousValues ? json_encode($previousValues) : null,
'new_values' => $newValues ? json_encode($newValues) : null,
]);
}
function createErrorLog($controllerName, $methodName, $errors)
{
$user_id = (auth()->user()) ? auth()->user()->id : "0";
ErrorLog::create([
'user_id' => $user_id,
'controller_name' => $controllerName,
'method_name' => $methodName,
'errors' => $errors,
]);
}
function createDate($name, $display = "", $class = "datepicker", $default = "")
{
?>
<div class="form-group">
<label for="<?php echo $name; ?>" class="form-label col-form-label"><?php echo label($display); ?></label>
<div class="form-control-wrap">
<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" class="form-control datepicker<?php echo $class; ?>" value="<?php echo $default; ?>" />
</div>
</div>
<?php
}
function createPassword($name, $display = "", $class = "password", $default = "")
{
?>
<div class="form-group">
<label for="<?php echo $name; ?>" class="form-label col-form-label"><?php echo label($display); ?></label>
<div class="form-control-wrap">
<input type="password" name="<?php echo $name; ?>" id="<?php echo $name; ?>" class="form-control <?php echo $class; ?>" value="<?php echo $default; ?>" />
</div>
</div>
<?php
}
function createTextArea($name, $class = "", $display = "", $default = "", $row = "")
{
$hasCkeditorClassic = strpos($class, 'ckeditor-classic') !== false;
$uploadUrlAttribute = $hasCkeditorClassic ? ' data-upload-url="' . route('upload') . '"' : '';
?>
<div class="form-group">
<label for="<?php echo $name; ?>" class="form-label col-form-label"><?php echo label($display); ?></label>
<div class="form-control-wrap">
<textarea class="form-control text-area <?php echo $class; ?>" name="<?php echo $name; ?>" id="<?php echo $name; ?>" rows="<?php echo $row; ?>" <?php echo $uploadUrlAttribute; ?>><?php if (isset($default)) {
echo ($default);
} ?></textarea>
</div>
</div>
<?php
}
function createPlainTextArea($name, $class = "", $display = "", $default = "", $row = "")
{
?>
<div class="form-group">
<label for="<?php echo $name; ?>" class="form-label col-form-label"><?php echo label($display); ?></label>
<div class="form-control-wrap">
<textarea class="form-control text-area <?php echo $class; ?>" name="<?php echo $name; ?>" id="<?php echo $name; ?>" rows="<?php echo $row; ?>"><?php if (isset($default)) {
echo ($default);
} ?></textarea>
</div>
</div>
<?php
}
function getDisplayOrder($tableName)
{
// echo $tableName;die;
$maxDisplayOrder = DB::select("select max(display_order) as display_order from $tableName")[0]->display_order;
$nextDisplayOrder = $maxDisplayOrder + 1;
return $nextDisplayOrder;
}
function getAlias($textField, $tableName)
{
$maxDisplayOrder = DB::select("select max(display_order) as display_order from $tableName")[0]->display_order;
$nextDisplayOrder = $maxDisplayOrder + 1;
return $nextDisplayOrder;
}
if (!function_exists('myDate')) {
function myDate($originalDate)
{
return date("F d Y", strtotime($originalDate));
}
}
if (!function_exists('dbDate')) {
function dbDate($date)
{
return date("Y-m-d", strtotime($date));
}
}
if (!function_exists('myTime')) {
function myTime($originalDate)
{
return date("g:i A", strtotime($originalDate));
}
}
if (!function_exists('myDateTime')) {
function myDateTime($originalDate)
{
return date("F d Y g:i A", strtotime($originalDate));
}
}
if (!function_exists('myDaysDiff')) {
function myDaysDiff($fromDate, $toDate)
{
$fromDate = strtotime($fromDate);
$toDate = strtotime($toDate);
$datediff = $toDate - $fromDate;
return round($datediff / (60 * 60 * 24));
}
}
if (!function_exists('firstDayOfNepaliMonth')) {
function firstDayOfNepaliMonth($engDate = "")
{
$engDate = ($engDate != "") ? $engDate : date("Y-m-d");
$NepaliDate = NepaliDate($engDate);
$nD = explode("-", $NepaliDate);
$Day = '1';
$Month = $nD[1];
$Year = $nD[0];
$t = "select bs_date from tbl_nepengcalendar where bs_date='" . $Year . "-" . $Month . "-" . $Day . "'";
return DB::select($t)[0]->bs_date;
}
}
if (!function_exists('firstDayOfNepaliMonth1')) {
function firstDayOfNepaliMonth1($engDate = "")
{
$engDate = ($engDate != "") ? $engDate : date("Y-m-d");
$NepaliDate = NepaliDate($engDate);
$nD = explode("-", $NepaliDate);
$Day = '1';
$Month = ($nD[1] < 10) ? '0' . $nD[1] : $nD[1];
$Year = $nD[0];
$t = "select ad_date from tbl_nepengcalendar where bs_date='" . $Year . "-" . $Month . "-" . $Day . "'";
return DB::select($t)[0]->ad_date;
}
}
if (!function_exists('lastDayOfNepaliMonth')) {
function lastDayOfNepaliMonth($engDate = "")
{
$engDate = ($engDate != "") ? $engDate : date("Y-m-d");
$NepaliDate = NepaliDate1($engDate);
$nD = explode("-", $NepaliDate);
$Day = '1';
$Month = $nD[1];
$Year = $nD[0];
$t = "select ad_date from tbl_nepengcalendar where bs_date like '" . $Year . "-" . $Month . "-%' order by ad_date";
$dates = DB::select($t);
$date = end($dates);
return $date->ad_date;
}
}
if (!function_exists('EnglishDate')) {
function EnglishDate($NepaliYear, $NepaliMonth, $NepaliDay)
{
if ($NepaliMonth < 10) {
$NepaliMonth = "0" . $NepaliMonth;
}
$bs_date = $NepaliYear . "-" . $NepaliMonth . "-" . $NepaliDay;
$t = "select ad_date from tbl_nepengcalendar where bs_date='$bs_date'";
$q = DB::select($t);
return $q[0]->ad_date;
}
}
if (!function_exists('Today')) {
function Today()
{
return date("Y-m-d");
}
}
if (!function_exists('NepaliToEnglishDate')) {
function NepaliToEnglishDate($NepaliDate)
{
$NepaliDate = trim($NepaliDate);
if (trim($NepaliDate) == "") {
return date("Y-m-d");
}
$NepaliDate = explode("-", $NepaliDate);
$NepaliMonth = intval($NepaliDate[1]);
$NepaliYear = intval($NepaliDate[0]);
$NepaliDay = intval($NepaliDate[2]);
if ($NepaliMonth < 10) {
$NepaliMonth = "0" . $NepaliMonth;
}
$bs_date = $NepaliYear . "-" . $NepaliMonth . "-" . $NepaliDay;
$t = "select ad_date from tbl_nepengcalendar where bs_date='$bs_date'";
$q = DB::select($t);
return $q[0]->ad_date;
}
}
if (!function_exists('NepaliDate')) {
function NepaliDate($engDate = "")
{
$engDate = ($engDate != "") ? $engDate : date("Y-m-d");
if ($engDate != "0000-00-00") {
// return str_replace("-0", "-", DB::table('tbl_nepengcalendar')->where('ad_date', $engDate)->first()->bs_date);
$result = DB::table('tbl_nepengcalendar')->where('ad_date', $engDate)->first();
if ($result) {
$bsDate = $result->bs_date;
$convertedDate = convertNumbersToUnicode(str_replace("-", "-", $bsDate));
return $convertedDate;
} else {
// Handle the case when the query result is null
return null;
}
} else {
return "";
}
}
}
function convertNumbersToUnicode($number = "2080-10-13")
{
$unicodeDigits = [
'0' => '',
'1' => '१',
'2' => '२',
'3' => '३',
'4' => '४',
'5' => '५',
'6' => '६',
'7' => '७',
'8' => '८',
'9' => '९',
];
$converted = '';
$digits = str_split((string)$number);
foreach ($digits as $digit) {
if (isset($unicodeDigits[$digit])) {
$converted .= $unicodeDigits[$digit];
} elseif ($digit === '-') {
$converted .= '-';
} else {
$converted .= $digit;
}
}
//dd($converted);
return $converted;
}
if (!function_exists('NepaliMonth')) {
function NepaliMonth($engDate = "")
{
$NepaliDate = NepaliDate($engDate);
$nD = explode("-", $NepaliDate);
$Month = $nD[1];
return intval($Month);
}
}
if (!function_exists('NepaliYear')) {
function NepaliYear($engDate = "")
{
$NepaliDate = NepaliDate($engDate);
$nD = explode("-", $NepaliDate);
$Year = $nD[0];
return intval($Year);
}
}
if (!function_exists('NepaliMonthNameByNumber')) {
function NepaliMonthNameByNumber($number)
{
$MonthNames = array(
"Baisakh", "Jestha", "Ashad", "Shrawan", "Bhadra", "Asoj",
"Kartik", "Mangsir", "Poush", "Magh", "Falgun", "Chaitra"
);
return $MonthNames[$number - 1];
}
}
if (!function_exists('NepaliMonthName')) {
function NepaliMonthName($engDate = "")
{
$Month = NepaliMonth($engDate);
$MonthNames = array(
"Baisakh", "Jestha", "Ashad", "Shrawan", "Bhadra", "Asoj",
"Kartik", "Mangsir", "Poush", "Magh", "Falgun", "Chaitra"
);
return $MonthNames[$Month - 1];
}
}
if (!function_exists('N2')) {
function N2($N)
{
return number_format($N, 2, '.', ',');
}
}
function collectScripts(callable $callback)
{
ob_start();
$callback();
$script = ob_get_clean();
if (!empty($script)) {
pushScriptToFooter($script);
}
}
function pushScriptToFooter($script)
{
if (!isset($GLOBALS['scripts'])) {
$GLOBALS['scripts'] = [];
}
$GLOBALS['scripts'][] = $script;
}
function sectionHeader($text, $sectiontitle = null)
{
$texts = explode(" ", $text);
?>
<div class="row text-center intro">
<div class="col-12">
<?php if ($sectiontitle) : ?>
<span class="pre-title"><?php echo $sectiontitle; ?></span>
<?php endif; ?>
<h2 class="ylw-clr"><?php echo $texts[0];
unset($texts[0]); ?> <span class="featured"><span><?php echo implode(" ", $texts); ?></span></span></h2>
</div>
</div>
<?php
}
if (!function_exists('replace_img_src')) {
function replace_img_src($content)
{
return preg_replace(
'/src="storage(\/[^"]*)"/',
'src="' . site_url() . 'storage$1"',
$content
);
}
}
function processForShortcode($content)
{
$content = replace_img_src($content);
return preg_replace_callback('/\[([\w_]+)([^]]*)\]/', function ($matches) {
$shortcodeName = $matches[1];
$shortcodeAttributes = [];
$mandatoryAttributes = ['alias', 'css', 'title'];
preg_match_all('/\s*(\w+)\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([^"\'][^\s]*))/', $matches[2], $attrMatches, PREG_SET_ORDER);
foreach ($attrMatches as $attrMatch) {
$attrName = $attrMatch[1];
$attrValue = $attrMatch[2] ?: ($attrMatch[3] ?: $attrMatch[4]); // Use non-empty capture group as the attribute value
$attrValue = trim($attrValue, "\"'"); // Remove both single and double quotes from the attribute value
$shortcodeAttributes[$attrName] = $attrValue;
}
// Fill in missing mandatory attributes with empty strings
foreach ($mandatoryAttributes as $attribute) {
if (!isset($shortcodeAttributes[$attribute])) {
$shortcodeAttributes[$attribute] = '';
}
}
return view("shortcodes." . $shortcodeName, $shortcodeAttributes);
}, $content);
}