Skip to content

Commit

Permalink
Merge pull request #1267 from suraj-webkul/migration
Browse files Browse the repository at this point in the history
Add expires_at column to personal access token.
  • Loading branch information
devansh-webkul authored Jun 25, 2024
2 parents 8eedf6c + 1928ec8 commit d259572
Show file tree
Hide file tree
Showing 10 changed files with 607 additions and 538 deletions.
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

0 comments on commit d259572

Please sign in to comment.