%PDF- %PDF-
| Direktori : /home/graphicd/public_html/vebto/common/Notifications/ |
| Current File : /home/graphicd/public_html/vebto/common/Notifications/NotificationSubscriptionsController.php |
<?php
namespace Common\Notifications;
use Auth;
use Common\Core\BaseController;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class NotificationSubscriptionsController extends BaseController
{
/**
* @var Filesystem
*/
private $fs;
/**
* @var Request
*/
private $request;
/**
* @param Filesystem $fs
* @param Request $request
*/
public function __construct(
Filesystem $fs,
Request $request
) {
$this->fs = $fs;
$this->request = $request;
}
/**
* @param int $userId
* @return Response
*/
public function index($userId)
{
$this->authorize('index', [NotificationSubscription::class, $userId]);
$response = $this->getConfig();
$subs = Auth::user()->notificationSubscriptions;
$response['user_selections'] = $subs;
return $this->success($response);
}
/**
* @param int $userId
* @return Response
*/
public function update($userId)
{
$this->authorize('update', [NotificationSubscription::class, $userId]);
$this->validate($this->request, [
'selections' => 'present|array',
'selections.*.notif_id' => 'required|string',
'selections.*.channels' => 'required|array',
]);
foreach ($this->request->get('selections') as $selection) {
$subscription = Auth::user()->notificationSubscriptions()->firstOrNew(['notif_id' => $selection['notif_id']]);
$newChannels = $subscription['channels'];
// can update state of all channels at once or only a single channel
foreach ($selection['channels'] as $newChannel => $isSubscribed) {
$newChannels[$newChannel] = $isSubscribed;
}
$subscription->fill(['channels' => $newChannels])->save();
}
return $this->success();
}
private function getConfig()
{
return $this->fs->getRequire(resource_path('defaults/notification-settings.php'));
}
}