File: D:/HostingSpaces/SBogers10/vebon.komma.pro/app/KommaApp/EndUsers/Kms/EndUserRepository.php
<?php
/**
*
*
* @author Komma <info@komma.pro>
* @copyright (c) 2012-2016, Komma Mediadesign
*/
namespace KommaApp\EndUsers\Kms;
use Illuminate\Mail\Message;
use Illuminate\Support\Collection;
use KommaApp\EndUsers\EndUserService;
use KommaApp\Kms\Core\Kms;
use KommaApp\Kms\Core\KmsSiteRepository;
use KommaApp\EndUsers\Models\EndUser;
use KommaApp\Kms\SidebarListItem;
class EndUserRepository extends KmsSiteRepository
{
protected $role = '';
/**
* @var EndUserService
*/
private $endUserService;
/**
* EndUserRepository constructor.
* @param Kms $kms
* @param EndUserService $endUserService
*/
public function __construct(Kms $kms, EndUserService $endUserService)
{
parent::__construct($kms);
$this->endUserService = $endUserService;
}
/**
* This method gets an EndUser model or null
* When $endUser is null, call newModel()
* This is Called in KmsSection@loadEntity.
*
* @param $endUser EndUser or null
* @return EndUser
*/
public function getModel($endUser)
{
//Check if endUser is null, return new model
if ($endUser == null) return $this->newModel();
//Set the extra form fields, eg. title, thumbnail
$this->setExtraModelFields($endUser);
return $endUser;
}
/**
* This method will set extra modelFields.
* eg title and thumbnail for the form.
*
* @param $model
*/
public function setExtraModelFields(&$model, $new = false)
{
//Set title
$model->title = $model->company . ' (' . $model->first_name . ' ' . $model->name_insertion . ' ' . $model->last_name . ')';
//Set the thumbnail
$this->setThumbnail($model);
}
/**
* Set the thumbnail for the model.
*
* @param $model
*/
public function setThumbnail(&$model)
{
//Set the thumbnail
$model->thumbnail = ['image_url' => '/images/kms/structure/users.png'];
}
/**
* This method will generate a new EndUser container.
* It is only used to create the new endUser Form.
*
* @param null $siteId
* @return EndUser
*/
public function newModel($siteId = null)
{
$endUser = new EndUser();
//Set the thumbnail
$this->setThumbnail($endUser);
return $endUser;
}
/**
* This method will get all the models.
* And add these to the sidebarList.
*
* @param $siteId
* @return sidebarList
*/
public function getModels($siteId)
{
//Load the EndUsers
$endUsers = EndUser::where('site_id', $siteId)
->where('role', '=', $this->role)
->get();
//Create an empty sidebarList
$sidebarList = [];
//Loop trough the shippingCosts
foreach ($endUsers as $endUser) {
//New SidebarListItem
$sidebarListItem = new SidebarListItem();
//Set the values for the sidebar
$sidebarListItem->setId($endUser->id);
$sidebarListItem->setStatus($endUser->active);
//set the name as 'Shipping to {country name}'
$sidebarListItem->setName(
$endUser->company . ' - ' .
$endUser->first_name . ' ' .
$endUser->name_insertion . ' ' .
$endUser->last_name
);
$sidebarListItem->setThumbnail('');
$sidebarList[] = $sidebarListItem;
}
return $sidebarList;
}
/**
* This method will save the EndUser.
*
* @param $input
* @param null $endUser KommaApp\EndUsers\Models\EndUser
* @return EndUser id
*/
public function saveModel($input, $endUser = null)
{
$new = false;
//Check if the endUser is null
if ($endUser == null) {
//Create a new endUser
$endUser = new EndUser();
//New endUser
$endUser->site_id = $this->kms->getCurrentSiteId();
$new = true;
}
$endUser->role = $this->role;
$endUser->active = (!empty($input['active']) ? $input['active'] : 0);
$endUser->number = $input['number'];
$endUser->username = $input['email'];
//Lang is Dutch
$endUser->language_id = 104;
$endUser->email = $input['email'];
$endUser->first_name = $input['first_name'];
$endUser->name_insertion = $input['name_insertion'];
$endUser->last_name = $input['last_name'];
$endUser->company = $input['company'];
$endUser->company_vat = $input['company_vat'];
$endUser->postal = $input['postal'];
$endUser->city = $input['city'];
$endUser->street = $input['street'];
$endUser->house_number = $input['house_number'];
$endUser->house_number_suffix = $input['house_number_suffix'];
$endUser->country = $input['country'];
$endUser->telephone = $input['telephone'];
//Save the endUser
$endUser->save();
//Send the email to the endUser when it is an new endUser
if ($new) $this->sendActivationEmail($endUser);
return $endUser->id;
}
public function destroyModel($endUser)
{
$endUser->delete();
}
public function getOrdersByEndUserId($siteId, $languageId, $endUserId)
{
$records = [];
if (is_numeric($endUserId)) {
$records = Order::where('endUser_id', $endUserId)->get();
}
return $records;
}
public function getLatestRegistrations($maxRecords = 10, $siteId = null)
{
$query = EndUser::select('first_name', 'name_insertion', 'last_name', 'created_at', 'company')
->take($maxRecords)
->orderBy('created_at', 'desc');
if ($siteId) $query->where('site_id', $siteId);
return $query->get();
}
private function sendActivationEmail($endUser)
{
$endUser->active = 0;
$endUser->save();
$this->endUserService->sendActivation($endUser);
}
}