-
-
خلاصه سفارش
-
-
-
-
-
-
-
-
تعداد:
-
-
- رنگ:
-
-
-
-
-
-
-
-
-
-
-
-
جمع کل
-
تومان
+
+
+
+
+ آدرس
+
-
- هزینه ارسال
- رایگان
-
-
-
- مبلغ نهایی
- تومان
-
-
- ثبت نهایی سفارش
-
-
+
+
+
+
+
+
+
+
خلاصه سفارش شما
+
+
+
+ = htmlspecialchars($item['name']) ?> (x= $item['quantity'] ?>)
+ T = number_format($item['total']) ?>
+
+
+
+
+
+
+ جمع کل
+ T = number_format($total_price) ?>
+
+
+ هزینه ارسال
+ T = number_format($shipping_cost) ?>
+
+
+ مبلغ قابل پرداخت
+ T = number_format($grand_total) ?>
+
+
+
+
+
+
+ پرداخت و ثبت نهایی سفارش
+
+
-
-
+
+
-
-
-
\ No newline at end of file
+
diff --git a/checkout_handler.php b/checkout_handler.php
index 0fb0fb0f..3d9ba926 100644
--- a/checkout_handler.php
+++ b/checkout_handler.php
@@ -1,109 +1,158 @@
prepare("SELECT id, name, price FROM products WHERE id IN ($placeholders)");
+ $stmt->execute($product_ids);
+ $products_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+ // Create a map for quick lookup
+ $products_by_id = [];
+ foreach($products_data as $product) {
+ $products_by_id[$product['id']] = $product;
+ }
+
+ foreach ($cart as $product_id => $details) {
+ if (isset($products_by_id[$product_id])) {
+ $product = $products_by_id[$product_id];
+ $price = $product['price'];
+ $quantity = $details['quantity'];
+ $total_price += $price * $quantity;
+
+ $items_for_json[] = [
+ 'id' => $product_id,
+ 'name' => $product['name'],
+ 'price' => $price,
+ 'quantity' => $quantity,
+ 'color' => $details['color']
+ ];
+ }
+ }
+}
+
+$shipping_cost = 50000;
+$grand_total = $total_price + $shipping_cost;
+
+// == Database Operations ==
$pdo = db();
-$pdo->beginTransaction();
-
try {
- // 4. Prepare order data
- $billing_name = trim($first_name . ' ' . $last_name);
- $cart_items = $_SESSION['cart'];
- $total_amount = array_reduce($cart_items, function ($sum, $item) {
- return $sum + ($item['price'] * $item['quantity']);
- }, 0);
- $products_data_json = json_encode($cart_items, JSON_UNESCAPED_UNICODE);
+ $pdo->beginTransaction();
- // 5. Insert the order into the database using the correct, updated column names
- $stmt = $pdo->prepare(
- "INSERT INTO orders (user_id, billing_name, billing_email, billing_phone, billing_province, billing_city, billing_address, billing_postal_code, total_amount, items_json, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+ // 5. User Handling (Guest or Logged in)
+ $user_id = $_SESSION['user_id'] ?? null;
+
+ if (!$user_id) {
+ // For guests, check if user exists by phone
+ $user_stmt = $pdo->prepare("SELECT id FROM users WHERE phone_number = ?");
+ $user_stmt->execute([$phone_number]);
+ $existing_user = $user_stmt->fetch(PDO::FETCH_ASSOC);
+
+ if ($existing_user) {
+ $user_id = $existing_user['id'];
+ } else {
+ // Create a new user
+ $user_insert_stmt = $pdo->prepare("INSERT INTO users (first_name, last_name, email, phone_number, is_admin) VALUES (?, ?, ?, ?, 0)");
+ $user_insert_stmt->execute([$first_name, $last_name, $email, $phone_number]);
+ $user_id = $pdo->lastInsertId();
+ }
+ // Log the new/guest user in
+ $_SESSION['user_id'] = $user_id;
+ }
+
+ // 6. Generate a unique tracking ID
+ $tracking_id = 'FL-' . strtoupper(bin2hex(random_bytes(5)));
+
+ // 7. Insert the order into the database
+ $order_stmt = $pdo->prepare(
+ "INSERT INTO orders (user_id, billing_name, billing_email, billing_phone, billing_province, billing_city, billing_address, billing_postal_code, total_amount, items_json, status, tracking_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?)"
);
- $user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
- $status = 'Processing'; // Default status
- $final_email = ($email !== false && $email !== '') ? $email : null;
+ $full_name = $first_name . ' ' . $last_name;
+ $items_json_encoded = json_encode($items_for_json, JSON_UNESCAPED_UNICODE);
- $stmt->execute([
+ $order_stmt->execute([
$user_id,
- $billing_name,
- $final_email,
+ $full_name,
+ $email,
$phone_number,
$province,
$city,
$address_line,
$postal_code,
- $total_amount,
- $products_data_json,
- $status
+ $grand_total, // Storing the final amount including shipping
+ $items_json_encoded,
+ $tracking_id
]);
-
- $order_id = $pdo->lastInsertId();
- $tracking_id = uniqid('ATMH-');
- $update_stmt = $pdo->prepare("UPDATE orders SET tracking_id = ? WHERE id = ?");
- $update_stmt->execute([$tracking_id, $order_id]);
-
- // 6. If user is logged in, save the new address for future use
- if ($user_id) {
- $stmt_check_addr = $pdo->prepare("SELECT COUNT(*) FROM user_addresses WHERE user_id = ? AND address_line = ? AND postal_code = ?");
- $stmt_check_addr->execute([$user_id, $address_line, $postal_code]);
- $address_exists = $stmt_check_addr->fetchColumn();
-
- if ($address_exists == 0) {
- $stmt_save_addr = $pdo->prepare(
- "INSERT INTO user_addresses (user_id, first_name, last_name, phone_number, province, city, address_line, postal_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
- );
- $stmt_save_addr->execute([
- $user_id, $first_name, $last_name, $phone_number, $province, $city, $address_line, $postal_code
- ]);
- }
- }
-
- // 7. Commit transaction
$pdo->commit();
- // 8. Clear the cart and redirect with a success message including tracking ID
+ // 8. Clear cart and redirect to a success page
unset($_SESSION['cart']);
- $_SESSION['success_message'] = "سفارش شما با موفقیت ثبت شد! کد پیگیری شما:
" . htmlspecialchars($tracking_id) . " ";
- // As I don't have SMS capability, I am displaying the tracking code here.
- // You can later integrate an SMS service and send the tracking ID to $phone_number.
-
- header('Location: index.php');
- exit;
+ unset($_SESSION['form_data']);
+
+ header('Location: track_order.php?tracking_id=' . $tracking_id);
+ exit();
} catch (Exception $e) {
- // 9. If anything fails, rollback and redirect with an error
$pdo->rollBack();
- error_log("Order Creation Failed: " . $e->getMessage()); // Log error for admin
- $_SESSION['error_message'] = 'خطایی در ثبت سفارش رخ داد. لطفاً دوباره تلاش کنید.';
+ // Log the detailed error for developers
+ error_log('Checkout Error: ' . $e->getMessage());
+
+ // Set a user-friendly error message and redirect
+ $_SESSION['checkout_errors'] = ['یک خطای غیرمنتظره در هنگام ثبت سفارش رخ داد. لطفاً لحظاتی دیگر دوباره تلاش کنید.'];
+ $_SESSION['form_data'] = $_POST;
header('Location: checkout.php');
- exit;
-}
+ exit();
+}
\ No newline at end of file
diff --git a/contact.php b/contact.php
index cb61a5c1..1ccaf8cd 100644
--- a/contact.php
+++ b/contact.php
@@ -11,11 +11,11 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['contact_form'])) {
$message = trim(filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING));
if (empty($name) || empty($email) || empty($message)) {
- $_SESSION['flash_message'] = ['type' => 'error', 'message' => 'لطفاً تمام فیلدها را پر کنید.'];
+ $_SESSION['flash_message'] = ['type' => 'warning', 'message' => 'لطفاً تمام فیلدها را پر کنید.'];
} elseif (!$email) {
$_SESSION['flash_message'] = ['type' => 'error', 'message' => 'آدرس ایمیل وارد شده معتبر نیست.'];
} else {
- $to_email = getenv('MAIL_TO') ?: 'support@atimeh.com';
+ $to_email = getenv('MAIL_TO') ?: 'support@atimeh.com'; // Fallback email
$subject = "پیام جدید از فرم تماس وبسایت";
$email_result = MailService::sendContactMessage($name, $email, $message, $to_email, $subject);
@@ -27,12 +27,15 @@ if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['contact_form'])) {
}
}
+ // Redirect to the same page to prevent form resubmission
header("Location: contact.php");
exit();
}
+// Check for flash message
$flash_message = $_SESSION['flash_message'] ?? null;
if ($flash_message) {
+ // Clear the message from session so it doesn't show again
unset($_SESSION['flash_message']);
}
?>
@@ -49,21 +52,21 @@ if ($flash_message) {
راههای ارتباطی
-
+
آدرس:
تهران، خیابان هنر، کوچه خلاقیت، پلاک ۱۲
-
+
تلفن:
۰۲۱-۱۲۳۴۵۶۷۸
@@ -71,17 +74,17 @@ if ($flash_message) {
ما را دنبال کنید
-
+
-
+
\ No newline at end of file
diff --git a/db/migrations/015_allow_null_password_in_users.sql b/db/migrations/015_allow_null_password_in_users.sql
new file mode 100644
index 00000000..09196fd9
--- /dev/null
+++ b/db/migrations/015_allow_null_password_in_users.sql
@@ -0,0 +1 @@
+ALTER TABLE `users` CHANGE `password` `password` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL;
\ No newline at end of file
diff --git a/faq.php b/faq.php
new file mode 100644
index 00000000..d899b3c4
--- /dev/null
+++ b/faq.php
@@ -0,0 +1,86 @@
+
+
+
+
+
سوالات متداول
+
پاسخ به برخی از سوالات شما
+
+
+
+
+
+
+
+
+
+
+
شما میتوانید با مراجعه به بخش فروشگاه، محصولات مورد نظر خود را به سبد خرید اضافه کرده و سپس با تکمیل اطلاعات و پرداخت، سفارش خود را نهایی کنید.
+
+
+
+
+
+
+
+
+
سفارشها در تهران طی ۲ تا ۳ روز کاری و در سایر شهرها طی ۴ تا ۷ روز کاری از طریق پست پیشتاز ارسال میشوند. کد رهگیری پستی پس از ارسال، برای شما پیامک خواهد شد.
+
+
+
+
+
+
+
+
+
بله، در صورت عدم رضایت از محصول یا وجود هرگونه مغایرت، تا ۷ روز پس از دریافت کالا فرصت دارید تا آن را بازگردانید. لطفاً توجه داشته باشید که محصول نباید استفاده شده باشد و بستهبندی آن آسیب ندیده باشد. برای هماهنگی با پشتیبانی تماس بگیرید.
+
+
+
+
+
+
+
+
+
پس از ارسال سفارش، یک کد رهگیری ۲۴ رقمی از طریق پیامک برای شما ارسال میشود. شما میتوانید با مراجعه به وبسایت رسمی پست و وارد کردن این کد، از آخرین وضعیت بسته خود مطلع شوید. همچنین میتوانید از طریق صفحه "پیگیری سفارش" در سایت ما نیز اقدام کنید.
+
+
+
+
+
+
+
+
+
بله، تمامی محصولات چرم ما دارای ۶ ماه ضمانت کیفیت دوخت و یراقآلات هستند. این ضمانت شامل آسیبهای ناشی از استفاده نادرست نمیشود.
+
+
+
+
+
+
+
+
+
+
diff --git a/includes/footer.php b/includes/footer.php
index 7e5be656..3c622efc 100644
--- a/includes/footer.php
+++ b/includes/footer.php
@@ -11,9 +11,10 @@
دسترسی سریع
diff --git a/includes/jdf.php b/includes/jdf.php
index f20a5cbe..1ba003df 100644
--- a/includes/jdf.php
+++ b/includes/jdf.php
@@ -1,24 +1,258 @@
2) ? ($gy + 1) : $gy;
- $days = (365 * $gy) + ((int)(($gy2 + 3) / 4)) - ((int)(($gy2 + 99) / 100)) + ((int)(($gy2 + 399) / 400)) - 80 + $gd + $g_d_m[$gm - 1];
- $jy += 33 * ((int)($days / 12053));
- $days %= 12053;
- $jy += 4 * ((int)($days / 1461));
- $days %= 1461;
- $jy += (int)(($days - 1) / 365);
- if ($days > 365) $days = ($days - 1) % 365;
- $jm = ($days < 186) ? 1 + (int)($days / 31) : 7 + (int)(($days - 186) / 30);
- $jd = 1 + (($days < 186) ? ($days % 31) : (($days - 186) % 30));
- return ($mod == '') ? array($jy, $jm, $jd) : $jy . $mod . $jm . $mod . $jd;
+ LICENSE: FREE FOR NON-COMMERCIAL USE
+
+ 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.
+
+*/
+
+function jdate($format, $timestamp = '', $none = '', $time_zone = 'Asia/Tehran', $tr_num = 'fa')
+{
+
+$T_sec=0;/* <= آرشیو شود */
+
+if($time_zone != 'local') date_default_timezone_set(($time_zone === '') ? 'Asia/Tehran' : $time_zone);
+$ts=$T_sec+(($timestamp==='') ? time() : tr_num($timestamp));
+$date=explode(' _ ',date('H_i_j_n_O_P_s_w_Y',$ts));
+list($j_y,$j_m,$j_d)=gregorian_to_jalali($date[8],$date[3],$date[2]);
+$doy=($j_m<7)?(($j_m-1)*31)+$j_d-1:(($j_m-7)*30)+$j_d+185;
+$kab=(((($j_y%33)%4)-1)%4==0);
+$sl=strlen($format);
+$out='';
+for($i=0; $i<$sl; $i++)
+{
+ $sub=substr($format,$i,1);
+ if($sub=='\\')
+ {
+ $out.=substr($format,++$i,1);
+ continue;
+ }
+ switch($sub)
+ {
+
+ case 'a':$out.=($date[0]<12)?'ق.ظ':'ب.ظ';break;
+ case 'A':$out.=($date[0]<12)?'قبل از ظهر':'بعد از ظهر';break;
+ case 'B':$out.=floor(1+($ts/86400));break;
+ case 'c':$out.=date('Y-m-d\TH:i:sP',$ts);break;
+ case 'd':$out.=($j_d<10)?'0'.$j_d:$j_d;break;
+ case 'D':$out.=jdate_words(array('rh'=>$date[7]),' ');break;
+ case 'F':$out.=jdate_words(array('mm'=>$j_m),' ');break;
+ case 'g':$out.=($date[0]>12)?$date[0]-12:$date[0];break;
+ case 'G':$out.=$date[0];break;
+ case 'h':$out.=((($date[0]>12)?$date[0]-12:$date[0])<10)?'0'.(($date[0]>12)?$date[0]-12:$date[0]):(($date[0]>12)?$date[0]-12:$date[0]);break;
+ case 'H':$out.=($date[0]<10)?'0'.$date[0]:$date[0];break;
+ case 'i':$out.=($date[1]<10)?'0'.$date[1]:$date[1];break;
+ case 'j':$out.=$j_d;break;
+ case 'l':$out.=jdate_words(array('rh'=>$date[7]),' ');break;
+ case 'L':$out.=$kab;break;
+ case 'm':$out.=($j_m<10)?'0'.$j_m:$j_m;break;
+ case 'M':$out.=jdate_words(array('mn'=>$j_m),' ');break;
+ case 'n':$out.=$j_m;break;
+ case 'N':$out.=$date[7]+1;break;
+ case 'o':
+ $j_y_plus= $j_y+1;
+ $j_y_minus= $j_y-1;
+ $fall_start=gregorian_to_jalali(date('Y', $ts),3,21);
+ $fall_end=gregorian_to_jalali(date('Y', $ts),12,21);
+ if($j_d > $fall_start[2] && $j_m <4)
+ {
+ $out.=$j_y_minus;
+ }
+ elseif($j_d < $fall_end[2] && $j_m > 10)
+ {
+ $out.=$j_y_plus;
+ }
+ else
+ {
+ $out.=$j_y;
+ }
+ break;
+ case 'O':$out.=$date[4];break;
+ case 'p':$out.=jdate_words(array('mb'=>$j_m),' ');break;
+ case 'P':$out.=$date[5];break;
+ case 'q':$out.=jdate_words(array('sh'=>$j_y),' ');break;
+ case 'r':$out.=jdate_words(array('rh'=>$date[7]),' ') .'، ' . $j_d.' ' . jdate_words(array('mm'=>$j_m),' ') .' ' . $j_y .' ' . $date[0].':' . $date[1].':' . $date[6] .' ' . $date[4];break;
+ case 's':$out.=($date[6]<10)?'0'.$date[6]:$date[6];break;
+ case 'S':$out.='ام';break;
+ case 't':$out.=($j_m!=12)?(31-(int)($j_m/6.5)):($kab+29);break;
+ case 'U':$out.=$ts;break;
+ case 'w':$out.=$date[7];break;
+ case 'W':$out.=(int)($doy/7);break;
+ case 'y':$out.=substr($j_y,2,2);break;
+ case 'Y':$out.=$j_y;break;
+ case 'z':$out.=$doy;break;
+ default:$out.=$sub;
+ }
+}
+return ($tr_num!='en')?tr_num($out):$out;
+}
+
+function jstrftime($format, $timestamp = '', $none = '', $time_zone = 'Asia/Tehran', $tr_num = 'fa')
+{
+
+$T_sec=0;/* <= آرشیو شود */
+
+if($time_zone != 'local') date_default_timezone_set(($time_zone === '') ? 'Asia/Tehran' : $time_zone);
+$ts=$T_sec+(($timestamp==='')?time():tr_num($timestamp));
+$date=explode(' _ ',date('h_H_i_j_n_s_w_Y',$ts));
+list($j_y,$j_m,$j_d)=gregorian_to_jalali($date[7],$date[4],$date[3]);
+$doy=($j_m<7)?(($j_m-1)*31)+$j_d-1:(($j_m-7)*30)+$j_d+185;
+$kab=(((($j_y%33)%4)-1)%4==0);
+$sl=strlen($format);
+$out='';
+for($i=0; $i<$sl; $i++)
+{
+ $sub=substr($format,$i,1);
+ if($sub=='%')
+ {
+ $sub=substr($format,++$i,1);
+ }
+ else
+ {
+ $out.=$sub;
+ continue;
+ }
+ switch($sub)
+ {
+
+ case 'a':$out.=jdate_words(array('rh'=>$date[6]),' ');break;
+ case 'A':$out.=jdate_words(array('RL'=>$date[6]),' ');break;
+ case 'b':$out.=jdate_words(array('mm'=>$j_m),' ');break;
+ case 'B':$out.=jdate_words(array('MM'=>$j_m),' ');break;
+ case 'c':$out.=jdate('D M j H:i:s Y');break;
+ case 'C':$out.=(int)($j_y/100);break;
+ case 'd':$out.=($j_d<10)?'0'.$j_d:$j_d;break;
+ case 'D':$out.=substr($j_y,2,2).'/' .( ($j_m<10)?'0'.$j_m:$j_m ).'/' .( ($j_d<10)?'0'.$j_d:$j_d );break;
+ case 'e':$out.=($j_d<10)?' '.$j_d:$j_d;break;
+ case 'H':$out.=($date[1]<10)?'0'.$date[1]:$date[1];break;
+ case 'I':$out.=($date[0]<10)?'0'.$date[0]:$date[0];break;
+ case 'j':$out.=($doy<100)?(($doy<10)?'00'.$doy:'0'.$doy):$doy;break;
+ case 'm':$out.=($j_m<10)?'0'.$j_m:$j_m;break;
+ case 'M':$out.=($date[2]<10)?'0'.$date[2]:$date[2];break;
+ case 'p':$out.=($date[1]<12)?'قبل از ظهر':'بعد از ظهر';break;
+ case 'P':$out.=($date[1]<12)?'ق.ظ':'ب.ظ';break;
+ case 's':$out.=floor($ts);break;
+ case 'S':$out.=($date[5]<10)?'0'.$date[5]:$date[5];break;
+ case 'u':$out.=$date[6]+1;break;
+ case 'U':$out.=(int)($doy/7);break;
+ case 'V':$out.=(int)($doy/7);break;
+ case 'w':$out.=$date[6];break;
+ case 'W':$out.=(int)($doy/7);break;
+ case 'x':$out.=substr($j_y,2,2).'/' .( ($j_m<10)?'0'.$j_m:$j_m ).'/' .( ($j_d<10)?'0'.$j_d:$j_d );break;
+ case 'X':$out.=($date[0]<10)?'0'.$date[0]:$date[0].':' .( ($date[1]<10)?'0'.$date[1]:$date[1] ).':' .( ($date[6]<10)?'0'.$date[6]:$date[6] );break;
+ case 'y':$out.=substr($j_y,2,2);break;
+ case 'Y':$out.=$j_y;break;
+ case 'Z':$out.=date('T',$ts);break;
+ case '%':$out.='%';break;
+
+ default:$out.=$sub;
+ }
+}
+return ($tr_num!='en')?tr_num($out):$out;
+}
+
+function gregorian_to_jalali($gy,$gm,$gd,$mod='')
+{
+ $g_d_m=array(0,31,59,90,120,151,181,212,243,273,304,334);
+ $gy2=($gm>2)?($gy+1):$gy;
+ $days=355666+(365*$gy)+((int)(($gy2+3)/4))-((int)(($gy2+99)/100))+((int)(($gy2+399)/400))+$gd+$g_d_m[$gm-1];
+ $jy=-1595+(33*((int)($days/12053)));
+ $days%=12053;
+ $jy+=4*((int)($days/1461));
+ $days%=1461;
+ if($days > 365)
+ {
+ $jy+=(int)(($days-1)/365);
+ $days=($days-1)%365;
+ }
+ $jm=($days<186)?1+(int)($days/31):7+(int)(($days-186)/30);
+ $jd=1+(($days<186)?($days%31):(($days-186)%30));
+ return($mod=='')?array($jy,$jm,$jd):$jy.$mod.$jm.$mod.$jd;
+}
+
+function jalali_to_gregorian($jy,$jm,$jd,$mod='')
+{
+ $jy+=1595;
+ $days=-355668+(365*$jy)+(((int)($jy/33))*8)+((int)((($jy%33)+3)/4));
+ if((($jy%33)%4)==0 and $gy%100!=0 and $gy%400!=0){$days++;}
+ $jd+=($jm<7)?($jm-1)*31:(($jm-7)*30)+186;
+ $days+=$jd;
+ $gy=400*((int)($days/146097));
+ $days%=146097;
+ if($days > 36524)
+ {
+ $gy+=100*((int)(--$days/36524));
+ $days%=36524;
+ if($days >= 365){$days++;}
+ }
+ $gy+=4*((int)($days/1461));
+ $days%=1461;
+ $gy+=(int)(($days-1)/365);
+ $days=($days-1)%365;
+ $gd=$days+1;
+ foreach(array(0,31,(($gy%4==0 and $gy%100!=0) or ($gy%400==0))?29:28,31,30,31,30,31,31,30,31,30,31) as $gm=>$v)
+ {
+ if($gd<=$v)break;
+ $gd-=$v;
+ }
+ return($mod=='')?array($gy,$gm,$gd):$gy.$mod.$gm.$mod.$gd;
+}
+
+function jdate_words($array,$mod='')
+{
+foreach($array as $type=>$num)
+{
+ $num=(int)tr_num($num);
+ switch($type)
+ {
+ case 'ss':
+ $sl=strlen($num);
+ $xy3=substr($num,2-$sl,1);
+ $h3=jdate_words(array('h'=>$xy3));
+ $h34=jdate_words(array('h'=>$xy3+1));
+ $xy4=substr($num,3-$sl,1);
+ $h4=jdate_words(array('h'=>$xy4));
+ $h44=jdate_words(array('h'=>$xy4+1));
+ if($sl==4)
+ {
+ $f=($num<2000)?(($num<1400 and $num>1299)?jdate_words(array('h'=>13)).'صد و '.jdate_words(array('ss'=>substr($num,2,2))):''):jdate_words(array('h'=>substr($num,0,1))).' هزار و '.jdate_words(array('ss'=>substr($num,1,3)));
+ }
+ elseif($sl==3)
+ {
+ $f=($num<200)?jdate_words(array('h'=>1)).'صد و '.jdate_words(array('ss'=>substr($num,1,2))):jdate_words(array('h'=>substr($num,0,1))).'صد و '.jdate_words(array('ss'=>substr($num,1,2)));
+ }
+ elseif($sl==2)
+ {
+ $f=($num>9 and $num<21)?jdate_words(array('h'=>$num)):
+ jdate_words(array('h'=>(int)($num/10))).' و '.jdate_words(array('h'=>$num%10));
+ }
+ else{$f=jdate_words(array('h'=>$num));}
+ break;
+
+ case 'mm':$key=array('فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند');$f=$key[$num-1];break;
+ case 'mn':$key=array('فرو','ارد','خرد','تیر','مرد','شهر','مهر','آبا','آذر','دی','بهم','اسف');$f=$key[$num-1];break;
+ case 'rh':$key=array('یکشنبه','دوشنبه','سه شنبه','چهارشنبه','پنجشنبه','جمعه','شنبه');$f=$key[$num];break;
+ case 'RL':$key=array('یک','دو','سه','چهار','پنج','جمعه','شنبه');$f=$key[$num];break;
+ case 'sh':$key=array('مار','اسب','گوسفند','میمون','مرغ','سگ','خوک','موش','گاو','پلنگ','خرگوش','نهنگ');$f=$key[$num%12];break;
+ case 'mb':$key=array('حمل','ثور','جوزا','سرطان','اسد','سنبله','میزان','عقرب','قوس','جدی','دلو','حوت');$f=$key[$num-1];break;
+ case 'h':$key=array('صفر','یک','دو','سه','چهار','پنج','شش','هفت','هشت','نه','ده','یازده','دوازده','سیزده','چهارده','پانزده','شانزده','هفده','هجده','نوزده','بیست');$f=$key[$num];break;
+ }
+}
+return $f;
+}
+
+function tr_num($str,$mod='en',$mf='٫')
+{
+$num_a=array('0','1','2','3','4','5','6','7','8','9','.');
+$key_a=array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹',$mf);
+return($mod=='fa')?str_replace($num_a,$key_a,$str):str_replace($key_a,$num_a,$str);
}
?>
\ No newline at end of file
diff --git a/index.php b/index.php
index be1547fd..62c4589b 100644
--- a/index.php
+++ b/index.php
@@ -1,97 +1,118 @@
';
+echo '
Debug Info (index.php): ';
+echo '
';
+print_r($_SESSION);
+echo ' ';
+echo '
';
+
$page_title = 'صفحه اصلی';
include 'includes/header.php';
+
+
+// Load dynamic content
+$about_us_image_data = json_decode(file_get_contents('about_us_image.json'), true);
+$about_us_image_url = $about_us_image_data ? str_replace('\\/', '/', $about_us_image_data['local_path']) : 'assets/images/pexels/about-us-34942790.jpg';
+
+require_once 'db/config.php';
?>
-
-
-
-
-
اصالت در هر نگاه
-
محصولات چرمی دستدوز، آفریده برای ماندگاری.
-
کاوش در مجموعه
-
-
+
+
+
+
+
اصالت در هر نگاه
+
محصولات چرمی دستدوز، آفریده برای ماندگاری.
+
کاوش در مجموعه
+
+
-
-
-
- ' . $_SESSION['success_message'] . '
';
- unset($_SESSION['success_message']);
- }
- if (isset($_SESSION['error_message'])) {
- echo '' . $_SESSION['error_message'] . '
';
- unset($_SESSION['error_message']);
- }
- ?>
-
-
مجموعه برگزیده ما
-
دستچین شده برای سلیقههای خاص.
+
+
+
+ ' . $_SESSION['success_message'] . '
';
+ unset($_SESSION['success_message']);
+ }
+ if (isset($_SESSION['error_message'])) {
+ echo '' . $_SESSION['error_message'] . '
';
+ unset($_SESSION['error_message']);
+ }
+ ?>
+
+
مجموعه برگزیده ما
+
دستچین شده برای سلیقههای خاص.
+
+
+
+ query("SELECT * FROM products WHERE is_featured = 1 ORDER BY created_at DESC LIMIT 3");
+ $featured_products = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+ if (empty($featured_products)) {
+ echo '
هیچ محصولی برای نمایش وجود ندارد.
';
+ } else {
+ $delay = 0;
+ foreach ($featured_products as $product) {
+ ?>
+
+
+
+
+
+
= number_format($product['price']) ?> تومان
+
-
- query("SELECT * FROM products WHERE is_featured = 1 ORDER BY created_at DESC LIMIT 3");
- $featured_products = $stmt->fetchAll(PDO::FETCH_ASSOC);
-
- $animations = ['fade-up', 'zoom-in-up', 'fade-left'];
- if (empty($featured_products)) {
- echo '
هیچ محصولی برای نمایش وجود ندارد.
';
- } else {
- $delay = 0;
- foreach ($featured_products as $key => $product) {
- echo '
';
- echo '
';
- echo '
';
- echo '
';
- echo '
';
- echo '
' . number_format($product['price']) . ' تومان
';
- echo '
';
- echo '
';
- echo '
';
- $delay += 150;
- }
- }
- } catch (PDOException $e) {
- error_log("Database error: " . $e->getMessage());
- echo '
';
+
+
+ }
+ } catch (PDOException $e) {
+ error_log("Database error: " . $e->getMessage());
+ echo '
';
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
داستان آتیمه
-
-
مشاهده تمام محصولات
+
ما در آتیمه، به تلفیق هنر سنتی و طراحی مدرن باور داریم. هر محصول، حاصل ساعتها کار دست هنرمندان ماهر و استفاده از بهترین چرمهای طبیعی است. هدف ما خلق آثاری است که نه تنها یک وسیله، بلکه بخشی از داستان و استایل شما باشند.
+
-
+
+
+
-
-
-
-
-
-
-
-
-
داستان آتیمه
-
ما در آتیمه، به تلفیق هنر سنتی و طراحی مدرن باور داریم. هر محصول، حاصل ساعتها کار دست هنرمندان ماهر و استفاده از بهترین چرمهای طبیعی است. هدف ما خلق آثاری است که نه تنها یک وسیله، بلکه بخشی از داستان و استایل شما باشند.
-
بیشتر بدانید
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/login.php b/login.php
index 4c321e0c..0653f033 100644
--- a/login.php
+++ b/login.php
@@ -14,17 +14,15 @@ $page_title = "ورود یا ثبتنام";
-
- آتیمه
+
= $page_title; ?> - آتیمه
-
-
+
+
-
-
-
+
-
+
@@ -38,14 +36,15 @@ $page_title = "ورود یا ثبتنام";