Skip to content

Commit 390013f

Browse files
Merge pull request #84 from acara-app/refactor/premium-upgrade-flag
Upgrade flag config
2 parents 317eed7 + 4d3669e commit 390013f

File tree

11 files changed

+96
-6
lines changed

11 files changed

+96
-6
lines changed

.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,5 @@ ADMIN_EMAILS=
7272
INDEXNOW_KEY=
7373
INDEXNOW_HOST=
7474
INDEXNOW_KEY_LOCATION=
75+
76+
PLATE_ENABLE_PREMIUM_UPGRADES=false

.env.production.encrypted

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJpdiI6Im1kN2IxSnVRN1hFbVJVT0UvQkphTnc9PSIsInZhbHVlIjoiTzFobzBpd25hOHJDVE14Q2hFUXJ2MzMydTd4WmNqWjMxZExWdlV1bUViby9yVzlWNGthMjJ5VnFXTmpWcjJET1FsSFFZVklvY25HbHQwZ3dLY2svdGRFbzBYayszM1JRU0V5azdmVkRKYWcrL1dxMi9Pc1gwWVdTamZSbmJVbjVqemxxY3BPSFl6dzN6VkFZS0JxQ3VQRWtBZVR1R093Ni9OOXowWEFqNzlLTHdwWENKUXl4TUpZMjRVTlBVMFNyZzdDdkNnTDBkd0tGREtFc0xENE81VG40dXJ0WVhzVG5LNkw5VTIwRkNoRm9kb2k1bjMwd2FoVEZIZDNNTmlXSEh2bW9oaG9IMlFSc3hvNUFwcW0xd29Ya2VrWk9rOFJsTklqSzlkK1M0SzB2bzlUajhOOGNPOGlPWVhWVWcrQmtrKzNuYVN6YUVzUFc0YkF3WnFvWWdDOFNoNFhpdzBLOWY4eWxvUEwwVEJVemcxNDEvQVhEVFh5anJHZU9QYUJYMnM4NEdWY3dDbHd4OVRTdnAyT1dWK2M3eEV5MUJlc091L3dTT1k5Mlk3RngxeldiYmI2R1NnQUNvbjQrRDRVZ0Y0L2J1VHVwTktmU25DWXFnWFdvVVQ5M25zQ2pMZUs5bStWZVNLUEtEMkZHYWw2U0JxdktaUTFtb210N0Z5VjBCOGtoTERyOUlmdWkyWkxWV1FMa1dKVlp4RlJmeDN1YkI0cGpXSEpaMlIrMmFLUGM1VlVBNEU1ZnJreGI2c0F0NW0rY0c2UXhVbWpqSXp3Vm53eG5xVG5JVThwOFRnRzl5NTVSNUxBUWZudDhHMTNlNEIwNDNGeW5pcWlYQ0JjeWM1STNTNk5UOEdJS0JHTEZHdGlPbDU3L0o3cDM3UXRLZWRaSjQ4M1VkRVNXeDBLUVA0cjZpQWlCSm90SVZYNXlPenRoKzBJMmNLUEVaRzBESFlZVi85ZjFtdkltNWJ6ellLTEtHZDJNeVptbHI1VFl2Rm1PQWM2NGptQWg0OGc2bzhJZzlYOGdEUXNVQUUyRnJZN3Bpc1J0RGRXVSsxeEMzTHJza2lvT0xMLzJ6SSs1dDR3QjB6andLNUFDWnk2QjlqOG1ELzRwUXdWdE9YRUJSb3dsSjJDYk4xRi9jWjNQeFVrWjFZTEV0ZkVBMU4za2FzWm9Dd3RLVHlpYmFQYzRIeTA0UXVoeW1Ecmc2Rm5oWWVPTVlGSXhsaFdrZ1FzcDhIVXRib3lTRlJFTzNqaXA4ejRoK3BpenB1bVBXV3JGNmtjdEFXbjB5RkowRGVDcE5Gcm95eTV2empOa09nMGNhWElnL2grZXdlVXhrNnlnL3lLN3duYnI5TFQ0dHlIODdQTmVORUhDRVpKTXFMUmIrS21ndEdHMlNiT3pPQlhxMlduOElTemwvZGRpT0YycWZsanRab1VzeTRjS29qTmYxN254WDJkVm1OdE5KK21zNmhEOXBWWGJmZG8wN1FOa2lyRUJJNU5xSlJITHBaekFJRytPaGpoYTVjemtoaGY4UzI1S2ZOL01teWltSG0wNlRnK2hUcGo4dkQ2M3F1cEhVaXpxb09Db0tPQUJwc3UwcGdqRmtRVGxNdWRQb2RnaG5Ca3pWSHE3RDU4MFYwcTlmQ2N0Y0krTFpmOGR2c2ZndUoyTUhJL0dGcDBPU0F6SC9sSUY3Z2dCVFJ1SGcvdUc1TEpmNXFMOFV1WW9abWtYS1BjOXc2d0kyQjZ0M3NRTkI5encvd2VTTVdlZmx3ZW80UWhKSUFFWUE2T3Zrei9kRktJclRBNTRYNHNZRG9ham1GcmljTllrOUkrSFpLb2RWRVo3QjUxa2MrWE9qVHk0dlZVSkRoc0Z1VXFTemJkYjh5Qk9wZ1JGMHB2UmpDNmF3ZzVLNERRT0I2UlZXMHZyVlQzNkV3T09FaHU5Q2Fwa0hnM090YzNjT2FXblJTczNFUnpJbzVDRjlaaFU0MHowMHZtUGlPOGdRVlRNR1ZiYjBBMmpMT013MnJqVXBTM2VPNVpxOXk3UkNkeTBZSzlRcTI0R0dCSi8razBkNS9jQVMyU0hiY0J0TjdOcXVPYk1Sa1pqeVAyR0pHdWV2VVREZWtlMUhwN0ZsRXJQK3lVVUxKMEhrSW9xQ0Erb1U4MHorVGFaY2txTXZpMEJhRFU5NUFxNERzWkxtTjBnSjRZNUR0NnZiekE2TTNnSXh1bEl6UzgvODFYbmhqUUNUb2l0Q2FnU1l2U0J6czc1WjBjUWdJemtldE9HRm84RHZNTndUYUE4ajRoSmF6R0plVU9QeHZ4SWxnV1JFdFprR2hRRFVnRDAxVThLVHFXSW1qQ0FRb0ZlUGplWE8yR08vdDJYKzhZUzcyY3h0MFFJUWhZbENreHhrY3gzR0pVSEF0VmFzOEVvdGtVZlJUazhITDFhaGd1dDAvYlZPb2QrYW96bVdPYWgrRisrY0luVEcvZDZabHA0cWxiYW9DckJSbXdqWkQrQ2JiaktnbG9MVGhLdGNST01ILzNDb0FQanE3OThjaXRNYnN0dkJkMUFiMkFyVjl6UmpEak9TM0ljVlFpbHcxUnNyTkgvQ3VzUW5ueDFaVDFZeFpqWDN1bjZpK1hCeGl2WkcwMHdZcWo4SDd5UTBlWHVDOW13QUVpcm5ZMzNob1o2bGUwWjNLUVhsKy83YUNodTY1dFNyL3lSd0g2UnZxSkU1TDUydkJ2cDZSL21qVlVDM1FNck5CRXdGbzRzeXVYcUpwK3BrTVRnOUtTZkk2WTV2YWVqa25JTXZGQmlJelluekhUYmcyT0JYbGxHbWdpeWE3bmNucjl6MFF1MzhVRlpFT0V3TVBnd2prZkF1WVJsUGlqNG9hT1p4aVEwVW5tY3hVMU0xb3oxdmhVWitydHd6ZEFqb0hvQWQrU1I3S3hiMHhYUnZtbzBoeUlVUlpUSG9QOExPbWM1UktyVldHRVJlUXBQdnUxRUNUcXJ3Yi84OG5ZRGZiNnE2U1VtZ0RGZ3lYallGdWZFdHd5T1JJMmRadGtqT2I1SWtTVnN2TjBrUUkrN3RDUHZpQVhWLzVGUDk2a2FhWVU4OFFWMllyZ25wOHpiREpUQ2oweFlvcXJBTlhuK2NDMDE1TGFwYWFRODFhVnBjMWxEYTNLN2VxR3hzRUZycm9xTERMdDA2U0ZxVkh2ZUtBVzMzNW1VYnlyd3BySnVXN1pXYlJYbDd6WmtqUEpHMG9ST2ViM3JlRVRTMlE2WG43aXNNSHVJR2kyRjhUeWxocExqallwcU1IenNRVUw0R1FYZ3M2cGZtQ0trNzdIMmxVTzZGWWpmUU1ka3BzdzZkemoyQTRiUGV5TytwL1BVV3R4b3Q0bEt0NExoQ2tSYzRvWm1FRjVNNk1UZTZWRlFZT1NFTjUrcjlxcitETmFiZEJEcEVoajFnYUdGbERIVXg4SGhBbkpSQ1gzbU9YcUQrcEdXajE0NGx0V3oySHp5aFMvL0w4b3JOd2VoVXJVQmFFMnJJV2VYc0pMeTh2THFnR0E4TTlaN3dvZHFQSVlPclZvQlpLUnRVSmI4b3lnY1VuejJidHVvc1lTeVAzRmZSY2hLV0liZTlYSFpldWVDcFZ3QmNkWms4TUVQWkpFVFVTWUFaM3VZalFDRWNDV2lPVEFHVTlidGFhM3pOYmluL3NBVGtCZkpVSWlabWJSZUc1T0xVY1ptRUN6WjVxN3A2QlozVmdjQVBYcDIwcW1VakQ1YVZxc01Eem1lallZNEVScVZTZS9KZFNJSFQ1RU5ORjJIbEk1b3Z2SW1ENklpNFJWc1ZxcGNDZjk1T3dRSmhoc2Ztak1GL09tUkxEMVFsY3c0T1NjVEdhZk4rdDJMejJ1dU1jSG9sOEJ0TFhFUkhjVy9CSm4vbWxHZDZhdGdoVm9qYklvbXpsdVhEK2doWllNcG1PZFA2Q21wMDVQWTFnQndlWm1yNnF0SXRyQWs3NEtoY1J5UDFBZzFzUjIzalR6R2VLWTZxc0xhT2wveXZ1TmRIR25Gd1FjYjFTR29URSszM1N1MThZelduSXMwQjN5Y1FieUp5RTZCTUVOUzdnYXBTZGVZSkRJMXVOL2tESTlHVXBJdW9XS0NQandOdE43bVVzeml2a0xSbzE5YmJocmR1L0piL3pzM1JRS0JuUU1qUER1UC93NDNyYUNnYllDWmV0S0ZIdHNRSjZ6Yi9lbEtPREt6cGhzdjBDSDhKcjQ1STdUS2FtOGRFZlJHSFpSWFJNQ0hadDQwQjNWRVBHWFg1STNaOC9yMmp3NVpMNlVPcjB0cWk2Z3ZETjZHd0Jsakl3eGpmZXBzSkc5bzY0bUZzWmE3TUVGVU9BaGYyZzIrQWFIeStpMDRhL0dLbWtnN1pnY1phQXFPNkRNTHNyWlpsMU5QdlBUQ3VsSDB5OVB0dFEybFRiOERnb0x2ZloybDM0WlNoS3YweFAvajZDMkN4Y1FQSTROSXNPV0t1T3o0djljRkdFT3J3Zm96d29WTkFEbEoxUGJvdzJXOGpxa21uYVRsUTc5MUVwNGNPa3FZUVBjYjBmT2FyTFA4ejA0bDMyUkVkTHJQRDRjOHFkOGZuUjduSjBYRUxMMU1MOGt3S2lGL3pqTE84T1Z0WkNKcEZrWFJrOUMzQ2hGQy9KUmJhV3JWTkdiNm5ENDIxWE9wcnZQbk44bWRpWEkyWFJ4YndINFpJZkVjTnV3TnZGdmhGMkJSem1OS1pzU0YvSDNaeWxJRStCNy9Od2NVaU1WT2JZTm1oVjduL0JGVHlNK1B6WEdGWU5XNjlwOUt6L05tT0FQdjhFRjhpaUJVbysxTDNyNlBSK2kxWWJpRGV5bytJUURWZGh4MUtQanRwVTVSanRxSVEydUVlazlpUTQyN3Q5N2NTRG1vQ2RKUDJaQTArTFVza1JRTkpWMFYvM01CR05mc0g3RDJoYXVUdDRCQUhwbjB5NmJnQTlwZGhsaVNmYlIvYWN3U0poZE0xMnpqZFE4b2dXNFQ5VTNFREY2SURMNmZRSFpyY0FwUWNoc0xUUnk3YTRmNWp6blp3Nk94RzhxWWEwSVQ4WGJ2OXhZVzM0NGVSVnowTjdCNXNKR0RSdDVPWCtOYVF4b3I3OUIzSmVUenU5VXVuZ0xCRm9VQ0dmNEtQTllDYyt6c0JqSE9EOStmS2Uxc09OOHpaTS9vN3RtWXpHSFZCZXlDRElsTCt6L0hCbFd5MlAyajFDcnNPMWZVV0tyb09RVk9FTzJYV2QzbmJyMGcyV3dTNGlDbWp4T1dMK1hzYzJ4bDIwaUJ4elFOS3F5S21MYlFCdG4yeHVnQ0xHcjlKOEpLT28wc2dtT2kwcS9wQVVORThzVEQwUFBMVVpodmg5bHpGL2FKMWd4elBaeXJIZFM4ZStpdlplcWlneE1YdHRUME9RS3VOT2wxKzZEUENkanZkdlp5cU5weTFzZ3c5SFgyYlVNS1VFVnlEYVFWaHlIbTNDaEtTRjdieG1Pbys5SEQzRHgzQ3I3KzBYb0JzZmU3N3krWTEwZk1sMDBzS2dod1Z6UTRMUFlIcjhTSWpOMk9mUkxrZWlwUEp3dGxuMkRIUjdNZ0J3Y2l2L2tsaEg3ZEg0Zk5rSERJV3pTTlY5ZW41YmdXRzZST0Q0aGxpOEdVQW9udVMzYncvc3RYTFI0WWJtWT0iLCJtYWMiOiIxYmU1OTNlNjFhYzUwNGNjMmYwZmE1ZDkwOTNmY2U5MTc4Nzk5MmQ4YjcwODA4Y2FlNDdlNzgzNDAyMzc2Nzg1IiwidGFnIjoiIn0=
1+
eyJpdiI6Ilh3bVFGaXp2OUdtTzZOM1g4Mlh6aWc9PSIsInZhbHVlIjoiUjVvSkxjK04yUDNlMXFmLzZrNHk0SHd6NGNRdUJuZkRVMFo4TlhYb2lxVEw4Sm5PSmRETzlSaW5SMmZxUkMwOUtjaVJNWVN6akgxbENHd05FOGlwMWx3N2Q4dk1zWUZQeG9CQTNFWUxCTVhPQ3h5Znh4YzRXTzRDVEFiQ2dQU29QTnNoQmRMdUZLWWNaaFU3dGdkbExpeXZKLzRMRGVyRjdpamt2bjBGaDJ6Ty9oUWhJVGNOZ0ZnMWFCeUdyUVo2cGxkZ3J4MlhLMi91eUMwRXZSOEN2K0FvQW9GS3hNckc5VWFhYU1UbWNid1hDOS9KOXp0VGd4b1lvNFVoMi9jYTFNVFMyelVBZko5aFEzZEJVS0RGRVppM3I5TnhPbmFCenBiamc1dWdXZ0dkM3JvbTBMbjRKZXhBNDhrOGJYY2Q0SkY5blVEU1dkWHZYU1ZyajlPRllFQlA5SlVBbFU1eGxXeW56RDRuY1RObzZERm5Xd04xdER5QTJqQzNJNjN0QXAvMmtXNHM3cENweFNEVHY4bUxuRzhZaUZ2NEpwQnJ0b2dZMEUwUTdWSUUrWmg3SmQrMnk4TkRMSlZwV1BBM2ZxZkhqVVpmOS9pSU1rbXU1OHRVMC9namdSNnJtVkY4L1duK05oZ3BaQnJyb2xMWXdvM3IwYmIyZ3RucHROdksrcmduTGMwY1dZMlBnaHJGMmltZmlmYU8rdzBHaDlQemZ1Uy9nNnJ5VnFGNko3QjRyV3ZHd3Y5REJHc0Zrb3hwQlAyMXBQb2lUSkMvdkx1a0luVGxyVFVlYlNvbmRWWjVzOXdVTWdLQkJvNC9kdWRIczRYd1hqRlhSeDJ3TGxOeWtoWTh0bldJNzJJZkxONXdMci8xeFluMzNBV2ZpalJ0ZFJMYUlQMmkveGI5TkpZcDkxc05JUEtEanRzNDJJdU5FekpGNHJjMHNvbmloTjFjd1NXajFlc0dMM2F2YWd6cE9KY2taTWJsemoxOW5zWnpSdHR1ZUhMMjhlSkFRV2cvRFppZzJkTEtnN0dKbGNUZ1pDOTNjc2dWSjQ5NU11cjd2cW1XU1cwSzNVbnNxS0RZZWcwUXJjYkl2ZEd1S080ZjRRVjJ2cGlyQS9Fa3JaRjNtckVaL1FudzhxQ2hyOTBycTdEZUZYSmJ3NENBdGR4OGl3YmxobktCeXhTVjR5UWd0RW5GSkZqTDVOdmxROU9BNld2OVZqOUZWbzJySi90RVpqN0V2TGtyWm9qcmw4ejliZ25BTFpjbWZ1S2ZVRkRFQXR4cVdLMlhOdys1SlpDYlhTR2FaN0hhYjYxT3JyYXVPblVwUTJwWm5XaGNDUDVjSW0ycjFVR0cxM3VoZTNIWE9KL0R3dUlLUnFMNG8yQ3ZRa3AveUxTQ0xUWnJkbEd5c2pQbzFTajBQalpMSzNrTHZVU2hTZTVsQzFKZEUrWmxJdXRmbW9UQVI4dENIWmZZWiswVU0rQ1hwNzhsZFZ1RFcwTWJHdCtreGhWaG9HT0lBdHhLNHpaMkU0ZnBYVnpMcEJmRGhCcXVTa1IwNFBmYWVOSEJyNTFqYk40Rko2dU93bDkzaExSbmZuTnk0VTU1cElBc1N0ZW1nSjZwRE5nbDJVeXEzYmhsRUU0RUFHcVN5bE9PVENuSWVISDN2YWVVR3ZReGNWZldMYUZqaFdGQldEOXZIcVJlQTZBVkhXTllXMDM2YXRIMUtsT3Y4cUlTL0hPajVzU2owMUlFUjlQaC9IYmtiS2FjeXR6ckhTK2xoZlVJQ2taQTJvV29zT3RWRzRsK1hCOFlGcFgzQXNsQVZWOVd3RndRcGlYWFhvTEVZWEZGVDBtam5IT0U2djRWU1V2OUtRUUNNb1NaaWEwTE1RS3pBaXRhVmRKbmk2dmx6TnM3eE0vc2hqckZTRUJCNzZuUG1hSnlXV0Jvdm1kbEdvUmhVVTQzcDhKVEtEZ2FHbDl4RDNnRmdveC9uZkRiaHU4SStBZ1hEL09PRkpjYk5PTlVDbEtDVGNIT2Z0MjRlTW5kaWlWU0FaRGdlK1loRmQzM2VucUpPK3VYTTVRMmZIMXRjbmp3NUpKTy9mSzhaK1M5Rk4xQ2F4OVRBSCthaGpHS2o3cEJzMTFJSFg5bTc1QiszYzFzWHBjazRBclBxM2VNbTNsRXV4Q3JzUFlxLzM2SHhkMEdPdHovYmhneFdBTE0wY3hOeXpNeXpkQTBFVnNrazlNMEpWZ1VKSWNiaGordG1DdkUxV081TmhaNWFsMnZBUmN3MGh6ZTJuNXFxL2pMWDZPQTU3bkllcWtPM1BFRGc2b3R0YXZaUVRjNTduUncxK3B4U0hFTDUyMWE1UnNZc20rM1F6WTNIclVkRVBRZEkyZFRlSWFKYXRKQVQ1aFRWNU9hMXRLU0I5SnAydW5MWWtITHhLNisvK1dJMjYrQ2NYVm1BcUxoNDFXTHpZWG5kOXlTRE1xQUV2d09ROU9YSmUwV2dUcHpmVUpLRUtjZ09QSXFsR01UbU41c2VoS0x5YWtqN2xHbGU2aVdzemsvK2tVQmhkUHNRcVJIQkVod0hoNXIyNTJCbzdFRCt0R2hxdzZKckdBWDNJZkxscWNJN1RudmhrblRCdDluejFMTmcyOTZ6SVFObHZBYnlNNEVCbE8vMm1lakFJcVFWSXZtUVA3UkQ1azNickVIM1AvemhMam5hc3FlbTVvTjkybllNUkNIMnN1SnpWSWRoa3o1WmdMYkRhaG53Rmh6bkU1TzZwSDZHUUhtSHZFRm1KL3JPeE1EZXd2aElkb3c0bmgreU41UloxVHFWVnN4L2g1a2VuTVB4ZG9qMjFzNzdFRTVXeWVNc1I5N1RaL2pwY3FXejBjL1RxS1BUZFkvYUVUWXZnZER3TmFoM0ZoRzNnczZhMFJudEZoY2c1TUVTdXdLNnZnSDA2SXdXeElYWHRmdWt2R0JmN3BWMUFsNUROVEtSSFMwbGg3d3hqVFhGL0JYK0JJSFl5SFJmNXhsTElZbGZ1SlduZ29RaTMrcGFPN29yOGJMZk9IT2tyWm9lbkZGenpsUjFWRHQwVml2T3o4ODloVlVCeVZ2ZnJ6dWplL3IzbmRUZHdyU2pXbmNJS01uUnZjNFVyNFM3R1FtM21hVmRLZElma2ptUWovRmNWT1JyRGpVZDN6RlhJdTRTMXJFc3hzUURFQWtWRnN0V2FEU05ETGoxd2JUbFgxL052bmRqY1pkdWVuRjhXU1VBbEhpWXhUdDNrSU5maVRvK2h0MlI4Y2swM2lEUElqVGdkaUFqYUV5ek95dWRmYkhYQm5pcUppSTFieDRUQy95YWgzMFdmcjQ2YjdBdjI1dU81eGZJNS81a3kvSWd4WFlhOU42b3FBVWgzOTlWQWpnU1JQNW5SMEFFSE1pbFh5QlBkZGw2UlppY1dpTjRHam5zZ2VsZG1CM2VjRjQzeG9KbkxCcFh5NDMrUEE4WlQ0K2dXYXFoQzBjMTRIVTVpa3RKTXpzd25uNXFGd1AzMURrY3VwUXBqaTNzcEtpVXFxZ0hoYlZNWmN6UEwyQW10VUZKaGg3S0tZTVR1OEZtdGx3dG1Ra29ERG1mSkhqV1N4RW02VmU3VzVMRmllRWZOUnJUNHVRRWRrUU9ZOHMzNFhRa21yMGdCOEd5UDVIdnZQOFY2Qks5aGk3eDJ2amN0UGZQdDV5eHpkVWF3SHMxcm9yeU5OY2pKWDVaeVp2aGJFclphZTFPWGlKaFBndWdvWStmRWtuMlZBZVZEako5eE5Ed0kyeGV3RjUwVGhLWWNhaStpT0tsb0dQS0pWd1JxV05oSG95K0ROUTBsQndWWHd1a3Z2a09acEsyTTJVaDRBQmErRUJyRDhzbkJaczk2Q3ZocmVsZVBvZEZsR1MrU1prSmNTejBLQm5Zd3dJY3NYYUM4N3RsTXNFS2RxRVlLV3o5enZUZkZJQmplaXNZdzF6QTdXMDVWK0oybnJCT3pXRkVISkFpSGxGcFFHYU90em9vNk96V1lvRllnV1RVYUhValdPdDlEdEszcytkRmw1RWdMNHlHR0VBSWE2NkpYL1lhNmg3MXlRWWN2WWhvRVoxU3RkdDMrR1hON2dzbG00akQxUHpLakZ3dk9WV1NMM3BjcWg4UGFxaXFuYjNoMzYvdHlCLzBKS0t4UGprcHA5c0pYb3g0TEhoQkVCbm5hV2dSRTFqUXVvSkNUT2F3Y2dwRVRmMVhveElqeitjRm4xZWFKQXVSVFo3VGJZRXVhMzNQdGV1Qm9mcnhJZ0JVdVRYZHBMNVY3d2pydUtPYW5tV0FZMjI2RHEyMmptOXYvT1BJMkRZeXhkU3QxTVdraWJwZ2huVGh0QndOSkg4bEhtcFdjS0wwSUE4OGRTa0RoWW1vSnJxTWZyWjNqY1ZjR3NmRHMyME1sM2czU3BIdFM2aEVwWGlNWTBEMG5HUldHZTJrUHl1bnBrVDZHWXdlVjRMaWVUWklBNDZqVzZaMy9OS0FiQ0MzQSt3KzNzVUEwdlErUE1JUkJ3aWF5em5PbWdORzE1VWFEY3RGaXYreHd5LzFIbzNGUldVRmRWVGNrWjJDMWltZUQ2Y1A3NU5qSGF1NlR0b043cTdtU3lSMDNwSUNvNzAyRTF5NVFrb3FSVVN0dUgvdmMrbFVXVndqQWg1d09LL2lFY0Q0bnhBVmpzcUJCVzZuN0NjK0xpS2RZQXhuUHpUWWliME9RZUxNeVc0UmErdXorUzliY2hVUzZhM2dBTGVlQ0hjNzAvbzBqd2hWbzNUSXYxS2RWdXlIRCtMQzdIZG1uUTUxMmtIRzNMV0M4YXJqc3NETlJWWHc4L2J4ZFpHQ0NjcWFzQk9idmR6VGFlRTJqbDVXVCtsSnRsbVpUMEw2RkNuQkdYekRrZTJyMEZvMEpob3NROExUUDlPVDlwNXZwalJGRmx1Qm1WNVk5V3dwY21EelcwS2FOWjZhWnN0K0NSZTlIRTZ3am5GcjVtOTVXbkxra3VXTVRRWUREbkVHcDQwRmVBODBQSkk2MFU5M1ZFM25lVGEwM1VoVU5taFNna0F2VnEvV1QxbDJNTkpHL0ZHRjRNeVByOW1pT2N0WStMcWFLMzBHUi9LOC84dUN2NkE4M3lRQitwZGRwdXdQdmNwbGR5dTIvaVNBSE1zQXNaWjlkZGpIV0o0UFRMc3oyaElxckhtdXRrSHpXZUJKMCtPVGtPNFA1dnB1MkMyOUhBbWQ0SXhhTHRpM1VmQW9BODhtYWdLaTRoYnMwcjlqaFlqaUlhdnNPaVpVMCtPVzEwbFgrMDI3Z3orcU8wNDhVb01jbUg5K2x6SHAzSm1zMktYMlN0Wi94SCtkREk1d0d4N0VHSnVYb1pUc1IxTzFFQklPVmQrcnkwd0ZhZXU0N29mUkVSOFhuNDhxcGpvUHFlQU9vL0lWN2J2SGYzbE9Ka244MlYwZ3RzbnNXaVFON0JIZHhTdTZ0d3FsMnNhczRGM0hjREdNaUxMUGsvL3ExSHhvblpWL0FqV0hOd1BwK3lvYm1Cc1kxN2NZY2pzQ25nV2ZoNDlmL1VpV0MxcGN5bGtiSnQ1YkxxS0FJYzlVRUluaC9NS3kvYWhTUTR0b1I0N0VZRWNCWnM0c1Fmd08rd3V3NVBzay9jUlJ3TGNaNzFBY3VZY1ZuNjZXbVUvdE5rZWd3VlNqcnUyM2FrRkhYS0pJNFRId20zSHR5SldoTXV0OGNVUFQ3d3VUKzRobmc9PSIsIm1hYyI6IjkxZTU5NDNhZjFiNjBkZDY0ZDliYmE1MzY1YWNmNTJjMzIxOTVkNzFjZDdkNDc5N2UzYTIxYWNkNjY3ODhhYjAiLCJ0YWciOiIifQ==

