Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Membangun Startup Anda Dengan PHP: Perintah Email

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Delivering the Meeting Invitation
Building Your Startup With PHP: Email Commands

Indonesian (Bahasa Indonesia) translation by Ilham Saputra (you can also view the original English article)

Final product image
What You'll Be Creating

Pengenalan

Tutorial ini adalah bagian dari Membangun seri Startup Anda Dengan PHP pada Envato Tuts+. Dalam seri ini, saya memandu Anda melalui peluncuran startup dari konsep ke realitas menggunakan aplikasi Meeting Planner saya sebagai contoh kehidupan nyata. Setiap langkah di sepanjang jalan, saya akan merilis kode Perencana Pertemuan sebagai contoh open-source yang dapat Anda pelajari. Saya juga akan membahas masalah bisnis terkait startup saat muncul.

Apa Penutup Episode Ini?

Di tutorial terakhir, kami mulai mengirim undangan undangan melalui email yang menyertakan banyak tautan bagi peserta untuk menanggapi, yaitu melihat laman rapat, menerima semua tempat dan waktu, menolak tempat atau waktu, dll.

Dalam tutorial ini, saya akan meninjau bagaimana saya memilih untuk membangun dan memproses tautan tersebut dengan cara yang aman dan fungsional. Mayoritas peserta pertemuan (terutama pada awalnya) tidak akan menggunakan Perencana Pertemuan sebelumnya—mereka tidak akan dikenal oleh kami. Namun kami ingin mengautentikasi mereka dengan aman untuk memungkinkan mereka melihat dan berinteraksi dengan permintaan pertemuan dan membuat sendiri untuk masa depan. Kami juga ingin memiliki beberapa perlindungan ketika orang meneruskan permintaan pertemuan dengan kode aman mereka tanpa memikirkan konsekuensi (neophytes! Mungkin, atau hanya orang biasa).

Sekadar mengingatkan, semua kode untuk Perencana Pertemuan ditulis dalam Kerangka Yii2 untuk PHP. Jika Anda ingin mempelajari lebih lanjut tentang Yii2, periksa seri paralel saya Pemrograman dengan Yii2 di Envato Tuts+.

Pada saat Anda membaca ini, Anda mungkin dapat mulai mencoba undangan rapat di situs web langsung, MeetingPlanner.io (perlu diingat, masih banyak pekerjaan peningkatan pengalaman pengguna dan pemolesan yang harus dilakukan). Saya berpartisipasi dalam rangkaian komentar di bawah dan saya sangat tertarik jika Anda memiliki ide tambahan atau ingin menyarankan topik untuk tutorial selanjutnya. Anda juga dapat menghubungi saya di Twitter @reifman.

Perintah Meeting Planner

Pentingnya Perintah

Selama proses desain saya, saya memikirkan perintah dalam email sebagai elemen dari proses perencanaan rapat dan waktu yang mengarah ke acara yang sebenarnya.

Ketika seorang peserta menerima undangan email, mereka harus ditawarkan izin aman untuk melihat halaman pertemuan tetapi juga untuk menanggapi apakah tempat dan waktu tertentu bekerja dengan baik untuk mereka.

Setelah rapat diselesaikan, kami mungkin mulai mengirim pengingat kepada peserta yang menawarkan perintah khusus seperti "Saya terlambat," yang akan mengirim pesan ke pihak lain mengenai kesulitan Anda, atau "meminta perubahan di tempat" atau "membatalkan".

Semua perintah ini harus mengautentikasi penerima dan memberikan mereka akses aman ke situs web sehingga Perencana Rapat dapat memproses balasan mereka dengan benar. Namun, situs ini juga perlu menjaga agar tidak mengeluarkan daftar kontak seluruh anggota jika mereka keliru meneruskan email undangan rapat ke pihak lain, yang kemudian mengeklik tautan. Pihak kedua akan dengan mudah masuk ke akun Perencana Pertemuan penerima dan dapat melihat semua pertemuan dan informasi pribadi mereka.

Perintah Apa yang Dibutuhkan?

Ketika saya memikirkan visi untuk aplikasi lebih lanjut, ada sejumlah besar perintah potensial. Berikut ini beberapa di undangan awal (yang mungkin saya sederhanakan di beberapa titik untuk meningkatkan pengalaman pengguna):

  • Lihat pertemuannya
  • Terima semua tempat dan waktu
  • Tolak undangan
  • Terima atau tolak tempat-tempat tertentu
  • Terima atau tolak tanggal dan waktu tertentu
  • Selesaikan pertemuan*
  • Menyarankan tempat lain*
  • Sarankan tanggal dan waktu lain*
  • Pilih tempat terakhir*
  • Pilih tanggal dan waktu terakhir*
  • Tambahkan atau balas catatan rapat
  • Lihat peta lokasi tempat dalam konteks pertemuan
  • Tinjau pengaturan email Anda
  • Blokir organizer ini dari mengirim email kepada Anda
  • Berhenti berlangganan dari semua email Meeting Planner

