73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Nextend\Framework\Response;
 | |
| 
 | |
| use Nextend\Framework\Application\AbstractApplicationType;
 | |
| use Nextend\Framework\Notification\Notification;
 | |
| use Nextend\Framework\PageFlow;
 | |
| 
 | |
| class ResponseAjax {
 | |
| 
 | |
|     /**
 | |
|      * @var AbstractApplicationType
 | |
|      */
 | |
|     private $appType;
 | |
| 
 | |
|     private $isError = false;
 | |
| 
 | |
|     private $response = array(
 | |
|         'data'         => null,
 | |
|         'notification' => array()
 | |
|     );
 | |
| 
 | |
|     public function __construct($appType) {
 | |
|         $this->appType = $appType;
 | |
|     }
 | |
| 
 | |
|     public function error($showNotification = true) {
 | |
|         $this->isError = true;
 | |
|         $this->respond(null, $showNotification);
 | |
|     }
 | |
| 
 | |
|     public function respond($data = null, $showNotification = true) {
 | |
|         $this->response['data'] = $data;
 | |
| 
 | |
|         self::fix_output_buffer();
 | |
| 
 | |
|         if ($showNotification) {
 | |
|             $this->response['notification'] = Notification::showAjax();
 | |
|         }
 | |
|         header("Content-Type: application/json");
 | |
|         if ($this->isError) {
 | |
|             header("HTTP/1.0 403 Forbidden");
 | |
|         }
 | |
|         echo json_encode($this->response);
 | |
| 
 | |
|         PageFlow::exitApplication();
 | |
|     }
 | |
| 
 | |
|     public function redirect($url) {
 | |
| 
 | |
|         self::fix_output_buffer();
 | |
| 
 | |
|         $this->response['redirect'] = $url;
 | |
|         echo json_encode($this->response);
 | |
| 
 | |
|         PageFlow::exitApplication();
 | |
|     }
 | |
| 
 | |
|     private static function fix_output_buffer() {
 | |
| 
 | |
|         $ob_list_handlers       = ob_list_handlers();
 | |
|         $ob_list_handlers_count = count($ob_list_handlers);
 | |
| 
 | |
|         $exclude = array(
 | |
|             'ob_gzhandler',
 | |
|             'zlib output compression'
 | |
|         );
 | |
| 
 | |
|         if ($ob_list_handlers_count && !in_array($ob_list_handlers[$ob_list_handlers_count - 1], $exclude)) {
 | |
|             ob_clean();
 | |
|         }
 | |
|     }
 | |
| } |