app/Http/Controllers/ShowMealPlansController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function __invoke(Request $request): Response
3434
'mealPlan' => null,
3535
'currentDay' => null,
3636
'navigation' => null,
37-
'requiresSubscription' => false,
37+
'requiresSubscription' => enable_premium_upgrades() && ! $user->is_verified,
3838
]);
3939
}
4040

@@ -151,7 +151,7 @@ public function __invoke(Request $request): Response
151151
'mealPlan' => $formattedMealPlan,
152152
'currentDay' => $currentDay,
153153
'navigation' => $navigation,
154-
'requiresSubscription' => ! $user->is_verified,
154+
'requiresSubscription' => enable_premium_upgrades() && ! $user->is_verified,
155155
]);
156156
}
157157

app/Http/Middleware/HandleInertiaRequests.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function share(Request $request): array
4242
'user' => $request->user(),
4343
'subscribed' => $request->user()?->hasActiveSubscription() ?? false,
4444
],
45+
'enablePremiumUpgrades' => config('plate.enable_premium_upgrades'),
4546
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
4647
'locale' => $locale,
4748
'translations' => Inertia::once(fn (): array => $this->getTranslations($locale)),

app/helpers.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,13 @@ function toast(string $message, string $type = 'success'): void
117117
]);
118118
}
119119
}
120+
121+
if (! function_exists('enable_premium_upgrades')) {
122+
/**
123+
* Check if premium upgrades are enabled.
124+
*/
125+
function enable_premium_upgrades(): bool
126+
{
127+
return config('plate.enable_premium_upgrades', false);
128+
}
129+
}

