140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php 
 | |
| 
 | |
| /**
 | |
|  * @author          Tassos Marinos <info@tassos.gr>
 | |
|  * @link            https://www.tassos.gr
 | |
|  * @copyright       Copyright © 2024 Tassos All Rights Reserved
 | |
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
 | |
| */
 | |
| 
 | |
| defined('_JEXEC') or die;
 | |
| 
 | |
| use Joomla\CMS\Language\Text;
 | |
| use Joomla\CMS\Http\HttpFactory;
 | |
| 
 | |
| /**
 | |
|  *  Framework URL Shortening Class
 | |
|  *  Should be extended. The get() method is required.
 | |
|  */
 | |
| class NRURLShortener {
 | |
| 
 | |
|     /**
 | |
|      *  The Shortener Service
 | |
|      *
 | |
|      *  @var  object
 | |
|      */
 | |
|     protected $service;
 | |
| 
 | |
|     /**
 | |
|      *  The URL to be shortened
 | |
|      *
 | |
|      *  @var  string
 | |
|      */
 | |
|     protected $url;
 | |
| 
 | |
|     /**
 | |
|      *  Sets if the service needs a valid login name
 | |
|      *
 | |
|      *  @var  boolean
 | |
|      */
 | |
|     protected $needsLogin = true;
 | |
| 
 | |
|     /**
 | |
|      *  Sets if the service needs a valid API Key
 | |
|      *
 | |
|      *  @var  boolean
 | |
|      */
 | |
|     protected $needsKey = true;
 | |
| 
 | |
|     /**
 | |
|      *  Constructor of class
 | |
|      *
 | |
|      *  @param  object  $service  The Shortener service information
 | |
|      *  @param  string  $url      The URL to be shortened
 | |
|      */
 | |
|     public function __construct($service, $url) {
 | |
|         $this->service = $service;
 | |
|         $this->url = $url;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Throws an exception
 | |
|      *
 | |
|      *  @param   string  $msg  
 | |
|      *
 | |
|      *  @return  void
 | |
|      */
 | |
|     protected function throwError($msg)
 | |
|     {
 | |
|         throw new Exception(Text::sprintf('NR_URL_SHORTENING_FAILED', $this->url, $this->service->name, $msg));
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Checks if credentials are set
 | |
|      *
 | |
|      *  @return  boolean  Returns true if credentials are set
 | |
|      */
 | |
|     protected function validateCredentials()
 | |
|     {
 | |
| 
 | |
|         if ($this->needsKey && !isset($this->service->api))
 | |
|         {
 | |
|             $this->throwError("API Key not set");
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         if ($this->needsLogin && !isset($this->service->login))
 | |
|         {
 | |
|             $this->throwError("Login not set");
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      *  Shortens the URL
 | |
|      *
 | |
|      *  @return  string  On success returns the shortened URL
 | |
|      */
 | |
|     public function get()
 | |
|     {
 | |
| 
 | |
|         if (!$this->validateCredentials())
 | |
|         {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         $baseURL = $this->baseURL();
 | |
| 
 | |
|         if (!$baseURL)
 | |
|         {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         try
 | |
|         {
 | |
|             $response = HttpFactory::getHttp()->get($baseURL, null, 5);
 | |
|          
 | |
|             if ($response === null || $response->code !== 200)
 | |
|             {
 | |
|                 $this->throwError($response->body);
 | |
| 
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
|         catch (RuntimeException $e)
 | |
|         {
 | |
|             $this->throwError($e->getMessage());
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return trim($response->body);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| ?>
 |