Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
declare(strict_types=1);

namespace LeadersLinked\Controller;

use Laminas\Db\Adapter\AdapterInterface;

use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Form\Tools\UserUploadGeneratePasswordForm;
use PhpOffice\PhpSpreadsheet\IOFactory;
use LeadersLinked\Library\Functions;

class ToolsController extends AbstractActionController
{
    /**
     *
     * @var \Laminas\Db\Adapter\AdapterInterface
     */
    private $adapter;
    
    /**
     *
     * @var \LeadersLinked\Cache\CacheInterface
     */
    private $cache;
    
    
    /**
     *
     * @var \Laminas\Log\LoggerInterface
     */
    private $logger;
    
    /**
     *
     * @var array
     */
    private $config;
    
    
    /**
     *
     * @var \Laminas\Mvc\I18n\Translator
     */
    private $translator;
    
    
    /**
     *
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
     * @param \LeadersLinked\Cache\CacheInterface $cache
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
     * @param array $config
     * @param \Laminas\Mvc\I18n\Translator $translator
     */
    public function __construct($adapter, $cache, $logger, $config, $translator)
    {
        $this->adapter      = $adapter;
        $this->cache        = $cache;
        $this->logger       = $logger;
        $this->config       = $config;
        $this->translator   = $translator;
    }
    
    public function indexAction()
    {
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }
    
    public function userfilePasswordGeneratorAction()
    {
        $request = $this->getRequest();
        
        if($request->isPost())
        {
            
            $form = new  UserUploadGeneratePasswordForm();
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                
                $file = $_FILES['file'];
                $tmp_filename = $file['tmp_name'];
                

                $filename = $file['name'];
                $final_filename =  'data/' . $filename;
                
                if(!move_uploaded_file($tmp_filename, $final_filename)) {
                    return new JsonModel([
                        'success' => false,
                        'data' => 'ERROR_UPLOAD_FILE'
                    ]);
                }

                
                $spreadsheet = IOFactory::load($final_filename);
                $sheet = $spreadsheet->getActiveSheet();
                $max = $sheet->getHighestDataRow('A');
                

                
                
                $caracteres =  ['#', '?', '!', '@', '$'];
                $max_caracteres = count($caracteres);
                

                for($i = 1; $i <= $max; $i++)
                {

                    
                    $first_name = Functions::sanitizeFilterString($sheet->getCell('A' . $i)->getValue());
                    $last_name = Functions::sanitizeFilterString($sheet->getCell('B' . $i)->getValue());
                    $email = trim(filter_var(strval($sheet->getCell('C' . $i)->getValue()), FILTER_SANITIZE_EMAIL));
                    
           
                 
                    
                    if(empty($first_name) || empty($last_name) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
                        continue;
                    }
                   
                    $caracter = $caracteres[ rand(0, $max_caracteres - 1) ]; 
                    

                    $runmber = rand(1001, 9999);
                    
                    $sfirst_name = ucfirst(substr(strtolower(str_replace(' ', '', $first_name)), 0, 4));
                    $slast_name = ucfirst(substr(strtolower(str_replace(' ', '', $last_name)), 0, 4));
                    $password = $sfirst_name . $slast_name . $runmber . $caracter;
                    
                    $sheet->SetCellValue('D' . $i, $password);
                    
                }
                
                $filename = $file['name'];
                $final_filename =  'data/' . $filename;
                
                    
                
                $fileName = Functions::normalizeStringFilename($file['name']);
                $fileName = str_replace('.xlsx', '', $fileName);
                $fileName = str_replace('.xls', '', $fileName);
                
                
                $fileName = $fileName . '-generado-' . date('Y-m-d-H-i-s') . '.xlsx';
                $tempFilename = tempnam(sys_get_temp_dir(), $file['name'] . time());
                    
                $writer = IOFactory::createWriter($spreadsheet, 'Xls');
                $writer->save($tempFilename);
                    
                $content = file_get_contents($tempFilename);
                @unlink($final_filename);
                @unlink($tempFilename);
                    
                return new JsonModel([
                    'success' => true,
                    'data' => [
                        'content' => base64_encode($content),
                        'basename' => $fileName
                            
                    ]
                ]);
                    
                    
                    
                    
 
                
                
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach ($form_messages  as $fieldname => $field_messages) {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }

                
                
                
                
            
        }
        else if($request->isGet()) {
            $form = new  UserUploadGeneratePasswordForm();
            
            $this->layout()->setTemplate('layout/layout-backend.phtml');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/tools/password-generator-for-file.phtml');
            $viewModel->setVariables([
                'form' => $form
            ]); 
            
            return $viewModel ;
      
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);;
        }
    }
    
  
}