137 lines
12 KiB
Python
137 lines
12 KiB
Python
"""Copy current static website copy into untouched direct-edit content records.
|
|
|
|
Sources: frontend src/views/{Home,AboutUs,Events,Blog}.tsx and
|
|
src/app/{page,about/page,events/page,blog/page,layout}.tsx as of 2026-09-27.
|
|
The migration deliberately leaves existing CMS edits and uploaded images alone.
|
|
"""
|
|
|
|
from django.db import migrations
|
|
|
|
|
|
HOME = {
|
|
"title": "انجمن علمی کامپیوتر دانشگاه گیلان",
|
|
"intro": "با ما همراه شوید و در دنیای مهندسی/علوم کامپیوتر و فناوری پیشرفت کنید. رویدادها، محتوای آموزشی و جامعهای پویا برای رشد شما فراهم است.",
|
|
"hero_heading": "انجمن علمی کامپیوتر دانشگاه گیلان",
|
|
"hero_body": "با ما همراه شوید و در دنیای مهندسی/علوم کامپیوتر و فناوری پیشرفت کنید. رویدادها، محتوای آموزشی و جامعهای پویا برای رشد شما فراهم است.",
|
|
"hero_action_label": "مشاهده رویدادها",
|
|
"featured_events_heading": "رویدادهای تخصصی",
|
|
"featured_events_intro": "با شرکت در رویدادهای ما، دانش و مهارتهای خود را در کنار اساتید و متخصصان ارتقا دهید.",
|
|
"featured_events_link_label": "مشاهده رویدادها",
|
|
"featured_posts_heading": "مقالات آموزشی",
|
|
"featured_posts_intro": "تازهترین مقالات تخصصی در حوزههای مختلف علوم کامپیوتر برای یادگیری و توسعه فردی.",
|
|
"featured_posts_link_label": "خواندن مقالات",
|
|
"participation_heading": "آماده عضویت هستید؟",
|
|
"participation_body": "همین حالا به جمع ما بپیوندید و از برنامهها و فرصتهای یادگیری انجمن علمی کامپیوتر دانشگاه گیلان استفاده کنید.",
|
|
"participation_action_label": "ثبتنام کنید",
|
|
"seo_title": "انجمن علمی کامپیوتر دانشگاه گیلان",
|
|
"seo_description": "با ما همراه شوید و در دنیای مهندسی و علوم کامپیوتر پیشرفت کنید. رویدادها، محتوای آموزشی و جامعهای پویا برای رشد شما فراهم است.",
|
|
}
|
|
|
|
ABOUT = {
|
|
"title": "انجمنهای علمی کامپیوتر گیلان",
|
|
"intro": "پیوند دانشگاه و صنعت با برگزاری رویدادها، کارگاهها و نشستهای تخصصی — با محوریت رشد مهارتهای فنی و مسیرهای شغلی.",
|
|
"identity_heading": "انجمنهای علمی کامپیوتر گیلان",
|
|
"identity_body": "پیوند دانشگاه و صنعت با برگزاری رویدادها، کارگاهها و نشستهای تخصصی — با محوریت رشد مهارتهای فنی و مسیرهای شغلی.",
|
|
"mission_heading": "ماموریت ما",
|
|
"mission_body": "توانمندسازی دانشجویان با مهارتهای موردنیاز صنعت، ایجاد شبکههای حرفهای و فراهمکردن مسیرهای یادگیری پروژهمحور؛ از معرفی نقشها و مسیرهای شغلی تا تمرین مهارتهای نرم و فنی.",
|
|
"values_heading": "ارزشهای ما",
|
|
"values_body": "یادگیری پیوسته و اشتراک دانش\nکیفیت، شفافیت و مسئولیتپذیری\nفرصت برابر برای مشارکت\nارتباط مؤثر با صنعت و جامعه",
|
|
"committees_heading": "کمیتهها و گروههای کاری",
|
|
"affiliations_heading": "انجمنها",
|
|
"affiliations_body": "اطلاعات انجمنهای زیرمجموعه/همکار",
|
|
"faq_heading": "پرسشهای متداول",
|
|
"contact_heading": "راههای ارتباطی",
|
|
"seo_title": "درباره ما | انجمن علمی کامپیوتر شرق گیلان",
|
|
"seo_description": "آشنایی با تاریخچه، مأموریتها و دستاوردهای انجمن علمی کامپیوتر شرق گیلان و راههای مشارکت دانشجویان در برنامههای انجمن.",
|
|
}
|
|
|
|
EVENTS = {
|
|
"title": "رویدادها",
|
|
"intro": "رویدادهای جاری و گذشته انجمن علمی کامپیوتر شرق گیلان، شامل کارگاهها، مسابقات و برنامههای آموزشی.",
|
|
"seo_title": "رویدادها",
|
|
"seo_description": "رویدادهای جاری و گذشته انجمن علمی کامپیوتر شرق گیلان، شامل کارگاهها، مسابقات و برنامههای آموزشی.",
|
|
}
|
|
|
|
BLOG = {
|
|
"title": "بلاگ",
|
|
"intro": "نوشتههای آموزشی، تجربههای دانشجویی و یادداشتهای تخصصی اعضای انجمن علمی.",
|
|
"seo_title": "وبلاگ",
|
|
"seo_description": "مقالات، نوشتهها و محتوای آموزشی انجمن علمی کامپیوتر شرق گیلان.",
|
|
}
|
|
|
|
SITE = {
|
|
"official_name": "انجمن علمی مهندسی کامپیوتر دانشگاه گیلان (دانشکدهی فنی و مهندسی شرق گیلان)",
|
|
"short_name": "انجمن علمی مهندسی کامپیوتر",
|
|
"faculty_subline": "دانشکدهی فنی و مهندسی شرق گیلان",
|
|
"description": "ترویج علم کامپیوتر، برگزاری رویدادهای تخصصی، تقویت شبکهی دانشجویی و پیوند با صنعت.",
|
|
"nav_home": "خانه",
|
|
"nav_about": "درباره ما",
|
|
"nav_events": "رویدادها",
|
|
"nav_blog": "بلاگ",
|
|
"email": "eastguilanceassociation@gmail.com",
|
|
"phone": "۰۱۳-۴۲۶۸۸۴۴۷",
|
|
"telegram_url": "https://t.me/guilancea",
|
|
"instagram_url": "https://instagram.com/guilance.ir",
|
|
"website_url": "https://east-guilan-ce.ir",
|
|
"address": "گیلان، رودسر، واجارگاه، دانشکدهی فنی و مهندسی شرق گیلان\nکدپستی: ۴۴۹۱۸۹۸۵۶۶",
|
|
"footer_copy": "ترویج علم کامپیوتر، برگزاری رویدادهای تخصصی، تقویت شبکهی دانشجویی و پیوند با صنعت.",
|
|
"seo_title": "انجمن علمی کامپیوتر شرق گیلان",
|
|
"seo_description": "انجمن علمی کامپیوتر شرق گیلان، برگزارکننده رویدادها، کارگاهها و محتوای آموزشی برای دانشجویان و علاقهمندان فناوری.",
|
|
}
|
|
|
|
# Each pair is (kind, title, text). These are the visible About page items.
|
|
ABOUT_ITEMS = (
|
|
("committees", "کمیته آموزش", "برنامهریزی و اجرای دورهها و کارگاههای مهارتی، هماهنگی با مدرسین و طراحی مسیرهای یادگیری."),
|
|
("committees", "کمیته صنعت و اشتغال", "تعامل با شرکتها، دعوت از متخصصان صنعت، و شبکهسازی برای فرصتهای کارآموزی و استخدام."),
|
|
("committees", "کمیته محتوای دیجیتال", "تولید محتوای آموزشی، خبرنامه، مدیریت شبکههای اجتماعی و پوشش رسانهای رویدادها."),
|
|
("affiliations", "انجمن علمی مهندسی کامپیوتر دانشکدهی فنی شرق", "دانشگاه گیلان، رودسر؛ تأسیس: ۱۳۹۲. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصتهای شغلی و پژوهشی. حوزهها: مهندسی نرمافزار، هوش مصنوعی و داده، طراحی محصول، DevOps/امنیت."),
|
|
("affiliations", "انجمن علمی مهندسی کامپیوتر دانشکدهی فنی", "دانشگاه گیلان، رشت؛ تأسیس: ۱۳۵۳. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصتهای شغلی و پژوهشی. حوزهها: مهندسی نرمافزار، هوش مصنوعی و داده، DevOps."),
|
|
("affiliations", "انجمن علمی علوم کامپیوتر دانشکدهی علومپایه", "دانشگاه گیلان، رشت؛ تأسیس: ۱۳۵۳. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصتهای شغلی و پژوهشی. حوزهها: امنیت، سیستمعامل، سختافزار."),
|
|
("faq", "چطور در رویدادها شرکت کنم؟", "برای ثبتنام در رویدادها ابتدا باید حسابکاربری با کددانشجویی خود ایجاد کنید و سپس از طریق صفحهی ثبتنام در رویداد موردنظرتان شرکت کنید :)"),
|
|
("faq", "آیا امکان همکاری انجمنها/شرکتها هم وجود دارد؟", "بله، ما همیشه آمادهی همکاری با سازمانها و انجمنهای مختلف دانشگاهها جهت توانمندسازی دانشجویان با مهارتهای موردنیاز صنعت و ایجاد شبکههای حرفهای هستیم."),
|
|
("faq", "برای سخنرانی/منتورینگ به چه چیزهایی نیاز است؟", "رزومه کوتاه، موضوع پیشنهادی و زمانهای دسترسپذیرتان را ارسال کنید تا هماهنگ کنیم."),
|
|
)
|
|
|
|
|
|
def seed_if_untouched(record, values, marker_fields, db):
|
|
if any(getattr(record, name) for name in marker_fields):
|
|
return False
|
|
for name, value in values.items():
|
|
setattr(record, name, value)
|
|
record.save(using=db)
|
|
return True
|
|
|
|
|
|
def seed_current_copy(apps, schema_editor):
|
|
db = schema_editor.connection.alias
|
|
SiteContent = apps.get_model("content", "SiteContent")
|
|
HomeContent = apps.get_model("content", "HomeContent")
|
|
AboutContent = apps.get_model("content", "AboutContent")
|
|
AboutItem = apps.get_model("content", "AboutItem")
|
|
ListingContent = apps.get_model("content", "ListingContent")
|
|
|
|
site, _ = SiteContent.objects.using(db).get_or_create(pk=1)
|
|
seed_if_untouched(site, SITE, ("official_name", "short_name", "email", "seo_title"), db)
|
|
|
|
home, _ = HomeContent.objects.using(db).get_or_create(pk=1)
|
|
seed_if_untouched(home, HOME, ("title", "hero_heading", "seo_title"), db)
|
|
|
|
about, _ = AboutContent.objects.using(db).get_or_create(pk=1)
|
|
seeded_about = seed_if_untouched(about, ABOUT, ("title", "identity_heading", "seo_title"), db)
|
|
if seeded_about and not AboutItem.objects.using(db).filter(about_id=1).exists():
|
|
positions = {}
|
|
for kind, title, item_text in ABOUT_ITEMS:
|
|
position = positions.get(kind, 0)
|
|
AboutItem.objects.using(db).create(about_id=1, kind=kind, title=title, text=item_text, position=position)
|
|
positions[kind] = position + 1
|
|
|
|
for slug, values in (("events", EVENTS), ("blog", BLOG)):
|
|
listing, _ = ListingContent.objects.using(db).get_or_create(slug=slug)
|
|
seed_if_untouched(listing, values, ("title", "intro", "seo_title"), db)
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [("content", "0004_direct_edit_content")]
|
|
|
|
operations = [migrations.RunPython(seed_current_copy, migrations.RunPython.noop)]
|