2011-05-25 01:40:52 -04:00
< ? php
2018-01-15 08:32:11 -05:00
/**
* @ file mod / wall_attach . php
*/
2018-01-24 21:08:45 -05:00
2017-04-30 00:07:00 -04:00
use Friendica\App ;
2017-11-06 21:22:52 -05:00
use Friendica\Core\Config ;
2018-01-21 13:33:59 -05:00
use Friendica\Core\L10n ;
2018-07-09 15:38:16 -04:00
use Friendica\Core\System ;
2017-11-07 22:57:46 -05:00
use Friendica\Database\DBM ;
2018-01-26 21:38:34 -05:00
use Friendica\Util\DateTimeFormat ;
2018-01-15 08:32:11 -05:00
use Friendica\Util\Mimetype ;
2017-04-30 00:07:00 -04:00
2017-01-09 07:14:55 -05:00
function wall_attach_post ( App $a ) {
2011-05-25 01:40:52 -04:00
2015-08-24 07:54:41 -04:00
$r_json = ( x ( $_GET , 'response' ) && $_GET [ 'response' ] == 'json' );
2017-03-21 12:02:59 -04:00
if ( $a -> argc > 1 ) {
2011-05-25 01:40:52 -04:00
$nick = $a -> argv [ 1 ];
2012-04-08 19:19:45 -04:00
$r = q ( " SELECT `user`.*, `contact`.`id` FROM `user` LEFT JOIN `contact` on `user`.`uid` = `contact`.`uid` WHERE `user`.`nickname` = '%s' AND `user`.`blocked` = 0 and `contact`.`self` = 1 LIMIT 1 " ,
2011-05-25 01:40:52 -04:00
dbesc ( $nick )
);
2017-11-07 22:57:46 -05:00
if ( ! DBM :: is_result ( $r )) {
2015-11-07 10:24:59 -05:00
if ( $r_json ) {
2018-01-22 09:16:25 -05:00
echo json_encode ([ 'error' => L10n :: t ( 'Invalid request.' )]);
2016-11-14 12:49:51 -05:00
killme ();
}
2011-05-25 01:40:52 -04:00
return ;
2016-11-14 12:49:51 -05:00
}
2011-05-25 01:40:52 -04:00
2015-08-24 07:54:41 -04:00
} else {
2015-11-07 10:24:59 -05:00
if ( $r_json ) {
2018-01-22 09:16:25 -05:00
echo json_encode ([ 'error' => L10n :: t ( 'Invalid request.' )]);
2016-11-14 12:49:51 -05:00
killme ();
}
2011-05-25 01:40:52 -04:00
return ;
2016-11-14 12:49:51 -05:00
}
2011-05-25 01:40:52 -04:00
$can_post = false ;
$visitor = 0 ;
$page_owner_uid = $r [ 0 ][ 'uid' ];
2012-04-08 19:19:45 -04:00
$page_owner_cid = $r [ 0 ][ 'id' ];
2011-05-25 01:40:52 -04:00
$page_owner_nick = $r [ 0 ][ 'nickname' ];
$community_page = (( $r [ 0 ][ 'page-flags' ] == PAGE_COMMUNITY ) ? true : false );
2017-03-21 12:02:59 -04:00
if (( local_user ()) && ( local_user () == $page_owner_uid ))
2011-05-25 01:40:52 -04:00
$can_post = true ;
else {
2017-03-21 12:02:59 -04:00
if ( $community_page && remote_user ()) {
2016-11-14 12:49:51 -05:00
$contact_id = 0 ;
2017-03-21 12:02:59 -04:00
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $page_owner_uid ) {
2016-11-14 12:49:51 -05:00
$contact_id = $v [ 'cid' ];
2012-09-05 01:50:28 -04:00
break ;
}
}
}
2017-03-21 12:02:59 -04:00
if ( $contact_id ) {
2012-09-05 01:50:28 -04:00
$r = q ( " SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
2016-11-14 12:49:51 -05:00
intval ( $contact_id ),
2012-09-05 01:50:28 -04:00
intval ( $page_owner_uid )
);
2017-11-07 22:57:46 -05:00
if ( DBM :: is_result ( $r )) {
2012-09-05 01:50:28 -04:00
$can_post = true ;
2016-11-14 12:49:51 -05:00
$visitor = $contact_id ;
2012-09-05 01:50:28 -04:00
}
2011-05-25 01:40:52 -04:00
}
}
}
2017-03-21 12:02:59 -04:00
if ( ! $can_post ) {
2015-11-07 10:24:59 -05:00
if ( $r_json ) {
2018-01-22 09:16:25 -05:00
echo json_encode ([ 'error' => L10n :: t ( 'Permission denied.' )]);
2016-11-14 12:49:51 -05:00
killme ();
}
2018-01-21 13:33:59 -05:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2011-05-25 01:40:52 -04:00
killme ();
}
2017-03-21 12:02:59 -04:00
if ( ! x ( $_FILES , 'userfile' )) {
2015-11-07 10:24:59 -05:00
if ( $r_json ) {
2018-01-22 09:16:25 -05:00
echo json_encode ([ 'error' => L10n :: t ( 'Invalid request.' )]);
2016-11-14 12:49:51 -05:00
}
2011-05-25 01:40:52 -04:00
killme ();
2015-08-24 07:54:41 -04:00
}
2011-05-25 01:40:52 -04:00
$src = $_FILES [ 'userfile' ][ 'tmp_name' ];
$filename = basename ( $_FILES [ 'userfile' ][ 'name' ]);
$filesize = intval ( $_FILES [ 'userfile' ][ 'size' ]);
2017-11-06 21:22:52 -05:00
$maxfilesize = Config :: get ( 'system' , 'maxfilesize' );
2011-05-25 01:40:52 -04:00
2014-04-23 14:22:53 -04:00
/* Found html code written in text field of form ,
* when trying to upload a file with filesize
* greater than upload_max_filesize . Cause is unknown .
* Then Filesize gets <= 0.
*/
2017-03-21 12:02:59 -04:00
if ( $filesize <= 0 ) {
2018-01-22 09:16:25 -05:00
$msg = L10n :: t ( 'Sorry, maybe your upload is bigger than the PHP configuration allows' ) . EOL . ( L10n :: t ( 'Or - did you try to upload an empty file?' ));
2015-08-24 07:54:41 -04:00
if ( $r_json ) {
2018-01-15 08:05:12 -05:00
echo json_encode ([ 'error' => $msg ]);
2015-08-24 07:54:41 -04:00
} else {
notice ( $msg . EOL );
}
2014-04-23 14:22:53 -04:00
@ unlink ( $src );
killme ();
}
2017-03-21 12:02:59 -04:00
if (( $maxfilesize ) && ( $filesize > $maxfilesize )) {
2018-01-23 21:59:16 -05:00
$msg = L10n :: t ( 'File exceeds size limit of %s' , formatBytes ( $maxfilesize ));
2015-08-24 07:54:41 -04:00
if ( $r_json ) {
2018-01-15 08:05:12 -05:00
echo json_encode ([ 'error' => $msg ]);
2015-08-24 07:54:41 -04:00
} else {
echo $msg . EOL ;
}
2011-05-25 01:40:52 -04:00
@ unlink ( $src );
2015-06-28 20:39:08 -04:00
killme ();
2011-05-25 01:40:52 -04:00
}
$filedata = @ file_get_contents ( $src );
2018-01-15 08:32:11 -05:00
$mimetype = Mimetype :: getContentType ( $filename );
2018-07-09 15:38:16 -04:00
$hash = System :: createGUID ( 64 );
2018-01-26 21:38:34 -05:00
$created = DateTimeFormat :: utcNow ();
2017-09-15 17:17:58 -04:00
2018-01-15 08:05:12 -05:00
$fields = [ 'uid' => $page_owner_uid , 'hash' => $hash , 'filename' => $filename , 'filetype' => $mimetype ,
2017-09-15 17:17:58 -04:00
'filesize' => $filesize , 'data' => $filedata , 'created' => $created , 'edited' => $created ,
2018-01-15 08:05:12 -05:00
'allow_cid' => '<' . $page_owner_cid . '>' , 'allow_gid' => '' , 'deny_cid' => '' , 'deny_gid' => '' ];
2017-09-15 17:17:58 -04:00
$r = dba :: insert ( 'attach' , $fields );
2011-05-25 01:40:52 -04:00
@ unlink ( $src );
2017-03-21 12:02:59 -04:00
if ( ! $r ) {
2018-01-22 09:16:25 -05:00
$msg = L10n :: t ( 'File upload failed.' );
2015-08-24 07:54:41 -04:00
if ( $r_json ) {
2018-01-15 08:05:12 -05:00
echo json_encode ([ 'error' => $msg ]);
2015-08-24 07:54:41 -04:00
} else {
echo $msg . EOL ;
}
2011-05-25 01:40:52 -04:00
killme ();
}
$r = q ( " SELECT `id` FROM `attach` WHERE `uid` = %d AND `created` = '%s' AND `hash` = '%s' LIMIT 1 " ,
intval ( $page_owner_uid ),
dbesc ( $created ),
dbesc ( $hash )
);
2017-11-07 22:57:46 -05:00
if ( ! DBM :: is_result ( $r )) {
2018-01-22 09:16:25 -05:00
$msg = L10n :: t ( 'File upload failed.' );
2015-08-24 07:54:41 -04:00
if ( $r_json ) {
2018-01-15 08:05:12 -05:00
echo json_encode ([ 'error' => $msg ]);
2015-08-24 07:54:41 -04:00
} else {
echo $msg . EOL ;
}
2011-05-25 01:40:52 -04:00
killme ();
}
2015-11-07 10:24:59 -05:00
if ( $r_json ) {
2018-01-15 08:05:12 -05:00
echo json_encode ([ 'ok' => true ]);
2016-11-14 12:49:51 -05:00
killme ();
}
2015-08-24 07:54:41 -04:00
2012-12-03 04:05:10 -05:00
$lf = " \n " ;
2012-04-17 09:11:41 -04:00
echo $lf . $lf . '[attachment]' . $r [ 0 ][ 'id' ] . '[/attachment]' . $lf ;
2015-08-24 07:54:41 -04:00
2011-05-25 01:40:52 -04:00
killme ();
// NOTREACHED
}