اذهب الي المحتوي
أوفيسنا

نجوم المشاركات

  1. Ali Mohamed Ali

    Ali Mohamed Ali

    المشرفين السابقين


    • نقاط

      23

    • Posts

      11643


  2. أبو إبراهيم الغامدي
  3. SEMO.Pa3x

    SEMO.Pa3x

    الخبراء


    • نقاط

      8

    • Posts

      540


  4. kha9009lid

    kha9009lid

    الخبراء


    • نقاط

      4

    • Posts

      1347


Popular Content

Showing content with the highest reputation on 02/13/21 in مشاركات

  1. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته في هذا الدرس سأقدم نظرة عامة، ومُقدمة على التعابير القياسية Regular Expression وذلك لأهميتها الكبيرة في البرمجة. ملاحظة: لن اتطرق لكيفية كتابة الـ patterns نضرة لصعوبته على البعض لانه يحتاج اساسيات ومقدمات. في هذا الدرس سوف أستخدم بإذن الله لغة VBA في عمل اختبارات على الـ Regular Expression تعريف Regular Expression: هو كائن يصف نمطًا من المحارف ( أو الكلمات ). تعريف أعمق للتعابير القياسية: هي سلسلة من الأحرف التي تحدد نمطًا للبحث داخل النصوص (String) أو للمطابقة بين سلاسل من الأحرف. الهدف من التعاببير القياسية هو تسهيل عمليات البحث والاستبدال داخل النصوص، وتستخدم غالبًا في عمليات التحقق (Validation) وعمليات البحث (Searching) وايضًا في الحماية. ولتوضيح الفكرة بشكل أفضل بإمكاننا وضع مثال بسيط واقتراح الحلول له ثم بعد ذلك تبسيط الحل باستخدام التعابيير القياسية والتي سنرمز لها لاحقًا بـ RegExp. لنفرض أننا سنقوم ببرمجة نموذج تسجيل وستكون المدخلات المطلوبة ( اسم المستخدم - Username & البريد الإلكتروني - Email ) ونريد أن نتأكد من التالي: اسم المستخدم يجب أن يكون خليط من حروف وأرقام ، والرموز التالية فقط (_-.). البريد الإلكتروني يجب أن يكون بالشكل التالي : email_name@domain_name.top-level-domain مثال: cielblog@hotmail.com. وسيكون شكل نموذج التسجيل كالأتي: الحلول المقترحة كثيرة، مثلًا لكي نتأكد أن إسم المستخدم خالٍ من المسافات والرموز نحتاج لعمل تصفية (Filter) له، والتأكد اولًا من وجود مسافات واستبدالها مثلًا بالرمز _ او ازالتها كليًا، بعد ذلك تنقيح الاسم من الرموز الممنوعة ... عملية طويلة 🤔 اما البريد الإلكتروني يجب ان نتأكد اولًا من خلوه من المسافات ايضًا، والرموز الممنوعة في اغلب مشغلات البريد الإلكتروني، بعد ذلك التحرك قليلًا للتأكد أنّ ماقبل علامة @ هو String ومابعده String ثم التحقق أن ماقبل علامة النقطة - dot - هو String ومابعده هو top-level-domain ... عملية أطول 🤔 في التعابيير القياسية يمكننا اختصار كل هذه العمليات بسطر واحد أو نصف سطر حتى، وفي درسنا هذا سنتعلم كيف نحل مشكلتنا هذه ان شاء الله. أولاً: انسخ الفنكشن الآتي.. ' ----------------------------------------------------------------------' ' Return True if the given string value matches the given Regex pattern ' ' ----------------------------------------------------------------------' Public Function RegexMatch(value As Variant, pattern As String) As Boolean If IsNull(value) Then Exit Function ' Using a static, we avoid re-creating the same regex object for every call ' Static regex As Object ' Initialise the Regex object ' If regex Is Nothing Then Set regex = CreateObject("vbscript.regexp") With regex .Global = True .IgnoreCase = True .MultiLine = True End With End If ' Update the regex pattern if it has changed since last time we were called ' If regex.pattern <> pattern Then regex.pattern = pattern ' Test the value against the pattern ' RegexMatch = regex.test(value) End Function لاحظو الفنكشن يتكون من براميترات 2 الأول القيمة المراد اجراء التحقق عليها والبراميتر الثاني هو معيار التحقق ولو اردت ان اكتب تحقق لإسم المستخدم، سأكتب: If RegexMatch("semo", "^[\w_-]+$") = True Then MsgBox "Correct username", vbInformation, "CORRECT" Else MsgBox "Wrong username", vbCritical, "ERROR!" End If لو اردت ان اكتب تحقق للبريد الإلكتروني سأكتب: If RegexMatch("test@gmail.com", "[A-Za-z0-9_\-.]+@[A-Za-z0-9_\-.]+\.(com|org|net)") = True Then MsgBox "Correct email", vbInformation, "CORRECT" Else MsgBox "Wrong email", vbCritical, "ERROR!" End If للفائدة، google ممتلئ بالـ patterns ماعليك فقط ان تبحث قليلاً وستجد الباترن المطلوب ☺️ بالتوفيق للجميع.
    6 points
  2. مرحبا استاذنا الفاضل حسين هذا المثال خطير جدا ويحتوي على ثغرة الاستعلامات البنيوية ويمكن بسهولة اختراق كلمة المرور وايضا يمكن حقن القاعدة باستعلام يدمر العنصر الاهم في القاعدة (الجداول) وقد سبق مناقشتة باستفاضة بمشاركة الاستاذ الفاضل @rey360 ومعلمنا الفاضل @jjafferr تحياتي وتقديري
    4 points
  3. هل تريد فتح نموذج HTML من داخل بطاقة الشقة! ولماذا من هنا بالتحديد؟! تنزلا لرغبتك افعل الآتي.. قم بتغيير بيانات الرابط للزر ببيانات مناسبة أو استخدم التالي <a href='HTML' class='button'> ناقل </a></div> قم بتغيير شفرة الإجراء BeforeNavigate2 ليصبح كالتالي Private Sub WebBrowser_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean) If URL Like "about:id*" Then 'Debug.Print URL DoCmd.OpenForm "FM_2", , , "cstr(ID)=" & CStr(Mid(URL, 9)), , acDialog End If If URL Like "*html*" Then DoCmd.OpenForm "HTML", , , , , acDialog End If Cancel = True End Sub عزيزي ناقل.. إذا كانت الأسئلة لا علاقة لها بهذا الموضوع مباشرة.. فأرجو منك تكرماً فتح مشاركة جديدة.. ولا بأس أن تشير إلى هذا المشاركة، أو إلى الأمثلة التي وردت فيها..
    3 points
  4. السلام عليكم أردت أن أشارك معكم . يمكنك أيظن تجنب SQL injection عن طريق عمل برمتر وهي كا الاتي Public Function conect(LOGIN As String, passe As String) As Boolean Dim db As DAO.Database Dim rs As DAO.Recordset Dim qr As QueryDef Dim sq As String Set db = CurrentDb sq = "select * from users where User_Name=[Plogin] and User_Password=[Ppasse]" Set qr = db.CreateQueryDef(vbNullString, sq) With qr .Parameters("Plogin") = LOGIN .Parameters("Ppasse") = passe .ReturnsRecords = True Set rs = .OpenRecordset() End With If Not rs.EOF Then conect = True Else conect = False End If End Function ملاحظ الفنكشن للاستاذ المغربي محمد جهاوي مثال الصلاحيات.rar
    3 points
  5. أهلابك.. نعم يمكن.. انسخ السطر المتعلق بالزر والذي أشرت إليه أعلا وسوف يأخذ نفس الخصائص Dashboard2003.mdb
    3 points
  6. تحديث جديد تم اضافة دالة لتجميع الاعمدة واسمها SumListViewItem Public Function SumListViewItem(ByVal ColumnIndex As Integer) As Double حيث ColumnIndex هى رقم العمود المراد جمعه علما بان ترقيم الاعمدة يبدأ من 0 ادرجت التحديث فى قاعدة البيانات المرفقة الاداة مع المرفق MsAccessListviewACX1.00.rar
    2 points
  7. العفو، حياك الله اخي أبو إبراهيم. بالنسبة لسؤالك هل تقصد الباترن يُكتب باللغة العربية؟ او تقصد باترن للكشف ما اذا كانت اللغة عربية او لا؟ اذا كانت قصدك على كشف النص المدخل هل يتضمن حروف عربية او لا تفضل: If RegexMatch("سيمو", "[\u0600-\u06FF]") = True Then MsgBox "Is Arabic !", vbInformation, "CORRECT" Else MsgBox "Not Arabic ):", vbCritical, "ERROR!" End If اما اذا كنت تقصد الباترن يُكتب باللغة العربية فهذا الشيء غير ممكن.
    2 points
  8. أهلا بك عزيزي أحمد.. في الواقع لم أفعل .. أما عن الاشكالات.. فمن أهمها.. استشعار أحداث وسوم صفحة المستعرص من داخل أكسس! وهذا بحمد الله تم الانتهاء منه.. جعل الصفحة تتفاعل مع تنسيقات الجيل الجديد.. وهذا بحمد الله تم الانتهاء منه.. أما العقبات.. فمن أقواها.. الكسل.. الوقت.. انظر إلى الفرق بين النسخة السابقة من المثال وبين النسخة التالية Dashboard2003.mdb
    2 points
  9. أهلا بك عزيزي.. لا بأس إذا كان الأمر يتعلق بذات الموضوع.. زر الأمر "المزيد" عبارة عن رابط.. والروابط في HTML تحدث انتقال إلى شيء ما.. في حدث "قبل الانتقال" المتعلق بالروابط الموجودة على الصفحة: نقوم بإعاقة الرابط من الانتقال، وبعدها نأخذ بيانات الغرفة -والتي سبق أن مررناها للرابط- ونضعها في وظيفة فتح النموذج.. هذا كل ما في الأمر.. <a href='" & "ID" & RS(0) & "' class='button'> المزيد </a> خصيصة الرابط "href" مررنا إليها معرف الشقة، وعند النقر عليها يمرر المستعرض هذه القيمة إلى محدد نصي اسمه "URL" في حدث ما قبل الانتقال "BeforeNavigate2".. بعد ذلك نعيد استخراج معرف الشقة ونمرره إلى وظيفة فتح النموذج Private Sub WebBrowser_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean) If URL Like "about:id*" Then 'Debug.Print URL DoCmd.OpenForm "FM_2", , , "cstr(ID)=" & CStr(Mid(URL, 9)), , acDialog Cancel = True End If End Sub
    2 points
  10. تفضل التعديل ارجو ان يكون طلبك حساب تاريخ الحمل-11.rar
    2 points
  11. وعليكم السلام- اخى الكريم من فضلك فقد نبهنا على هذا الأمر كثيراً ان لا تقوم برفع اى مشاركة الا بعد استخدام خاصية البحث بالمنتدى ولم تجد المطلوب ... ولكن طلبك تكرر كثيراً بالمنتدى -تفضل مشكلة في اللغة العربية
    2 points
  12. بارك الله فيك استاذ جعفر وزادك الله من فضله
    2 points
  13. بارك الله فيك استاذ سليم والله عندك حق وبعد اذنك -تفضل اخى ابو اياد ... هذا البرنامج الممتاز ولكن عليك بتوليفه لطلباتك فلا أحد يمتلك الوقت لتلبية كل طلباتك كما أوضح لك استاذنا الكبير سليم حاصبيا سلفاً كلمة المرور لدخول البرنامج : لا اله الا الله برنامج مبيعات ومشتريات مجاني كلمة السر لا اله الا الله.xlsm
    2 points
  14. مبروك الأستاذ محي الدين ابو البشر إنضمامك لعائلة الخبراء ,أسأل الله لك التوفيق والنجاح دائما ..وأعانك الله على هذه المسئولية الجديدة وسدد الله خطاك عن حق وجدارة بارك الله فيك وزادك الله من فضله
    2 points
  15. ان تفضلت بمشاهدة الفيديو الموجود بالرابط أو قمت بتحميل الملف لوجدت ان البرنامج يخص جمهورية مصر العربية .... وشكراً لك
    2 points
  16. بسم الله الرحمن الرحيم إضافة البيان البحثية لبرنامج Word إضافة لبرنامج التحرير الشهير Word، تُسهِّل الكثير من المهام على الباحثين والمحررين، وتتوفر في الإضافة مجموعة من الخصائص؛ هي: 1- تنسيق الشعر العربي: تُمكِّنك هذه الخاصية من استيراد مجموعة من الأبيات والقصائد من ملف نصي، أو إدراجها مباشرة من خلالها كتاباتها في مربع نص، والأجمل من كل ذلك أن هذه الخاصية تقوم بتنسيق الأبيات الشعرية الموجودة ضمن مستند Word خلال ثوانٍ، مع توفير الخيارات المناسبة لشكل القصيدة والأبيات الشعرية. 2- تصحيح علامات الترقيم، وذلك بمعالجة المسافات قبل أو بعد علامات الترقيم. 3- حذف المسافات البيضاء التي تقع في ثنايا الكلمات. 4- تحويل الترقيم التلقائي إلى يدوي. 5- إتباع الرقم بمسافة في الترقيم التلقائي. 6- عمليات عديدة على الأقواس المتنوعة، تشمل: تلوين ما بين قوسين، أو تغميقه، أو حذفه، أو تغيير الأقواس إلى أقواس أخرى. 7- الكثير من العمليات على الحواشي السفلية؛ من حيث إضافة الأقواس أو حذفها أو تغييرها، وكذلك نقل الحواشي السفلية إلى الأعلى، وحذف الحواشي أو تلوينها، بالإضافة إلى تغميقها أو جعلها عادية، وأيضاً رفعها عن السطر أو خفضها عنه أو مساواتها له، ومسح المسافة قبل رقم الحاشية. 8- استبدال متعدد: تتيح لك هذه الميزة البحث عن مجموعة من الكلمات دفعة واحدة واستبدالها بكلمات أخرى، كما تسمح لك بإضافة عدة مجموعات، بحيث تستطيع أن تضيف عدداً من العبارات في كل مجموعة. 9- تحويل ملف Word إلى PDF مع فهرسة الملف، والحفاظ على تنسيق الآيات القرآنية المكتوبة بالرسم العثماني، والحفاظ على التنسيق الشعري، ودعم خاصية البحث ضمن المستند الذي تم تحويله إلى PDF. وهنا شرح مفصل لإضافة البيان البحثية، أرجو مشاهدته: وهنا رابط مباشر لتحميل الإضافة: https://www.shhada.net/contents/downloadsm/4MAEgubYzqynkm6y.zip وهنا صفحة الإضافة على الإنترنت: https://www.shhada.net/downloads/s/39
    1 point
  17. بارك الله فيك، سلمت جهودك بصراحة جل ما توقعته أن أحصل على ملف مشابه مرفق ببعض النصائح ولم أتوقع هذا الجهد الكبييير ... ممنون لك جدا بكل ما تعنيه الكلمة
    1 point
  18. بارك الله فيك أخي الفاضل ...... نعم فقط كنت اود معرفة طريق الاشارة الى اي نموذج في قاعدة البيانات وليس نموذج HTML تحديدا تم المطلوب ...... اشكرك اخي @أبو إبراهيم الغامدي أبشر استاذي الفاضل ...... اشكرك مرة اخرى وكتب الله اجرك
    1 point
  19. السلام عليكم ورحمه الله وبركاته اخوانى واساتذتى بادارة موقع اوفيسنا اجد نقاط الاعجاب عندى قليله كلما اريد وضع اعجاب على مشاركه اجد انه لايقبل وتطلعى مسج سورى هل من طريقه لزياده نقاط الاعجاب @محمد طاهر ولكم خالص الدعاء بالتوفيق وجزاكم الله عنا كل خير
    1 point
  20. السلام عليكم أخى الكريم نقاط الاعجاب لابد أن تأتي من عضو آخر ، لا يمكنك اضافة النقاط لنفسك بحسب تصميم المنتدى
    1 point
  21. جزاكم الله خيرا تطويعكم للغة HTML واستخدامها داخل الأكسس انه حقا من الأمور 'الحصرية' بكم أستاذنا @أبو إبراهيم الغامدي فجزاكم الله عنا خيرا
    1 point
  22. اخى الفاضل الملف المرفق منك عباره عن جدول فقط قم بانشاء النموذج حتى لو كان باستخدام المعالج ثم ارفق الملف مره اخرى بالتوفيق
    1 point
  23. جزاك الله خيرا د جسنين @SEMO.Pa3x 💐 استاذى العزيز @أبو إبراهيم الغامدي راجع هذا الروابط لعله ما تريد الى ان يشاركنا د حسنين https://stackoverflow.com/questions/29729391/regular-expression-arabic-characters-and-numbers-only https://en.wikipedia.org/wiki/Arabic_script_in_Unicode بارك الله فيكم اساتذتى وجزاكم الله عنا كل خير
    1 point
  24. شكرا لك استاذي العزيز @سليم حاصبيا بارك الله فيك
    1 point
  25. اتفضل المرفق لعه يفى بالغرض صالح.xlsm
    1 point
  26. عملك ممتاز أخ حسام ، وأقترح أن يكون الـ Max لرقم الفاتورة أفضل من التاريخ ، فالتاريخ ممكن يكون فيه أخطاء ادخال.
    1 point
  27. تفضل هذه المحاولة ارجو ان تكون طلبك Database last dat-2.rar
    1 point
  28. تم التعديل كما تريد Option Explicit Dim cnt% Sub Salim_color(rg As Range, _ k As Byte, n As Byte, _ Optional m As Long) Dim i If IsMissing(m) Then m = xlNone If Val(k) <= 0 Or k > 12 Then k = 12 k = Abs(k) If IsDate(rg) Then i = IIf(Month(rg) = k, n, m) If i = n Then cnt = cnt + 1 rg.Interior.ColorIndex = i Else rg.Interior.ColorIndex = xlNone End If End Sub '+++++++++++++++++++++++++++++++++++ Sub CKect_Up() Dim x%, y% cnt = 0 With Sheets("Sheet1") x = .Cells(Rows.Count, "C").End(3).Row For y = 1 To x Call Salim_color(.Cells(y, "C") _ , .Range("H2"), .Range("G2") _ , .Range("F2")) Next .Range("B2") = IIf(cnt = 0, "", cnt) End With End Sub Ahmmed_1.xlsm
    1 point
  29. السلام عليكم ورحمة الله وبركاته وبعد اطلب تصميم برنامج بالاكسس بمقابل مالي "مفتوح المصدر" الدفع مقدم انتظر الايميل فمن ترشحون؟ فكرة البرنامج جاهزة على اكسيل مادة كاملة لكن اريدها على اكسيس تتلخص ب موجود - ولازم اريد التفاهم على الخاص حتى ارسل الشرح والمادة العلمية غمل خاص جداً wvvryhhh@gmail.com انتتظركم مع الشكر لهذا المنتدى الصرح الاكاديمي
    1 point
  30. تجد في المثال المرفق طريقة نقل سجل إلى أعلى أو أسفل يمكن ان تستفيد منهللتعديل على ملفك MacroWHUT - Copy.accdb MoveRecord.zip
    1 point
  31. هذه المعادلة في C2 و اسحب نزولاً =IF($B2="","",COUNTIF(B$2:B2,B2)) النلف مرفق Wadi.xlsx
    1 point
  32. 1 point
  33. تفضل كان عليك التركيز فهذا الموضوع تكرر معك كثيراً -يمكنك استخدام هذه المعادلة =SUMIFS($C:$C,$B:$B,$G8,$D:$D,$J$7) حساب سيارة مشتركة بين موقعين1.xls
    1 point
  34. وعليكم السلام-لك ما طلبت مثال1.xlsx
    1 point
  35. السلام عليكم 🙂 اما انا ، فهذه طريقتي في ربط الجداول ، شوفها يمكن تنفعك 🙂 فتح النموذج فقط - قسم الأكسيس Access - أوفيسنا (officena.net) جعفر
    1 point
  36. وعليكم السلام-كان عليك استخدام خاصية البحث بالمنتدى-تفضل برنامج مجاني علي الاكسيل لاقرار ضريبة القيمة المضافة وهذا نموذج أخر نموذج_ضريبة_القيمة_المضافة_في_السعودية.xlsx
    1 point
  37. وعليكم السلام-تقريباً نفس الطلب استاذ أحمد ولذلك ليس هناك داعى لرفع مشاركة جديدة ومنفصلة .تم دمج واضافة المشاركة الجديدة هنا أيضاً ... أعتقد ان الموضوع ليس بالصعب , كان عليك تعلم وعمل ذلك بنفسك -تفضل =IFERROR(EDATE($E2,$D2*12-$F2),"") وتم أيضاً ضبط معادلة العمود D على ان تكون هكذا =IF(C2="","",IF(C2<=5,5,4)) test3.xlsx
    1 point
  38. وعليكم السلام-بسيطة - تفضل =EDATE($C5,12-$D5) test2.xlsx
    1 point
  39. وعليكم السلام-يمكنك استخدام هذه المعادلة لطلبك =EDATE($C5,$D5*12-$E5) test1.xlsx
    1 point
  40. وعليكم السلام-استخدم هذه المعادلة ( معادلة مصفوفة) =IFERROR(INDEX(التسعير!$G$4:$J$1100,MATCH(1,IF(التسعير!$D$4:$D$1100=$E2, IF($F2>=التسعير!$E$4:$E$1100,IF($F2<=التسعير!$F$4:$F$1100,1))),0),MATCH($G2,التسعير!$G$3:$J$3,0)),"") 1المبيعات.xlsm
    1 point
  41. السلام عليكم 🙂 رجاء اختيار الاجابة التي استعملتها كـ "أفضل إجابة" 🙂 جعفر
    1 point
  42. ما شاء الله عليك اخي ابوعبدالله سلمت يداك تحياتي
    1 point
  43. أهلا @سلمان الشهراني جرب هذا التعديل: Dashboard2003.mdb
    1 point
  44. أهلا @سلمان الشهراني في هذا التعديل أنشأت وظيفة تعيد بيانات الاستعلامين التي أشرت إليها في المرفق، وضمنتها ببطاقة التعريف بالشكل التالي Function CardDetails(ID As Long) On Error Resume Next Dim P1 As dao.Recordset, P4 As dao.Recordset Dim H As String Set P1 = CurrentDb.OpenRecordset("select * from qr_p1 where Apartment_No4=" & ID) Set P4 = CurrentDb.OpenRecordset("select * from qr_p4 where id=" & ID) H = H & "<p class='first'>" & P1!Name1 & "</p>" H = H & "<p><span>تاريخ الدخول</span>" & Format(P1!Date_Entry, "yyyy/mm/dd") & "</p>" H = H & "<p><span>المبلغ المدفوع</span>" & P1!Mdfo3 & "</p>" H = H & "<p><span>المبلغ المتبقي</span>" & P1!Residual & "</p>" H = H & "<p><span>مبالغ أخرى</span>" & P4!Total2 & "</p>" CardDetails = H End Function إليك المرفق: Dashboard2003.mdb
    1 point
  45. فرق بين الممارسة العملية وبين التنظير والمثل يقول ابدأ مما انتهى الناس منه والمبرمج هذا الذي ذكرت سيجد الطريق في الاخير بعد استنفاد الجهد والوقت سأذكر بصفة عامة حاجة العمل لبناء العلاقات : في برامجنا يوجد شيئين رئيسين هما محور العمل الاول ادخال البيانات والثاني عرض البيانات فاهمية العلاقات في عملية ادخال البيانات : 1- ضبط مسألة حذف البيانات من الجداول بالتوالي ( الرئيسية والفرعية ) 2- مسألة منع الحذف الجدول الرئيس اذا وجدت قيمة مرتبطة في الفرعي 3- عندما نريد التحكم بالقيمة المدخلة ( وهذا هو بيت القصيد من العلاقات بصفة عامة ) ونستغني عن العلاقة هنا اذا استخدمنا المنسدلات في النماذج لاختيار القيمة وهو المعمول به في الغالب 4- عند انشاء النماذج الفرعية المرتبطة بالرئيسية اما غير المرتبطة فلسنا بحاجة لربط الجداول اما عرض البيانات : فيتم ربط ما نحتاجه من علاقات من خلال الاستعلامات لذا نقول وموافقة لاخونا جعفر بأن العلاقة لا توضع الا وقت الحاجة
    1 point
  46. ربنا يبارك فى حضرتك استاذى الحبيب ياسر خليل كل عام وانت بخير وجميع الاهل والاحبه بخير
    1 point
×
×
  • اضف...

Important Information