config/plate.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
return [
6+
'enable_premium_upgrades' => env('PLATE_ENABLE_PREMIUM_UPGRADES', false),
7+
];

resources/js/components/app-sidebar.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ const getFooterNavItems = (t: (key: string) => string): NavItem[] => [
9696
];
9797

9898
export function AppSidebar() {
99-
const { currentUser } = useSharedProps();
99+
const { currentUser, enablePremiumUpgrades } = useSharedProps();
100100
const { t } = useTranslation('common');
101101
const mainNavItems = getMainNavItems(t);
102102
const profileNavItems = getProfileNavItems(t);
@@ -129,7 +129,9 @@ export function AppSidebar() {
129129
</SidebarContent>
130130

131131
<SidebarFooter>
132-
{!currentUser?.is_verified && <UpgradeButton />}
132+
{!currentUser?.is_verified && enablePremiumUpgrades && (
133+
<UpgradeButton />
134+
)}
133135
<NavFooter items={footerNavItems} className="mt-auto" />
134136
<NavUser />
135137
</SidebarFooter>

resources/js/hooks/use-shared-props.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ interface SharedProps {
77
subscribed: boolean;
88
};
99
sidebarOpen: boolean;
10+
enablePremiumUpgrades: boolean;
1011
}
1112

1213
export default function useSharedProps() {
@@ -17,5 +18,6 @@ export default function useSharedProps() {
1718
return {
1819
currentUser: props.auth.user,
1920
sidebarOpen: page.props.sidebarOpen as boolean,
21+
enablePremiumUpgrades: page.props.enablePremiumUpgrades as boolean,
2022
};
2123
}

tests/Feature/Controllers/ShowMealPlansControllerTest.php

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,45 @@
574574
$response->assertOk()
575575
->assertInertia(fn ($page) => $page
576576
->where('currentDay.day_number', 2)
577-
->where('currentDay.status', 'generating')
578577
->where('currentDay.needs_generation', true));
579578
});
579+
580+
it('requires subscription when upgrades are enabled and user is not verified', function (): void {
581+
$user = User::factory()->create(['is_verified' => false]);
582+
config()->set('plate.enable_premium_upgrades', true);
583+
584+
$response = $this->actingAs($user)
585+
->get(route('meal-plans.index'));
586+
587+
$response->assertOk()
588+
->assertInertia(fn ($page) => $page
589+
->where('requiresSubscription', true));
590+
});
591+
592+
it('does not require subscription when upgrades are disabled even if user is not verified', function (): void {
593+
$user = User::factory()->create(['is_verified' => false]);
594+
config()->set('plate.enable_premium_upgrades', false);
595+
596+
$response = $this->actingAs($user)
597+
->get(route('meal-plans.index'));
598+
599+
$response->assertOk()
600+
->assertInertia(fn ($page) => $page
601+
->where('requiresSubscription', false));
602+
});
603+
604+
it('does not require subscription when user is verified regardless of upgrades setting', function (): void {
605+
$user = User::factory()->verified()->create();
606+
607+
// Test with upgrades enabled
608+
config()->set('plate.enable_premium_upgrades', true);
609+
$response = $this->actingAs($user)->get(route('meal-plans.index'));
610+
$response->assertOk()
611+
->assertInertia(fn ($page) => $page->where('requiresSubscription', false));
612+
613+
// Test with upgrades disabled
614+
config()->set('plate.enable_premium_upgrades', false);
615+
$response = $this->actingAs($user)->get(route('meal-plans.index'));
616+
$response->assertOk()
617+
->assertInertia(fn ($page) => $page->where('requiresSubscription', false));
618+
});

tests/Unit/HelpersTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,13 @@
7373

7474
expect($flashed['toast']['type'])->toBe($type);
7575
})->with(['success', 'error', 'warning', 'info']);
76+
77+
it('returns true when premium upgrades are enabled', function (): void {
78+
config()->set('plate.enable_premium_upgrades', true);
79+
expect(enable_premium_upgrades())->toBeTrue();
80+
});
81+
82+
it('returns false when premium upgrades are disabled', function (): void {
83+
config()->set('plate.enable_premium_upgrades', false);
84+
expect(enable_premium_upgrades())->toBeFalse();
85+
});

0 commit comments

Comments
 (0)