| from datetime import datetime |
| from .authentication import auth_manager |
| import json |
| import os |
|
|
| class UserManagement: |
| def __init__(self, users_file='data/users.json'): |
| self.users_file = users_file |
| self.users = self.load_users() |
| |
| def load_users(self): |
| """بارگذاری کاربران از فایل""" |
| try: |
| if os.path.exists(self.users_file): |
| with open(self.users_file, 'r', encoding='utf-8') as f: |
| return json.load(f) |
| return {} |
| except Exception as e: |
| print(f"Error loading users: {e}") |
| return {} |
| |
| def save_users(self): |
| """ذخیره کاربران در فایل""" |
| try: |
| os.makedirs(os.path.dirname(self.users_file), exist_ok=True) |
| with open(self.users_file, 'w', encoding='utf-8') as f: |
| json.dump(self.users, f, ensure_ascii=False, indent=2) |
| return True |
| except Exception as e: |
| print(f"Error saving users: {e}") |
| return False |
| |
| def register_user(self, username, email, password, role='student', **extra_data): |
| """ثبت نام کاربر جدید""" |
| |
| for user_id, user_data in self.users.items(): |
| if user_data['username'] == username: |
| return False, "Username already exists" |
| if user_data['email'] == email: |
| return False, "Email already exists" |
| |
| |
| user_id = str(len(self.users) + 1) |
| hashed_password = auth_manager.hash_password(password) |
| |
| self.users[user_id] = { |
| 'user_id': user_id, |
| 'username': username, |
| 'email': email, |
| 'password': hashed_password, |
| 'role': role, |
| 'created_at': datetime.now().isoformat(), |
| 'last_login': None, |
| 'profile': { |
| 'full_name': extra_data.get('full_name', ''), |
| 'bio': extra_data.get('bio', ''), |
| 'avatar': extra_data.get('avatar', '') |
| }, |
| 'progress': { |
| 'total_score': 0, |
| 'completed_lessons': [], |
| 'current_lesson': 1, |
| 'achievements': [] |
| }, |
| 'is_active': True |
| } |
| |
| if self.save_users(): |
| return True, user_id |
| return False, "Error saving user data" |
| |
| def authenticate_user(self, username, password): |
| """احراز هویت کاربر""" |
| for user_id, user_data in self.users.items(): |
| if user_data['username'] == username and user_data['is_active']: |
| if auth_manager.check_password(user_data['password'], password): |
| |
| user_data['last_login'] = datetime.now().isoformat() |
| self.save_users() |
| |
| return True, { |
| 'user_id': user_id, |
| 'username': user_data['username'], |
| 'role': user_data['role'], |
| 'profile': user_data['profile'] |
| } |
| else: |
| return False, "Invalid password" |
| |
| return False, "User not found" |
| |
| def get_user(self, user_id): |
| """دریافت اطلاعات کاربر""" |
| return self.users.get(user_id) |
| |
| def update_user_profile(self, user_id, **updates): |
| """بهروزرسانی پروفایل کاربر""" |
| if user_id not in self.users: |
| return False, "User not found" |
| |
| user = self.users[user_id] |
| |
| |
| if 'email' in updates: |
| user['email'] = updates['email'] |
| |
| |
| if 'profile' in updates: |
| for key, value in updates['profile'].items(): |
| if value is not None: |
| user['profile'][key] = value |
| |
| |
| if 'progress' in updates: |
| for key, value in updates['progress'].items(): |
| if key == 'total_score': |
| user['progress'][key] += value |
| elif key == 'completed_lessons': |
| if value not in user['progress'][key]: |
| user['progress'][key].append(value) |
| else: |
| user['progress'][key] = value |
| |
| if self.save_users(): |
| return True, "Profile updated successfully" |
| return False, "Error updating profile" |
| |
| def deactivate_user(self, user_id): |
| """غیرفعال کردن کاربر""" |
| if user_id in self.users: |
| self.users[user_id]['is_active'] = False |
| return self.save_users() |
| return False |
| |
| def get_user_progress(self, user_id): |
| """دریافت پیشرفت کاربر""" |
| user = self.get_user(user_id) |
| if user: |
| return user.get('progress', {}) |
| return None |
|
|
| |
| user_manager = UserManagement() |