<?php namespace App\Controller;
use App\Entity\Clients;
use App\Entity\Credits;
use App\Entity\Training;
use App\Entity\Trainings;
use App\Repository\ClientsRepository;
use App\Services\ImageService;
use App\Services\PdfService;
use JsonSchema\Constraints\Factory;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Intervention\Image\ImageManagerStatic as Image;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class ProfileController extends AbstractController {
/**
* Display a listing of the resource.
* GET /client
*
* @return Response
*/
public function index(Request $request)
{
$client = $this->getUser();
if (is_null($client))
{
return \Redirect::to('login');
}
return $this->render('theme::bs.client.profile', compact('client'));
}
/**
* Show the form for creating a new resource.
* GET /client/create
*
* @return Response
*/
public function create()
{
return $this->render('users.create');
}
/**
* Store a newly created resource in storage.
* POST /client
*
* @return Response
*/
public function store(Request $request)
{
$input = $request->request->all();
$validation = \Validator::make($input, Client::$rules);
if ($validation->passes())
{
$input['password'] = \Hash::make($input['username']);
$client = ClientFactory::create($input);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return "ok";
}
return "not ok";
}
/**
* Display the specified resource.
* GET /client/{id}
*
* @param int $id
* @return Response
*/
public function show($id = 0)
{
// dd("ds");
// dd($this->getUser());
if($id == 0) $id = $this->getUser()->getId();
$client =
$paysite = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')->find($id);
//dd($paysite);
return $this->render('bs/client/profile.html.twig', ['client' => $paysite])
;
}
public function showCropper($url = 0)
{
return "cropping";
if($id == 0) $id = $this->getUser()->getId();
$paysite = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')->find($id);
//dd($paysite);
return $this->render('theme::bs.client.cropper')
->with('client',$paysite)
;
}
/**
* Show the form for editing the specified resource.
* GET /client/{id}/edit
*
* @param int $id
* @return Response
*/
public function edit($id)
{
return "showing profile $id";
}
/**
* Update the specified resource in storage.
* PUT /client/{id}
*
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* DELETE /client/{id}
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
public function removeCredits(Request $request){
/** @var Credits $credit */
$credit = $this->getDoctrine()->getRepository('App\Entity\Credits')->findOneById($request->request->all()['id']);
/** @var Clients $client */
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$new_creds = str_replace($credit->getId().',','', $client->getCredits());
$client->setCredits($new_creds);
$client->removeNewCredit($credit);
$this->getDoctrine()->getManager()->remove($credit);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($client->getId());
}
public function saveCredits(Request $request){
/** @var Credits $credit */
$credit = $this->getDoctrine()->getRepository('App\Entity\Credits')->findOneById($request->request->all()['id']);
$credit->setCompanyName($request->request->all()['company_name'] ?? $credit->getCompanyName());
$credit->setDescription($request->request->all()['description'] ?? $credit->getDescription());
$credit->setProductionType($request->request->all()['production_type'] ?? $credit->getProductionName());
$credit->setProductionName($request->request->all()['production_name'] ?? $credit->getProductionName());
$credit->setProductionYear($request->request->all()['production_year'] ?? $credit->getProductionYear());
$credit->setRole($request->request->all()['role'] ?? $credit->getRole());
$credit->setRoleType($request->request->all()['role_type'] ?? $credit->getRoleType());
$credit->setUserId($request->request->all()['user'] ?? $credit->getUserId());
$this->getDoctrine()->getManager()->persist($credit);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($credit->getProductionYear());
}
public function removeImageFeatured(Request $request)
{
/** @var Clients $client */
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$client->setFeaturedImage("");
$client->setAdminImage("");
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse(['status'=>'ok']);
}
public function removeImage(Request $request)
{
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
;
$new = [];
$u = 0;
$a = 0;
$removedImage = basename($request->request->all()['image_url']);
$removedImage = str_replace("thumb_", "", $removedImage);
foreach($client->getPortfolioImagesArray() as $img)
{
if(! stristr(basename($img),$removedImage))
{
$u++;
$new[] = $img;
}
else
{$a++;}
}
$client->setPortfolioImagesArray($new);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse("$u - $a - ".basename($request->request->all()['image_url']));
}
public function featureImage(Request $request)
{
$img = $request->request->all()['image_url'];
/** @var Clients $client */
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$client->setFeaturedImage($img);
$client->setAdminImage($img);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($img);
}
public function addImage(Request $request, ImageService $image_service) {
//dd();
$base64img = str_replace('data:image/jpeg;base64,', '', $request->request->all()['img_data']);
$base64img = str_replace('data:image/png;base64,', '', $base64img);
$data = base64_decode($base64img);
$file = $this->getParameter('portfolio_images_dir').
time().".jpg";
;
$thumb = str_replace(["port_images/"],
"port_images/thumb_",
$file);
//todo: test on move
// var_dump('file', $file);
// var_dump('thumb', $thumb);
// var_dump('cwd', getcwd());
// var_dump('dir', __DIR__ );
//
// exit;
// exit;
Image::configure(array('driver' => 'imagick'));
$image = Image::make($data);
$image->resize(1500, 1500, function ($constraint) {
$constraint->aspectRatio();
});
$ram = $image->save($file);
$image_service->resize_to_fit($file);
$image->resize(400, 400, function ($constraint) {
$constraint->aspectRatio();
});
$image->crop(400, 400
);
$image->save($thumb);
$image->save($thumb);
//var_dump($base64img);
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$new_portfolio = $client->getPortfolioImages()."\n".$file;
$client->setPortfolioImages($new_portfolio);
// $client->setCredits($new_creds);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse(str_replace($this->getParameter('public_dir'),
$this->getParameter('url'),
$file)
);
}
public function rotateImage(Request $request, $direction)
{
$img = $request->get('image');
$path = str_replace("https://fusionmng.com/", "/usr/share/nginx/fusion/public/", $img);
Image::configure(array('driver' => 'imagick'));
$workImage = Image::make($path);
if($direction == 'right') $workImage->rotate(-90);
if($direction == 'left') $workImage->rotate(90);
$workImage->save($path, 100);
//do thumb
$fname = basename($path);
$thumb = str_replace($fname, "thumb_".$fname, $path);
if(is_file($thumb)) {
$workImage = Image::make($thumb);
if($direction == 'right') $workImage->rotate(-90);
if($direction == 'left') $workImage->rotate(90);
$workImage->save($thumb);
}
return new JsonResponse(['done']);
}
public function saveImage(Request $request) {
//dd();
$base64img = str_replace('data:image/jpeg;base64,', '', $request->request->all()['img_data']);
$base64img = str_replace('data:image/png;base64,', '', $base64img);
$data = base64_decode($base64img);
$replaced = str_replace("new/public/port_images/","thumbs/",$request->request->all()['img_id']);
$replaced = str_replace("https://fusionmng.com/","/usr/share/nginx/fusion/public/", $replaced);
$replaced = str_replace("http://fusionmng.com/","/usr/share/nginx/fusion/public/", $replaced);
$image_location = str_replace("https://fusionmng.com/","/usr/share/nginx/fusion/public/", $replaced);
$thumb_location = str_replace("port_images/","port_images/thumb_", $replaced);
// dump($replaced);
// dump($image_location);
// dump($thumb_location);
// dump($request->request->all()['img_id']);
// die;
// $is = $this->container->get('image_service');
Image::configure(array('driver' => 'imagick'));
$image = Image::make($data);
$image2 = Image::make($data);
$image->resize(1500, 1500, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$image->save($image_location, 100);
$image2->resize(200, 200, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$image2->crop(200, 200
);
$image2->save($thumb_location, 100);
return new Response($request->request->all()['img_id']);
}
public function addFeaturedImage(Request $request, ImageService $image_service) {
//dd();
$base64img = str_replace('data:image/jpeg;base64,', '', $request->request->all()['img_data']);
$base64img = str_replace('data:image/png;base64,', '', $base64img);
$data = base64_decode($base64img);
$mainPicLocation = $this->getParameter('portfolio_images_dir').
time().".jpg";
;
Image::configure(array('driver' => 'imagick'));
$mainPic = Image::make($data);
$mainPic->save($mainPicLocation);
//
$mainPic->resize(450, 450, function ($constraint) {
$constraint->aspectRatio();
});
$mainPic->crop(400, 400);
// $mainPic = $mainPic->save($mainPicLocation);
$thumbLocation = str_replace("port_images/","port_images/thumb_",$mainPicLocation);
$mainPic->save($thumbLocation);
$image_service->resize_to_fit($mainPicLocation);
// dump($thumbLocation);
// dump($mainPicLocation);
// die;
//var_dump($base64img);
/** @var Clients $client */
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
//$new_portfolio = $client->featured_image."\n".$mainPicLocation;
$client->setFeaturedImage($mainPicLocation);
$client->setAdminImage($thumbLocation);
// $client->setCredits($new_creds);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return
new JsonResponse(
str_replace($this->getParameter('public_dir'),'https://fusionmng.com',$mainPicLocation)
);
}
public function addCredits(Request $request){
$credit = new Credits();
// $credit->company_name = $request->request->all()['company_name'];
// $credit->description = $request->request->all()['description'];
$credit->setCompanyName($request->request->all()['company_name'] ?? $credit->getCompanyName());
$credit->setDescription($request->request->all()['description'] ?? $credit->getDescription());
$credit->setProductionName($request->request->all()['production_name'] ?? $credit->getProductionName());
$credit->setProductionYear($request->request->all()['production_year'] ?? $credit->getProductionYear());
$credit->setProductionType($request->request->all()['production_type'] ?? $credit->getProductionType());
$credit->setRole($request->request->all()['role'] ?? $credit->getRole());
$credit->setRoleType($request->request->all()['role_type'] ?? $credit->getRoleType());
// $credit->setRoleName($request->request->all()['role_name'] ?? $credit->getRoleName());
$credit->setUserId($request->request->all()['user'] ?? $credit->getUserId());
/** @var Clients $client */
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$credit->setClient($client);
$client->addNewCredit($credit);
$this->getDoctrine()->getManager()->persist($credit);
$this->getDoctrine()->getManager()->flush();
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($credit->getId());
}
public function removeTraining(Request $request){
$credit = $this->getDoctrine()->getRepository('App\Entity\Trainings')->findOneById($request->request->all()['id']);
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$new_creds = str_replace($credit->getId().',','', $client->getTrainings());
$client->setTrainings($new_creds);
$this->getDoctrine()->getManager()->remove($credit);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
}
public function saveTraining(Request $request){
/** @var Trainings $credit */
$credit = $this->getDoctrine()->getRepository('App\Entity\Trainings')->findOneById($request->request->all()['id']);
$credit->setTrainingType($request->get('training_type'));
$credit->setTrainingLocation($request->get('training_location'));
// $credit->set$request->request->all()['user'];
$this->getDoctrine()->getManager()->persist($credit);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($credit->getId());
}
public function addTraining(Request $request){
$credit = new Trainings();
$credit->setTrainingType($request->request->all()['training_type']);
$credit->setTrainingLocation($request->request->all()['training_location']);
$client = $this->getDoctrine()->getManager()->getRepository('App\Entity\Clients')
->find($request->request->all()['user']);
$credit->setClients($client);
$this->getDoctrine()->getManager()->persist($credit);
$this->getDoctrine()->getManager()->flush();
$new_creds = $client->getTrainings()."".$credit->getId().",";
// dump('$new_creds', $new_creds);
// die;
$client->setTrainings($new_creds);
$this->getDoctrine()->getManager()->persist($client);
$this->getDoctrine()->getManager()->flush();
return new JsonResponse($credit->getId());
}
protected function getSettings() {
$settings = $this->getDoctrine()->getRepository('App\Entity\SiteSetting')->findAll()[0];
return $settings;
}
public function showInvoice(Request $request, PdfService $pdfService, $id, ClientsRepository $clientsRepo)
{
if(!$this->getUser()) {
die('');
}
if($this->getUser()) {
if(!$this->getUser()->getIsAdmin()) {
die('access error');
}
}
// var_dump($id);
// die;
$client = $clientsRepo
->find($id);
$invoices = $client->getInvoices();
if(count($invoices) > 0) {
$invoice = $invoices->toArray()[0];
// dump($client->getId());
// dump($invoice->getId());
// $id = "12497";
$invoiceFile = "/usr/share/nginx/fusion/public/pdfs_invoices/{$id}_page.html";
if(is_file($invoiceFile)) {
$content = file_get_contents($invoiceFile);
return new Response($content);
} else {
return new Response("Can't find invoice");
}
}
die;
// $response = new BinaryFileResponse($pdf);
// $response->setContentDisposition(
// ResponseHeaderBag::DISPOSITION_ATTACHMENT,
// $userNicename.".pdf"
// );
}
public function generatePdf(Request $request, PdfService $pdfService, $userNicename, ClientsRepository $clientsRepo)
{
$client = $clientsRepo
->findOneBy(array('userNicename' => $userNicename));
if($client->getIsArchived() == true) {
return $this->redirect("https://fusionmng.com", 301);
}
$credits = $this->getDoctrine()->getRepository('App\Entity\Credits')
->findBy(array('userId' => $client->getId()));
$trainings = $this->getDoctrine()->getRepository('App\Entity\Trainings')
->findBy(array('id' => $client->getTrainings()));
$talent_groups = $this->getDoctrine()->getRepository('App\Entity\TalentGroup')->findAll();
$content =
$this->render('/new/client_public_pdf.html.twig', ['talent_groups' => $talent_groups, 'client' => $client, 'credits' => $credits, 'trainings' => $trainings, 'settings' => $this->getSettings()] );
if(isset($_GET["dourl"])) {
echo $content;
die;
}
$pdf = $pdfService->generate_url($content->getContent(), $userNicename);
$response = new BinaryFileResponse($pdf);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$userNicename.".pdf"
);
return $response;
}
public function generatePdfSignature(Request $request, $userNicename, ClientsRepository $clientsRepo)
{
$client = $clientsRepo
->findOneBy(array('userNicename' => $userNicename));
return $this->render('pdf_head.html.twig', ['client' => $client]);
}
public function makeClientPermanent(ClientsRepository $clientsRepo, $id)
{
$client = $clientsRepo->find($id);
$client->setIsPermanent(true);
$em = $this->getDoctrine()->getManager();
$em->persist($client);
$em->flush();
return new JsonResponse(['ok']);
}
const CONTENT_TYPE = 'image/gif';
public function setExpiryEmailToRead(ClientsRepository $clientsRepo, $id)
{
// die('ss');
// $pdf = $pdfService->generate_url($content->getContent(), $userNicename);
$client = $clientsRepo->find($id);
$client->setIsExpiryEmailRead(true);
$em = $this->getDoctrine()->getManager();
$em->persist($client);
$em->flush();
$img = "/usr/share/nginx/fusion/public/logo5px.png";
$response = new BinaryFileResponse($img);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE,
"$id.gif"
);
$response->headers->set('Content-Type', 'image/png');
$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('must-revalidate', true);
// die("done");
// die($content->getContent());
return $response;
}
public function clientExpiryStayAction(ClientsRepository $clientsRepository, $clientId)
{
/** @var Clients $client */
$client = $clientsRepository->find($clientId);
if ($client) {
$em = $this->getDoctrine()->getManager();
$client->setIsStaying(null);
$client->setExpireActionId(null);
$client->setExpiryDate(null);
$client->setIsExpiryEmailRead(null);
$client->setIsExpiryNotificationSent(null);
$client->setIsLeaving(null);
// $date_of_expiry = \DateTime::createFromFormat("Y-m-d H:i:s", $client->getUserRegistered());
$date_of_expiry = new \DateTime('now');
$date_of_expiry->modify("+2 years");
$client->setExpiryDate($date_of_expiry);
// $date_of_expiry2 = \DateTime::createFromFormat("Y-m-d H:i:s", $client->getUserRegistered());
$client->setUserRegistered((new \DateTime('now'))->format("Y-m-d H:i:s"));
$client->setExpireActionId(null);
$client->setIsExpiryEmailRead(null);
$client->setIsExpiryNotificationSent(null);
$client->setIsStaying(null);
$client->setIsLeaving(null);
// dump($client);
// var_dump($clientId);
//
$em->persist($client);
$em->flush();
}
return new RedirectResponse($_SERVER['HTTP_REFERER']);
}
public function clientExpiryAction(ClientsRepository $clientsRepo, $expiry_id, $expiry_action)
{
if(!$this->getUser()) {
die("Please <A href='https://fusionmng.com/login'>log-in first in here </A>.");
}
$em = $this->getDoctrine()->getManager();
$client = $clientsRepo->findOneBy(['expire_action_id' => $expiry_id]);
// die($expiry_id);
if($client->getId() !== $this->getUser()->getId()) {
if(!$this->getUser()->getIsAdmin()) {
die("Access Denied");
}
}
if($expiry_action == "stay") {
$client->setIsStaying(true);
$client->setIsLeaving(null);
$em->persist($client);
$em->flush();
return $this->render('new/stay-confirmed.html.twig');
} else {
$client->setIsLeaving(true);
$client->setIsStaying(null);
$em->persist($client);
$em->flush();
return $this->render('new/leave-confirmed.html.twig');
}
return new JsonResponse(['ok']);
}
}