Catatan: Tampilan butir yang berbintang (*) tergantung pada pengaturan rapat penyelenggara.

Setelah pertemuan direncanakan, ada juga berbagai perintah tindak lanjut:

  • Jadwalkan ulang rapat
  • Batalkan pertemuan
  • Tunjukkan saya peta
  • Dapatkan petunjuk arah mengemudi
  • Minta perubahan ke waktu
  • Minta perubahan ke tempat
  • Beri tahu pihak bahwa Anda terlambat

Pertimbangan Arsitektur

Mengingat banyaknya berbagai perintah, saya merasa akan berguna untuk mengotentikasi dan memproses semuanya secara identik dalam satu pengontrol.

Untuk saat ini, saya membuat satu titik pemrosesan di MeetingController, tetapi saya berharap nantinya saya akan membuat CommandController khusus. Saya juga mempertimbangkan membuat pengontrol akses API di masa depan dan menyalurkan semua fungsi aplikasi melalui satu titik masuk aman ini. Untuk saat ini, saya akan menunda itu.

Untuk memulai, saya memberikan setiap perintah definisi konstan spesifik dalam model Meeting.php:

Membangun Tautan Perintah

Saya memutuskan bahwa, untuk sekarang, setiap perintah akan memiliki argumen URL berikut:

  • $id untuk meeting_Id
  • $cmd untuk tindakan perintah (dari konstanta di atas)
  • $obj_id untuk objek apapun mungkin bertindak atas yaitu tempat atau tanggal waktu
  • $actor_id untuk id yang menerapkan perintah
  • $k untuk kunci yang mengotentikasi $actor_id ke rekening mereka

Mayoritas peserta pada awalnya tidak akan terdaftar, tetapi kami membuat kunci otentikasi yang terkait dengan email undangan mereka saat pertemuan dibuat. Jadi itulah cara kami mengautentikasi tautan mereka dari undangan email.

Berikut ini tautan URL contoh yang disematkan di email:

http://meetingplanner.io/meeting/command?id=27&cmd=70&actor_id=18&k=9cHGl...1x

Mengingat rumitnya membuat URL dengan berbagai argumen dari banyak tempat di kode, saya membuat perpustakaan /common/components/MiscHelpers.php, yang dimulai dengan buildCommand:

Berikut ini contoh file tampilan undangan-html.php kami yang memanggil buildCommand() untuk menampilkan deretan tempat. Setiap tempat memiliki perintah yang harus menyediakan semua argumen ini di URL:

Anda dapat melihat seperti apa tampilan berikut:

Meeting Planner Places and Commands for Places

Memproses Perintah

Kemudian, saya membangun fungsi pengontrol untuk mengautentikasi dan memproses perintah. Inilah bagian pertama:

Awalnya, saya ingin memberikan perlindungan untuk pengujian saya sendiri dan juga orang yang meneruskan email dengan tautan autentikasinya.

Satu peristiwa yang saya periksa adalah apakah $actor_id adalah pengguna yang berbeda dari pengguna yang saat ini masuk. Itu bisa terjadi selama pengujian dengan beberapa akun, atau itu bisa terjadi jika peserta meneruskan undangan mereka ke penyelenggara. Pada akhirnya, saya akan memberikan informasi tentang situasi dan menawarkan pilihan untuk orang-orang. Namun, untuk saat ini, saya hanya mencatat pengguna saat ini sebelum mengautentikasi pengguna yang meminta.

Jika pengguna sudah masuk sebagai $actor_id, maka mereka diotentikasi. Jika tidak diautentikasi, kami menjalankan pemeriksaan otentikasi:

Kami menggunakan fungsi findIdentity dan validateAuthKey bawaan Yii untuk ini.

Dalam waktu dekat, saya berencana untuk membuat autentikasi dari email menyediakan akses terbatas ke fitur akun. Misalnya, setiap kali pengguna tidak masuk tetapi mengklik tautan perintah, maka kami akan membatasi aktivitas mereka hanya untuk pertemuan itu dan beberapa fitur terkait. Mereka tidak akan dapat melihat rapat lain, teman pemegang akun, dll. Namun, kami akan menawarkan tautan ramah bagi mereka untuk masuk ke akun mereka melalui kata sandi atau info masuk sosial. Ini akan meminimalkan dampak keamanan dari orang yang meneruskan undangan di sekitar.

Demikian pula, jika pengguna baru yang tidak pernah terdaftar sebelum mengklik tautan perintah, kami akan memberikan pengingat bagi mereka untuk mendaftar dan membuat kata sandi atau info masuk sosial. Model User.php memiliki bidang status yang menunjukkan apakah pengguna pernah mendaftarkan diri, atau apakah mereka secara pasif diundang ke rapat.

