109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Zotlabs\Module;
 | |
| 
 | |
| require_once('include/attach.php');
 | |
| require_once('include/channel.php');
 | |
| require_once('include/photos.php');
 | |
| 
 | |
| 
 | |
| class File_upload extends \Zotlabs\Web\Controller {
 | |
| 
 | |
| 	function post() {
 | |
| 
 | |
| 		logger('file upload: ' . print_r($_REQUEST,true));
 | |
| 		logger('file upload: ' . print_r($_FILES,true));
 | |
| 	
 | |
| 		$channel = (($_REQUEST['channick']) ? channelx_by_nick($_REQUEST['channick']) : null);
 | |
| 	
 | |
| 		if(! $channel) {
 | |
| 			logger('channel not found');
 | |
| 			killme();
 | |
| 		}
 | |
| 	
 | |
| 		$_REQUEST['source'] = 'file_upload';
 | |
| 
 | |
| 		if($channel['channel_id'] != local_channel()) {
 | |
| 			$_REQUEST['contact_allow'] = expand_acl($channel['channel_allow_cid']);
 | |
| 			$_REQUEST['group_allow']   = expand_acl($channel['channel_allow_gid']);
 | |
| 			$_REQUEST['contact_deny']  = expand_acl($channel['channel_deny_cid']);
 | |
| 			$_REQUEST['group_deny']    = expand_acl($channel['channel_deny_gid']);
 | |
| 		}
 | |
| 
 | |
| 		$_REQUEST['allow_cid'] = perms2str($_REQUEST['contact_allow']);
 | |
| 		$_REQUEST['allow_gid'] = perms2str($_REQUEST['group_allow']);
 | |
| 		$_REQUEST['deny_cid']  = perms2str($_REQUEST['contact_deny']);
 | |
| 		$_REQUEST['deny_gid']  = perms2str($_REQUEST['group_deny']);
 | |
| 
 | |
| 		if($_REQUEST['filename']) {
 | |
| 			$r = attach_mkdir($channel, get_observer_hash(), $_REQUEST);
 | |
| 			if($r['success']) {
 | |
| 				$hash = $r['data']['hash'];
 | |
| 
 | |
| 				$sync = attach_export_data($channel,$hash);
 | |
| 				if($sync) {
 | |
| 					build_sync_packet($channel['channel_id'],array('file' => array($sync)));
 | |
| 				}
 | |
| 				goaway(z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path']);
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 		else {
 | |
| 
 | |
| 			$matches = [];
 | |
| 			$partial = false;
 | |
| 
 | |
| 
 | |
| 
 | |
| 			if(array_key_exists('HTTP_CONTENT_RANGE',$_SERVER)) {
 | |
| 				$pm = preg_match('/bytes (\d*)\-(\d*)\/(\d*)/',$_SERVER['HTTP_CONTENT_RANGE'],$matches);
 | |
| 				if($pm) {
 | |
| 					logger('Content-Range: ' . print_r($matches,true));
 | |
| 					$partial = true;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			if($partial) {
 | |
| 				$x = save_chunk($channel,$matches[1],$matches[2],$matches[3]);
 | |
| 
 | |
| 				if($x['partial']) {
 | |
| 					header('Range: bytes=0-' . (($x['length']) ? $x['length'] - 1 : 0));
 | |
| 					json_return_and_die($result);
 | |
| 				}
 | |
| 				else {
 | |
| 					header('Range: bytes=0-' . (($x['size']) ? $x['size'] - 1 : 0));
 | |
| 
 | |
| 					$_FILES['userfile'] = [
 | |
| 						'name'     => $x['name'],
 | |
| 						'type'     => $x['type'],
 | |
| 						'tmp_name' => $x['tmp_name'],
 | |
| 						'error'    => $x['error'],
 | |
| 						'size'     => $x['size']
 | |
| 					];
 | |
| 				}
 | |
| 			}
 | |
| 			else {	
 | |
| 				if(! array_key_exists('userfile',$_FILES)) {
 | |
| 					$_FILES['userfile'] = [
 | |
| 						'name'     => $_FILES['files']['name'],
 | |
| 						'type'     => $_FILES['files']['type'],
 | |
| 						'tmp_name' => $_FILES['files']['tmp_name'],
 | |
| 						'error'    => $_FILES['files']['error'],
 | |
| 						'size'     => $_FILES['files']['size']
 | |
| 					];
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			$r = attach_store($channel, get_observer_hash(), '', $_REQUEST);
 | |
| 			if($r['success']) {
 | |
| 				$sync = attach_export_data($channel,$r['data']['hash']);
 | |
| 				if($sync)
 | |
| 					build_sync_packet($channel['channel_id'],array('file' => array($sync)));
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 		goaway(z_root() . '/' . $_REQUEST['return_url']);
 | |
| 	
 | |
| 	}
 | |
| 	
 | |
| }
 |