merefield
(Robert)
27 ديسمبر 2025، 7:29م
1192
لا يزال هذا المكون الإضافي غير ممول، لذا فإن مستقبله محل شك إلى حد ما، ومع ذلك، فقد أضفت في الوقت الحالي ما يلي:
main ← fix_user_location_storage_and_retrieval
merged 10:28AM - 27 Dec 25 UTC
@viddekla هذا يجب أن يحل مشكلتك
main ← add_national_flags
merged 03:21PM - 27 Dec 25 UTC
* By default, location labels for users will now show the national flag related … to their location. You can disable these with plugin setting `location_user_country_flag `
* Maps for single users are now bigger
main ← quick_find_current_location
merged 07:11PM - 27 Dec 25 UTC
إذا كنت تعتقد أن “المواقع” (Locations) رائع وأنني قمت بعمل رائع هنا، يمكنك شرائي قهوة
5 إعجابات
merefield
(Robert)
28 ديسمبر 2025، 12:36م
1193
يجب أن أضيف زر تحديد الموقع الحالي للبحث السريع الجديد على محدد الموقع ليعمل أيضًا مع مواقع المواضيع إذا قمت بتعطيل حقول إدخال الموقع.
يحتاج فقط إلى تعديل بسيط في التصميم…
4 إعجابات
merefield
(Robert)
28 ديسمبر 2025، 6:23م
1194
إصلاح مهم لخلل، يرجى التحديث:
main ← fix_double_encoding
merged 06:04PM - 28 Dec 25 UTC
* New User locations were being double encoded into JSON
* Re-entering them wil… l fix data issues.
(يؤثر فقط على مواقع المستخدمين التي تم إدخالها منذ تصحيح نهاية هذا الأسبوع، ما عليك سوى إدخالها مرة أخرى)
4 إعجابات
عمل رائع! أرى علماً إضافياً معطلاً أسفل اسم المستخدم، هل لديك أي فكرة عن السبب؟
إعجابَين (2)
Moin
4 يناير 2026، 7:31ص
1196
يجعلني أعتقد أن هذا من Locations Plugin 🌍 .
main ← add_national_flags
merged 03:21PM - 27 Dec 25 UTC
* By default, location labels for users will now show the national flag related … to their location. You can disable these with plugin setting `location_user_country_flag `
* Maps for single users are now bigger
5 إعجابات
نعم، لم تعد بحاجة إلى تشغيل كليهما. في إضافة المواقع (Locations Plugin) ، من السهل جدًا تحديد رمز البلد، فلماذا لا تقدم علامة لتتوافق معه؟
3 إعجابات
RGJ
(Richard - Communiteq)
4 يناير 2026، 3:51م
1198
davidkingham:
علم معطوب
يجب عليك تحويل رمز البلد إلى أحرف صغيرة @merefield
إعجابَين (2)
رموز البلدان خارج الصندوق في المواقع (Locations) هي بأحرف صغيرة. ربما يتعلق الأمر بمزود بيانات تابع لجهة خارجية.
أقدم دعمًا مدفوعًا إذا احتاج شخص ما إلى إلقاء نظرة فاحصة.
هذه هي المشكلة، لقد قمت بتغييره إلى أحرف صغيرة يدويًا وتم تحميله. جربت Mapquest و Mapbox بنفس النتائج. سأرسل لك رسالة خاصة يا روب.
إعجابَين (2)
gilles
8 يناير 2026، 8:55م
1202
مرحباً، شكراً لك على هذا المكون الإضافي الرائع
أحاول عرض اسم الموضوع الخاص بي على الخريطة لأن لدي الموقع فقط
هل هناك معلمة يجب تفعيلها؟
شكراً لك
إعجاب واحد (1)
merefield
(Robert)
12 يناير 2026، 10:17م
1203
بعض التحديثات:
قام @Renato بإصلاح مشكلة في إعدادات الفئة (Category settings) بلطف:
main ← renato:modernize_available_views
merged 09:48PM - 12 Jan 26 UTC
Uses the existing value transformer instead of a modifyClass.
لقد تلقينا مساهمة للغة الروسية، شكرًا لك!
main ← replaid:patch-1
merged 09:51PM - 12 Jan 26 UTC
* Completed translation of client.ru.yml to the Russian language.
* Used a neut… ral, public address in a Russian-speaking country that is not part of a conflict.
Existing file's translation is incomplete, and its example address uses the English-language version's Sydney address but states its city as Киев.
وأخيرًا، أضفت مرشحًا تجريبيًا جديدًا لقائمة المواضيع (Topic List) يسمى “بالقرب” (Nearby):
main ← add_nearby_filter
merged 11:08PM - 11 Jan 26 UTC
* FEATURE: adds a "Nearby" Topic List filter if new setting `location_nearby_lis… t_max_distance_km` is non-zero and user has a geo location recorded.
* FIX: makes the location selector work for topic selection on Modals
والذي يسرد جميع المواضيع ضمن مسافة x كم (إعداد) من الموقع الذي أدخله المستخدم المسجل دخوله.
@Barney_Lodge لقد استلهمت ذلك من حالة الاستخدام الخاصة بك واستهلك معظم يوم الأحد لدي
هذا أيضًا يصلح محدد الموقع المضمن للمواضيع في النافذة المنبثقة.
8 إعجابات
يا للروعة!!! أنا أحب ديسكورس!!
مع خالص التقدير
بارني لودج
3 إعجابات
merefield
(Robert)
13 يناير 2026، 12:24م
1205
في إصدار سابق ولكن حديث كان هناك خطأ في منطق ملء موقع المستخدم. تم إصلاح هذا الآن، ولكن قد يكون هناك بعض التأثير على البيانات.
يمكنك تحديد ما إذا كانت لديك المشكلة عن طريق تشغيل هذا على وحدة تحكم rails:
array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
إذا لم تكن فارغة، فما عليك سوى تشغيل هذا:
array_for_fix.each do |id|
Locations::UserLocationProcess.upsert(id)`
end
الطريقة الأخرى لإصلاح هذا هي إعادة إدخال موقع المستخدم يدويًا، لذا فإن تعديلات موقع المستخدم المستقبلية ستقوم ببساطة بالكتابة فوق البيانات السيئة.
نعتذر عن الإزعاج.
إذا أراد أي شخص كتابة ترحيل (migration)، نرحب بطلب السحب (PR).
6 إعجابات
祁同伟
20 يناير 2026، 1:39ص
1206
هل من الممكن تطبيق هذه الميزة:
بعد أن ينشر المستخدم موضوعًا أو ردًا، يتم الكشف تلقائيًا عن الموقع بناءً على عنوان IP الحالي الخاص به وعرضه أسفل صورته الرمزية في الموضوع/المنشور - بدلاً من مطالبة المستخدمين بتحديده يدويًا أو تعيينه في ملفهم الشخصي.
أنا على استعداد لتقديم دعم مدفوع لهذا.
تمامًا مثل ZHIHU.
إعجاب واحد (1)
إن التحديث غير الإرادي لموقع المستخدم سيكون خروجًا كبيرًا عن هذا المكون الإضافي، حيث اعتمد حتى الآن على التقديم الطوعي وبالتالي موافقة المستخدم الفردية.
ولكني أرى مبررًا لذلك.
هناك بالفعل تصنيف “Post” لموقع المستخدم على كل مشاركة. لذلك أعتقد أن هذا الجزء مغطى بالفعل.
أعتقد أن التحديث التلقائي لموقع المستخدم كخيار للموقع أثناء النشر أمر ممكن ومعقول طالما:
تقوم المواقع بتحديث الشروط والأحكام الخاصة بها
يكون الموقع تقريبيًا بما فيه الكفاية، ربما إلى أقرب مدينة؟ بالنسبة لي، تتبع الأشخاص حتى الشارع من غير المرجح أن يجعل المستخدمين يحبون الموقع! ربما ترغب في خيار لتعيين درجة الدقة إلى مدينة أو مقاطعة (إذا كان ممكنًا بشكل عام عبر البيانات) أو بلد. سأكون مهتمًا بآراء المسؤولين الآخرين حول هذا الأمر.
سأكون سعيدًا للنظر في الرعاية لإضافة الأتمتة في الواجهة الخلفية كخيار للموقع. سأتصل بك عبر رسالة خاصة لمعرفة ما إذا كان بإمكاننا التوصل إلى اتفاق.
4 إعجابات
祁同伟
20 يناير 2026، 7:21ص
1208
يكفي أن تكون دقيقة على مستوى المدينة. سيكون من المرعب أن تكون دقيقة على مستوى الشارع
4 إعجابات
nathank
(Nathan Kershaw)
20 يناير 2026، 2:04م
1209
سيكون وجود خيار لدرجة التفصيل كإعداد افتراضي للموقع رائعًا. وكذلك قدرة المستخدمين على تغيير درجة التفصيل / الانسحاب.
سيكون من الرائع أن يكون هناك خيار لدرجة التفصيل على مستوى المقاطعة لمنتدين وطنيين أديرهما. وسيكون خيار درجة التفصيل على مستوى الضاحية رائعًا لمنتدى محلي.
يمكنني بسهولة تخيل مواقع تستخدم جميع الخيارات.
3 إعجابات
Roi
26 يناير 2026، 2:37م
1210
[quote=“merefield, post:1205, topic:69742”]يمكنك تحديد ما إذا كانت لديك المشكلة عن طريق تشغيل هذا في وحدة تحكم rails:
array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
إذا لم تكن فارغة، فما عليك سوى تشغيل هذا:
array_for_fix.each do |id|
Locations::UserLocationProcess.upsert(id)
end
[/quote]
شكرًا لك، لقد قمت بتشغيل هذا ووجد شيئًا:
discourse(prod)=> array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
=> [175, 12, 578, 1347, 1355, 1, 590]
discourse(prod)* array_for_fix.each do |id|
discourse(prod)* Locations::UserLocationProcess.upsert(id)
discourse(prod)=> end
=> [175, 12, 578, 1347, 1355, 1, 590]
ثم قمت بتشغيل الأمر الأول مرة أخرى ووجد 590، والذي لم يختفِ أيضًا عندما قمت بتشغيل الأمر الثاني:
discourse(prod)=> array_for_fix = Locations::UserLocation.where(state: "state").pluck(:user_id)
=> [590]
discourse(prod)* array_for_fix.each do |id|
discourse(prod)* Locations::UserLocationProcess.upsert(id)
discourse(prod)=> end
=> [590]
ماذا يمكنني أن أفعل؟
يسرني أن أعلن أن كلاً من @祁同伟 و @nathank قد تقدما لرعاية العمل الخاص بتحديد موقع المستخدم عبر عنوان IP
سيكون هذا العمل تجريبيًا لبعض الوقت، ولكني سعيد أيضًا بإخبارك بأن طلب السحب (PR) موجود بالفعل هنا:
main ← automated_ip_based_user_location_determination
opened 02:16PM - 31 Jan 26 UTC
## IP‑based User Location (MaxMind → GeoNames)
### What this adds
- Auto… matically determines a user’s location from their IP after post creation.
- Uses **MaxMind (DiscourseIpInfo)** for identity + GeoNames for canonical lat/lon.
- Stores exactly **one granularity level** per user (`country` / `province` / `city`) in `UserCustomField`
`geo_location`.
- Ensures lat/lon match the chosen granularity (privacy‑correct coordinates).
- Caches GeoNames lookups by `geoname_id` (no extra gems; uses `FinalDestination::HTTP`).
---
## Prerequisites (official accounts)
You must have valid accounts and credentials from:
- **MaxMind GeoLite2**
Sign up and obtain an Account ID + License Key:
https://www.maxmind.com/en/geolite2/signup
- **GeoNames**
Create a username for the GeoNames API and **enable Web Services** in your GeoNames account settings:
https://www.geonames.org/login
---
## Required Configuration
**Env vars (MaxMind)**
- `DISCOURSE_MAXMIND_ACCOUNT_ID`
- `DISCOURSE_MAXMIND_LICENSE_KEY`
**Site settings**
- `location_geonames_username` (GeoNames username)
**Dev note (MaxMind DBs)**
- In development, ensure the MaxMind DBs are downloaded:
DISCOURSE_MAXMIND_ACCOUNT_ID=... DISCOURSE_MAXMIND_LICENSE_KEY=... bundle exec rake maxminddb:get
Restart web/sidekiq afterward so `DiscourseIpInfo` reloads the DBs.
---
## Settings
| Setting | Default | Description |
|---|---:|---|
| `location_ip_granularity` | `city` | Controls stored level: `country`, `province` (admin1), or `city`. |
| `location_geonames_username` | `""` | GeoNames username for `getJSON` requests. Acts as a feature flag
(blank => skip). |
| `location_ip_lookup_cooldown_days` | `1` | Per‑user cooldown between IP lookups (0 disables cooldown). |
| `locations_skip_ip_based_location_update_if_existing` | `true` | Skip IP lookup when existing
`geo_location` already has **lat + lon**. |
| `location_ip_auto_lookup_enabled` | `false` | Auto‑enqueue IP lookups on post creation. Rake task still
works when off. |
---
## Flow
- `post_created` → enqueue `Jobs::Locations::IpLocationLookup` with user ID + IP.
- Job:
- Guards: plugin enabled, users map enabled, GeoNames username present, MaxMind env vars present, cooldown
OK, and optional “existing location” check.
- Uses `DiscourseIpInfo.get(ip)` to get `geoname_ids`.
- Resolves GeoNames IDs, picks feature by granularity, builds `geo_location`.
- Saves `geo_location` to user custom field + updates `locations_user` table.
---
## Job + Hook
**Hook**
- `post_created` now enqueues `Jobs::Locations::IpLocationLookup`
- In development, IP is overridden to a fixed test IP (`2.139.231.7`) to ensure resolvable data.
**Job**
- `Jobs::Locations::IpLocationLookup` (new, in `app/jobs/regular/locations/ip_location_lookup.rb`)
- Logs key steps, skips when prerequisites are missing.
- Writes `geo_location` only when successfully built.
---
## GeoNames Helpers
New modules in `lib/locations/`:
- `GeoNamesClient`
- Calls `https://secure.geonames.org/getJSON` via `FinalDestination::HTTP`.
- Normalizes `geoname_id`, `fcl`, `fcode`, `lat`, `lon`, etc.
- Caches only successful lookups (avoids caching nil).
- `GeoNamesGranularityPicker`
- Selects best `PCLI` / `ADM1` / `PPL*` by desired granularity.
- `GeoLocationBuilder`
- Builds `geo_location` hash with correct `lat/lon`, `state`/`city` based on granularity.
---
## Rake Task
New rake task in `lib/tasks/locations.rake`:
**Task**
rake locations:enqueue_user_ip_location_lookups[username_pattern,pattern_type,delay]
**Behavior**
- Iterates users and enqueues the IP lookup job using `user.ip_address`.
- Progress is based on **matched population** (not total users).
- Skips enqueue when IP is blank.
**Options**
- `username_pattern` (optional): filter users by username.
- `pattern_type`: `string` (default substring match) or `regex`.
- `delay`: seconds between enqueues (float, default `0`).
**Help**
rake locations:enqueue_user_ip_location_lookups:help
هذا ليس مجرد بحث بسيط، نحن نفعل أكثر من ذلك - سيتيح لك هذا تحديد درجة دقة معينة (على سبيل المثال، المدينة) لجميع المواقع المحددة تلقائيًا لحماية خصوصية المستخدم مع زيادة ثقة المجتمع.
(نعم، ستكون هناك بعض المشاكل مع شبكات VPN وأخشى أنه لا يمكننا التغلب على ذلك بسهولة).
بمجرد أن أقتنع بأن هذا يعمل بشكل جيد بما فيه الكفاية، سأقوم بدمجه.
إنه يقع خلف علامة ميزة (feature flag) على أي حال.
سأبقيك على اطلاع، ولكنها أوقات مثيرة، فهذه واحدة من أفضل الإضافات إلى المواقع (Locations) التي ربما حصلنا عليها منذ فترة.
شكراً مرة أخرى لـ @ @祁同伟 و @nathank !!
ونعم، ستكون هناك أيضًا مهمة rake للقيام بذلك لجميع المستخدمين الحاليين …
12 إعجابًا
Canapin
(Coin-coin le Canapin)
31 يناير 2026، 6:59م
1212
هل من الممكن عرض إشعارات في الواجهة الخلفية لـ Discourse من خلال إضافة، لحالات كهذه؟
قد أكون قد فاتني منشورك بسهولة
إعجاب واحد (1)