Untuk saat ini, jika otentikasi berhasil, kita hanya dapat memproses masing-masing perintah:

Untuk fitur yang belum saya buat, saya membuat tampilan untuk menunjukkan bahwa fitur tidak tersedia, mis. /views/site/unavailable.php, atau jika perintah disalahpahami, maka /views/site/error.php.

Dua Perintah Sampel

Mari kita lihat dua contoh perintah. Pertama, mari kita lihat menyarankan tempat lain:

Dalam hal ini, fungsionalitas mengharuskan pengguna kembali ke situs web kami untuk mengisi formulir di mana mereka dapat memilih tempat baru. Jadi, kami hanya mengarahkan mereka ke halaman tempat pertemuan buat meeting_id itu. Dan mereka sudah diautentikasi dan masuk dari atas.

Berikut ini contohnya—perhatikan menu breadcrumb mencerminkan konteks rapat, misalnya. Rapat Sarapan:

Meeting Planner Email Commands - Add a Meeting Place

Kedua, mari kita lihat semua tanggal dan waktu:

Dalam hal ini, kita perlu menerima semua waktu untuk pertemuan itu dan $actor_id. Penerimaan dilakukan secara transparan di belakang layar. Setelah itu, kita dapat mengarahkan mereka untuk melihat pertemuan.

Inilah yang terlihat ketika menjangkau tampilan rapat dengan semua yang diterima, misalnya. oke, oke, oke untuk tempat dan waktu di bawah ini:

Meeting Planner Email Commands - Accept all places and times

Sebuah Cerita Lucu

Menerapkan semua perintah ini pasti memakan waktu, tetapi fitur Meeting Planner benar-benar mulai mengambil kehidupan. Dan saya dapat mengirim undangan pertama saya ke dunia.

Seorang wanita yang saya kencani tahu bahwa saya hampir menyelesaikan fungsi ini sehingga dia memutuskan untuk memotivasi saya untuk menyelesaikannya lebih cepat. Dia berkata:

"Aku tidak tahu kapan aku akan menemuimu berikutnya karena aku belum menerima undangan Meeting Planner-ku."

Dengan beberapa hari kerja tambahan, saya mengirimnya undangan perencana pertemuan kedua—yang pertama diberikan kepada seorang teman untuk diuji.

Secara mengesankan, ketika kencanku menerima undangannya, dia dengan cepat meminta dua fitur yang bermanfaat. Pertama, dia mengatakan dia tidak yakin dia akan dapat hadir untuk kencan kami kecuali acara itu ada di Kalender Google ponselnya (umumnya saya lebih suka untuk berkencan dengan pengguna iOS, bukan Android). Tutorial berikutnya akan menceritakan kisah membangun file iCal (.ics) untuk mengimpor (jadi kencanku akan tahu ke mana harus pergi). Saya tidak akan membuat Anda tetap dalam ketegangan—saya menyelesaikan fitur tepat waktu untuk kencan kami.

Kedua, dia meminta fitur yang saya pikir tetapi tidak menyadari pentingnya. Dia ingin dapat menentukan tempat dengan suatu waktu. Dengan kata lain, Canlis Restaurant pada hari Jumat pukul 19:00 tetapi Paseo pada hari Sabtu pukul 8 malam. Saat ini, tempat dan waktu ditawarkan secara terpisah dan tidak dalam kombinasi. Saya akan menyimpan fitur ini untuk episode mendatang.

Ini memunculkan masalah umum tentang bagaimana selama proses startup Anda secara teratur mengumpulkan umpan balik dari orang-orang dan mengintegrasikannya ke dalam kebutuhan dan perencanaan pengembangan Anda. Tidak semua pengguna Anda akan menawarkan tanggal Anda sebagai imbalan atas fitur favorit mereka. Saya memiliki episode tutorial yang direncanakan untuk membahas bagaimana melakukan ini di masa depan juga, meskipun kurangnya motivasi sekunder.

Apa berikutnya?

Di episode berikutnya, saya akan merinci pembuatan file Kalender (.ics) untuk diimpor ke Google Kalender, Outlook, dan Apple Calendar dengan detail undangan. Menyertakan detail kontak dan peta dan mengelola masalah zona waktu adalah semua aspek kunci ini.

Tonton tutorial yang akan datang dalam seri Membangun Startup Anda dengan PHP—Saya harap Anda semakin bersemangat untuk mencoba Meeting Planner. Cobalah sekarang!

Silakan tambahkan pertanyaan dan komentar Anda di bawah ini; Saya mencoba berpartisipasi dalam diskusi secara teratur. Anda juga dapat menghubungi saya di Twitter @reifman.

Link Terkait

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.