2011-05-25 05:40:52 +00:00
< ? php
2017-04-30 04:07:00 +00:00
use Friendica\App ;
2017-11-07 02:22:52 +00:00
use Friendica\Core\Config ;
2017-11-08 03:57:46 +00:00
use Friendica\Database\DBM ;
2017-04-30 04:07:00 +00:00
2011-05-25 05:40:52 +00:00
require_once ( 'include/attach.php' );
require_once ( 'include/datetime.php' );
2017-01-09 12:14:55 +00:00
function wall_attach_post ( App $a ) {
2011-05-25 05:40:52 +00:00
2015-08-24 11:54:41 +00:00
$r_json = ( x ( $_GET , 'response' ) && $_GET [ 'response' ] == 'json' );
2017-03-21 16:02:59 +00:00
if ( $a -> argc > 1 ) {
2011-05-25 05:40:52 +00:00
$nick = $a -> argv [ 1 ];
2012-04-08 23:19:45 +00: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 05:40:52 +00:00
dbesc ( $nick )
);
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2015-11-07 15:24:59 +00:00
if ( $r_json ) {
2016-11-14 17:49:51 +00:00
echo json_encode ( array ( 'error' => t ( 'Invalid request.' )));
killme ();
}
2011-05-25 05:40:52 +00:00
return ;
2016-11-14 17:49:51 +00:00
}
2011-05-25 05:40:52 +00:00
2015-08-24 11:54:41 +00:00
} else {
2015-11-07 15:24:59 +00:00
if ( $r_json ) {
2016-11-14 17:49:51 +00:00
echo json_encode ( array ( 'error' => t ( 'Invalid request.' )));
killme ();
}
2011-05-25 05:40:52 +00:00
return ;
2016-11-14 17:49:51 +00:00
}
2011-05-25 05:40:52 +00:00
$can_post = false ;
$visitor = 0 ;
$page_owner_uid = $r [ 0 ][ 'uid' ];
2012-04-08 23:19:45 +00:00
$page_owner_cid = $r [ 0 ][ 'id' ];
2011-05-25 05:40:52 +00:00
$page_owner_nick = $r [ 0 ][ 'nickname' ];
$community_page = (( $r [ 0 ][ 'page-flags' ] == PAGE_COMMUNITY ) ? true : false );
2017-03-21 16:02:59 +00:00
if (( local_user ()) && ( local_user () == $page_owner_uid ))
2011-05-25 05:40:52 +00:00
$can_post = true ;
else {
2017-03-21 16:02:59 +00:00
if ( $community_page && remote_user ()) {
2016-11-14 17:49:51 +00:00
$contact_id = 0 ;
2017-03-21 16:02:59 +00:00
if ( is_array ( $_SESSION [ 'remote' ])) {
foreach ( $_SESSION [ 'remote' ] as $v ) {
if ( $v [ 'uid' ] == $page_owner_uid ) {
2016-11-14 17:49:51 +00:00
$contact_id = $v [ 'cid' ];
2012-09-05 05:50:28 +00:00
break ;
}
}
}
2017-03-21 16:02:59 +00:00
if ( $contact_id ) {
2012-09-05 05:50:28 +00:00
$r = q ( " SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1 " ,
2016-11-14 17:49:51 +00:00
intval ( $contact_id ),
2012-09-05 05:50:28 +00:00
intval ( $page_owner_uid )
);
2017-11-08 03:57:46 +00:00
if ( DBM :: is_result ( $r )) {
2012-09-05 05:50:28 +00:00
$can_post = true ;
2016-11-14 17:49:51 +00:00
$visitor = $contact_id ;
2012-09-05 05:50:28 +00:00
}
2011-05-25 05:40:52 +00:00
}
}
}
2017-03-21 16:02:59 +00:00
if ( ! $can_post ) {
2015-11-07 15:24:59 +00:00
if ( $r_json ) {
2016-11-14 17:49:51 +00:00
echo json_encode ( array ( 'error' => t ( 'Permission denied.' )));
killme ();
}
2011-05-25 05:40:52 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
killme ();
}
2017-03-21 16:02:59 +00:00
if ( ! x ( $_FILES , 'userfile' )) {
2015-11-07 15:24:59 +00:00
if ( $r_json ) {
2016-11-14 17:49:51 +00:00
echo json_encode ( array ( 'error' => t ( 'Invalid request.' )));
}
2011-05-25 05:40:52 +00:00
killme ();
2015-08-24 11:54:41 +00:00
}
2011-05-25 05:40:52 +00:00
$src = $_FILES [ 'userfile' ][ 'tmp_name' ];
$filename = basename ( $_FILES [ 'userfile' ][ 'name' ]);
$filesize = intval ( $_FILES [ 'userfile' ][ 'size' ]);
2017-11-07 02:22:52 +00:00
$maxfilesize = Config :: get ( 'system' , 'maxfilesize' );
2011-05-25 05:40:52 +00:00
2014-04-23 18:22:53 +00: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 16:02:59 +00:00
if ( $filesize <= 0 ) {
2015-08-24 11:54:41 +00:00
$msg = t ( 'Sorry, maybe your upload is bigger than the PHP configuration allows' ) . EOL . ( t ( 'Or - did you try to upload an empty file?' ));
if ( $r_json ) {
2015-11-07 15:24:59 +00:00
echo json_encode ( array ( 'error' => $msg ));
2015-08-24 11:54:41 +00:00
} else {
notice ( $msg . EOL );
}
2014-04-23 18:22:53 +00:00
@ unlink ( $src );
killme ();
}
2017-03-21 16:02:59 +00:00
if (( $maxfilesize ) && ( $filesize > $maxfilesize )) {
2015-08-24 11:54:41 +00:00
$msg = sprintf ( t ( 'File exceeds size limit of %s' ), formatBytes ( $maxfilesize ));
if ( $r_json ) {
2015-11-07 15:24:59 +00:00
echo json_encode ( array ( 'error' => $msg ));
2015-08-24 11:54:41 +00:00
} else {
echo $msg . EOL ;
}
2011-05-25 05:40:52 +00:00
@ unlink ( $src );
2015-06-29 00:39:08 +00:00
killme ();
2011-05-25 05:40:52 +00:00
}
$filedata = @ file_get_contents ( $src );
2011-08-04 02:18:58 +00:00
$mimetype = z_mime_content_type ( $filename );
2015-08-14 05:48:28 +00:00
$hash = get_guid ( 64 );
2011-05-25 05:40:52 +00:00
$created = datetime_convert ();
2017-09-15 21:17:58 +00:00
$fields = array ( 'uid' => $page_owner_uid , 'hash' => $hash , 'filename' => $filename , 'filetype' => $mimetype ,
'filesize' => $filesize , 'data' => $filedata , 'created' => $created , 'edited' => $created ,
'allow_cid' => '<' . $page_owner_cid . '>' , 'allow_gid' => '' , 'deny_cid' => '' , 'deny_gid' => '' );
$r = dba :: insert ( 'attach' , $fields );
2011-05-25 05:40:52 +00:00
@ unlink ( $src );
2017-03-21 16:02:59 +00:00
if ( ! $r ) {
2015-08-24 11:54:41 +00:00
$msg = t ( 'File upload failed.' );
if ( $r_json ) {
2015-11-07 15:24:59 +00:00
echo json_encode ( array ( 'error' => $msg ));
2015-08-24 11:54:41 +00:00
} else {
echo $msg . EOL ;
}
2011-05-25 05:40:52 +00: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-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2015-08-24 11:54:41 +00:00
$msg = t ( 'File upload failed.' );
if ( $r_json ) {
2015-11-07 15:24:59 +00:00
echo json_encode ( array ( 'error' => $msg ));
2015-08-24 11:54:41 +00:00
} else {
echo $msg . EOL ;
}
2011-05-25 05:40:52 +00:00
killme ();
}
2015-11-07 15:24:59 +00:00
if ( $r_json ) {
2016-11-14 17:49:51 +00:00
echo json_encode ( array ( 'ok' => true ));
killme ();
}
2015-08-24 11:54:41 +00:00
2012-12-03 09:05:10 +00:00
$lf = " \n " ;
2012-04-17 13:11:41 +00:00
echo $lf . $lf . '[attachment]' . $r [ 0 ][ 'id' ] . '[/attachment]' . $lf ;
2015-08-24 11:54:41 +00:00
2011-05-25 05:40:52 +00:00
killme ();
// NOTREACHED
}