Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add expires_at column to personal access token. #1267

Merged
merged 8 commits into from
Jun 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public function up()
$table->string('token', 64)->unique();
$table->text('abilities')->nullable();
$table->timestamp('last_used_at')->nullable();
$table->timestamp('expires_at')->nullable();
$table->timestamps();
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Storage;
use Webkul\Admin\Http\Controllers\Controller;

class AccountController extends Controller
Expand Down Expand Up @@ -36,7 +37,8 @@ public function update()
'email' => 'email|unique:users,email,' . $user->id,
'password' => 'nullable|min:6|confirmed',
'current_password' => 'nullable|required|min:6',
'image' => 'mimes:jpeg,jpg,png,gif'
'image' => 'mimes:jpeg,jpg,png,gif',
'remove_image' => 'sometimes|boolean',
]);

$data = request()->input();
Expand All @@ -61,13 +63,7 @@ public function update()
$data['password'] = bcrypt($data['password']);
}

if (request()->hasFile('image')) {
$data['image'] = request()->file('image')->store('users/' . $user->id);
}

if (isset($data['remove_image']) && $data['remove_image'] !== '') {
$data['image'] = null;
}
$this->handleProfileImageUpload($data, $user);

$user->update($data);

Expand All @@ -79,4 +75,38 @@ public function update()

return redirect()->route('admin.dashboard.index');
}

/**
* Handle profile image upload.
*
* @param array $data
* @param Object $user
* @return void
*/
public function handleProfileImageUpload(&$data, $user)
{
$oldImage = $user->image;

if (! isset($data['image'])) {
$data['image'] = $user->image;
}

if (request()->hasFile('image')) {
$data['image'] = request()->file('image')->store('users/' . $user->id);
}

if (
isset($data['remove_image'])
&& $data['remove_image']
) {
$data['image'] = null;
}

if (
$oldImage
&& ($data['image'] !== $oldImage)
) {
Storage::delete($oldImage);
}
}
}
22 changes: 21 additions & 1 deletion packages/Webkul/Admin/src/Http/Requests/LeadForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,26 @@ public function rules()
}
}

return $this->rules;
return [
...$this->rules,
'products' => 'array',
'products.*.product_id' => 'sometimes|required|exists:products,id',
'products.*.name' => 'required_with:products.*.product_id',
'products.*.price' => 'required_with:products.*.product_id',
'products.*.quantity' => 'required_with:products.*.product_id',
];
}

/**
* Get the validation messages that apply to the request.
*/
public function messages(): array
{
return [
'products.*.product_id.exists' => trans('admin::app.leads.selected-product-not-exist'),
'products.*.name.required_with' => trans('admin::app.leads.product-name-required'),
'products.*.price.required_with' => trans('admin::app.leads.product-price-required'),
'products.*.quantity.required_with' => trans('admin::app.leads.product-quantity-required'),
];
}
}
214 changes: 109 additions & 105 deletions packages/Webkul/Admin/src/Resources/lang/ar/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,111 +118,115 @@
],

'leads' => [
'title' => 'يؤدي',
'lead' => 'قيادة',
'create-title' => 'خلق الرصاص',
'edit-title' => 'تحرير الرصاص',
'save-btn-title' => 'حفظ كقائد',
'save' => 'يحفظ',
'upload' => 'تحميل',
'back' => 'خلف',
'cancel' => 'يلغي',
'no-lead' => 'لا يؤدي',
'lead-source-name' => 'مصدر الدليل',
'details' => 'تفاصيل',
'rotten-info' => 'الرصاص قد تعفن ل :days day(s)',
'stage' => 'المسرح',
'new' => 'جديد',
'won-lost' => 'فاز / خسر',
'won' => 'وون',
'lost' => 'ضائع',
'change-stage' => 'مرحلة التغيير',
'lost-reason' => 'سبب ضائع',
'won-value' => 'قيمة الفوز',
'created-date:' => 'تاريخ الإنشاء:',
'closed-date:' => 'تاريخ مغلق:',
'closed-date' => 'تاريخ مغلق',
'expected-close-date:' => 'تاريخ الإغلاق المتوقع:',
'contact-person' => 'الشخص الذي يمكن الاتصال به',
'add-tag' => 'إضافة علامة',
'search-tag' => 'بحث الوسم',
'name' => 'اسم',
'color' => 'اللون',
'email' => 'بريد الالكتروني',
'contact-numbers' => 'ارقام التواصل',
'organization' => 'منظمة',
'address' => 'عنوان',
'products' => 'منتجات',
'item' => 'غرض',
'price' => 'سعر',
'quantity' => 'كمية',
'amount' => 'كمية',
'create-success' => 'تم إنشاء العميل المحتمل بنجاح.',
'update-success' => 'تم تحديث العميل المحتمل بنجاح.',
'delete-success' => 'تم حذف الرصاص بنجاح.',
'delete-failed' => 'لا يمكن حذف الرصاص.',
'note' => 'ملحوظة',
'activity' => 'نشاط',
'title-control' => 'عنوان',
'call' => 'مكالمة',
'meeting' => 'لقاء',
'lunch' => 'غداء',
'file' => 'ملف',
'quote' => 'اقتبس',
'create-quote' => 'إنشاء اقتباس',
'type' => 'نوع',
'description' => 'وصف',
'schedule' => 'جدول',
'from' => 'من عند',
'to' => 'إلى',
'location' => 'موقع',
'participants' => 'مشاركون',
'participant-info' => 'ابدأ في كتابة الاسم',
'users' => 'المستخدمون',
'persons' => 'الأشخاص',
'cc' => 'نسخة',
'bcc' => 'نسخة مخفية الوجهة',
'email-placeholder' => 'اضغط على يدخل لإضافة رسائل بريد إلكتروني',
'file' => 'ملف',
'subject' => 'موضوعات',
'reply' => 'رد',
'send' => 'يرسل',
'all' => 'الجميع',
'notes' => 'ملحوظات',
'select-type' => 'اختر صنف',
'calls' => 'المكالمات',
'meetings' => 'الاجتماعات',
'lunches' => 'وجبات الغداء',
'emails' => 'رسائل البريد الإلكتروني',
'files' => 'الملفات',
'sales-owner' => 'مالك المبيعات',
'person' => 'شخص',
'expired-at' => 'منتهي الصلاحية في',
'sub-total' => 'المجموع الفرعي',
'discount' => 'خصم',
'tax' => 'ضريبة',
'adjustment' => 'تعديل',
'grand-total' => 'المبلغ الإجمالي',
'actions' => 'أجراءات',
'planned' => 'مخطط',
'done' => 'منتهي',
'edit' => 'يحرر',
'view' => 'منظر',
'unlink' => 'إلغاء الارتباط',
'mark-as-done' => 'اعتبره منته',
'remove' => 'يزيل',
'export-to-pdf' => 'تصدير إلى PDF',
'empty-planned-activities' => 'ليس لديك أنشطة مخطط لها.',
'empty-done-activities' => 'لم تقم بأي أنشطة.',
'note-added' => 'تمت إضافة الملاحظة',
'call-scheduled' => 'تمت جدولة المكالمة في :from - :to',
'meeting-scheduled' => 'الاجتماع المقرر في :from - :to',
'lunch-scheduled' => 'الغداء المقرر في :from - :to',
'file-added' => 'تمت إضافة الملف',
'quote-destroy-success' => 'تمت إزالة الاقتباس بنجاح.',
'tag-create-success' => 'تمت إضافة العلامة بنجاح.',
'tag-destroy-success' => 'تمت إزالة العلامة بنجاح.',
'edit' => 'تعديل',
'title' => 'يؤدي',
'lead' => 'قيادة',
'create-title' => 'خلق الرصاص',
'edit-title' => 'تحرير الرصاص',
'save-btn-title' => 'حفظ كقائد',
'save' => 'يحفظ',
'upload' => 'تحميل',
'back' => 'خلف',
'cancel' => 'يلغي',
'no-lead' => 'لا يؤدي',
'lead-source-name' => 'مصدر الدليل',
'details' => 'تفاصيل',
'rotten-info' => 'الرصاص قد تعفن ل :days day(s)',
'stage' => 'المسرح',
'new' => 'جديد',
'won-lost' => 'فاز / خسر',
'won' => 'وون',
'lost' => 'ضائع',
'change-stage' => 'مرحلة التغيير',
'lost-reason' => 'سبب ضائع',
'won-value' => 'قيمة الفوز',
'created-date:' => 'تاريخ الإنشاء:',
'closed-date:' => 'تاريخ مغلق:',
'closed-date' => 'تاريخ مغلق',
'expected-close-date:' => 'تاريخ الإغلاق المتوقع:',
'contact-person' => 'الشخص الذي يمكن الاتصال به',
'add-tag' => 'إضافة علامة',
'search-tag' => 'بحث الوسم',
'name' => 'اسم',
'color' => 'اللون',
'email' => 'بريد الالكتروني',
'contact-numbers' => 'ارقام التواصل',
'organization' => 'منظمة',
'address' => 'عنوان',
'products' => 'منتجات',
'item' => 'غرض',
'price' => 'سعر',
'quantity' => 'كمية',
'amount' => 'كمية',
'create-success' => 'تم إنشاء العميل المحتمل بنجاح.',
'update-success' => 'تم تحديث العميل المحتمل بنجاح.',
'delete-success' => 'تم حذف الرصاص بنجاح.',
'delete-failed' => 'لا يمكن حذف الرصاص.',
'product-quantity-required' => 'الكمية المطلوبة للمنتج مطلوبة عندما يكون معرف المنتج موجودًا.',
'product-price-required' => 'سعر المنتج مطلوب عندما يكون معرف المنتج موجودًا.',
'product-name-required' => 'اسم المنتج مطلوب عندما يكون معرف المنتج موجودًا.',
'selected-product-not-exist' => 'معرف المنتج المحدد غير موجود.',
'note' => 'ملحوظة',
'activity' => 'نشاط',
'title-control' => 'عنوان',
'call' => 'مكالمة',
'meeting' => 'لقاء',
'lunch' => 'غداء',
'file' => 'ملف',
'quote' => 'اقتبس',
'create-quote' => 'إنشاء اقتباس',
'type' => 'نوع',
'description' => 'وصف',
'schedule' => 'جدول',
'from' => 'من عند',
'to' => 'إلى',
'location' => 'موقع',
'participants' => 'مشاركون',
'participant-info' => 'ابدأ في كتابة الاسم',
'users' => 'المستخدمون',
'persons' => 'الأشخاص',
'cc' => 'نسخة',
'bcc' => 'نسخة مخفية الوجهة',
'email-placeholder' => 'اضغط على يدخل لإضافة رسائل بريد إلكتروني',
'file' => 'ملف',
'subject' => 'موضوعات',
'reply' => 'رد',
'send' => 'يرسل',
'all' => 'الجميع',
'notes' => 'ملحوظات',
'select-type' => 'اختر صنف',
'calls' => 'المكالمات',
'meetings' => 'الاجتماعات',
'lunches' => 'وجبات الغداء',
'emails' => 'رسائل البريد الإلكتروني',
'files' => 'الملفات',
'sales-owner' => 'مالك المبيعات',
'person' => 'شخص',
'expired-at' => 'منتهي الصلاحية في',
'sub-total' => 'المجموع الفرعي',
'discount' => 'خصم',
'tax' => 'ضريبة',
'adjustment' => 'تعديل',
'grand-total' => 'المبلغ الإجمالي',
'actions' => 'أجراءات',
'planned' => 'مخطط',
'done' => 'منتهي',
'edit' => 'يحرر',
'view' => 'منظر',
'unlink' => 'إلغاء الارتباط',
'mark-as-done' => 'اعتبره منته',
'remove' => 'يزيل',
'export-to-pdf' => 'تصدير إلى PDF',
'empty-planned-activities' => 'ليس لديك أنشطة مخطط لها.',
'empty-done-activities' => 'لم تقم بأي أنشطة.',
'note-added' => 'تمت إضافة الملاحظة',
'call-scheduled' => 'تمت جدولة المكالمة في :from - :to',
'meeting-scheduled' => 'الاجتماع المقرر في :from - :to',
'lunch-scheduled' => 'الغداء المقرر في :from - :to',
'file-added' => 'تمت إضافة الملف',
'quote-destroy-success' => 'تمت إزالة الاقتباس بنجاح.',
'tag-create-success' => 'تمت إضافة العلامة بنجاح.',
'tag-destroy-success' => 'تمت إزالة العلامة بنجاح.',
'edit' => 'تعديل',
],

'quotes' => [
Expand Down
Loading
Loading