2020-01-31 18:20:50 -05:00
< ? php
2020-02-09 09:45:36 -05:00
/**
2021-03-29 02:40:20 -04:00
* @ copyright Copyright ( C ) 2010 - 2021 , the Friendica project
2020-02-09 09:45:36 -05:00
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
*/
2020-01-31 18:20:50 -05:00
namespace Friendica\Module\Contact ;
2021-11-17 15:32:57 -05:00
use Friendica\App\Page ;
2020-01-31 18:20:50 -05:00
use Friendica\BaseModule ;
2021-07-23 08:39:37 -04:00
use Friendica\Content\Widget ;
2021-11-17 15:32:57 -05:00
use Friendica\Core\L10n ;
2020-01-31 18:20:50 -05:00
use Friendica\Core\Protocol ;
use Friendica\Core\Renderer ;
use Friendica\Core\Session ;
2021-11-17 15:32:57 -05:00
use Friendica\Database\Database ;
2020-01-31 18:20:50 -05:00
use Friendica\Model ;
use Friendica\Module\Contact ;
use Friendica\Network\HTTPException\BadRequestException ;
use Friendica\Network\HTTPException\ForbiddenException ;
use Friendica\Util\Strings ;
2021-11-17 15:32:57 -05:00
use Psr\Log\LoggerInterface ;
2020-01-31 18:20:50 -05:00
/**
2020-01-31 18:37:11 -05:00
* GUI for advanced contact details manipulation
2020-01-31 18:20:50 -05:00
*/
2020-01-31 18:37:11 -05:00
class Advanced extends BaseModule
2020-01-31 18:20:50 -05:00
{
2021-11-17 15:32:57 -05:00
/** @var Database */
protected $dba ;
/** @var LoggerInterface */
protected $logger ;
/** @var Page */
protected $page ;
public function __construct ( Database $dba , LoggerInterface $logger , Page $page , L10n $l10n , array $parameters = [])
2020-01-31 18:20:50 -05:00
{
2021-11-17 15:32:57 -05:00
parent :: __construct ( $l10n , $parameters );
$this -> dba = $dba ;
$this -> logger = $logger ;
$this -> page = $page ;
2020-01-31 18:20:50 -05:00
if ( ! Session :: isAuthenticated ()) {
2021-11-17 15:32:57 -05:00
throw new ForbiddenException ( $this -> l10n -> t ( 'Permission denied.' ));
2020-01-31 18:20:50 -05:00
}
}
2021-11-14 17:13:47 -05:00
public function post ()
2020-01-31 18:20:50 -05:00
{
2021-11-14 17:19:25 -05:00
$cid = $this -> parameters [ 'id' ];
2020-01-31 18:20:50 -05:00
$contact = Model\Contact :: selectFirst ([], [ 'id' => $cid , 'uid' => local_user ()]);
if ( empty ( $contact )) {
2021-11-17 15:32:57 -05:00
throw new BadRequestException ( $this -> l10n -> t ( 'Contact not found.' ));
2020-01-31 18:20:50 -05:00
}
$name = ( $_POST [ 'name' ] ? ? '' ) ? : $contact [ 'name' ];
$nick = $_POST [ 'nick' ] ? ? '' ;
$url = $_POST [ 'url' ] ? ? '' ;
$alias = $_POST [ 'alias' ] ? ? '' ;
$request = $_POST [ 'request' ] ? ? '' ;
$confirm = $_POST [ 'confirm' ] ? ? '' ;
$notify = $_POST [ 'notify' ] ? ? '' ;
$poll = $_POST [ 'poll' ] ? ? '' ;
$attag = $_POST [ 'attag' ] ? ? '' ;
$photo = $_POST [ 'photo' ] ? ? '' ;
$nurl = Strings :: normaliseLink ( $url );
2021-11-17 15:32:57 -05:00
$r = $this -> dba -> update (
2020-01-31 18:20:50 -05:00
'contact' ,
[
'name' => $name ,
'nick' => $nick ,
'url' => $url ,
'nurl' => $nurl ,
'alias' => $alias ,
'request' => $request ,
'confirm' => $confirm ,
'notify' => $notify ,
'poll' => $poll ,
'attag' => $attag ,
],
[ 'id' => $contact [ 'id' ], 'uid' => local_user ()]
);
if ( $photo ) {
2021-11-17 15:32:57 -05:00
$this -> logger -> notice ( 'Updating photo.' , [ 'photo' => $photo ]);
2020-01-31 18:20:50 -05:00
2020-07-25 07:48:52 -04:00
Model\Contact :: updateAvatar ( $contact [ 'id' ], $photo , true );
2020-01-31 18:20:50 -05:00
}
2020-07-23 02:11:21 -04:00
if ( ! $r ) {
2021-11-17 15:32:57 -05:00
notice ( $this -> l10n -> t ( 'Contact update failed.' ));
2020-01-31 18:20:50 -05:00
}
}
2021-11-14 17:13:47 -05:00
public function content () : string
2020-01-31 18:20:50 -05:00
{
2021-11-14 17:19:25 -05:00
$cid = $this -> parameters [ 'id' ];
2020-01-31 18:20:50 -05:00
$contact = Model\Contact :: selectFirst ([], [ 'id' => $cid , 'uid' => local_user ()]);
if ( empty ( $contact )) {
2021-11-17 15:32:57 -05:00
throw new BadRequestException ( $this -> l10n -> t ( 'Contact not found.' ));
2020-01-31 18:20:50 -05:00
}
2021-11-17 15:32:57 -05:00
$this -> page [ 'aside' ] = Widget\VCard :: getHTML ( $contact );
2020-01-31 18:20:50 -05:00
2021-11-17 15:32:57 -05:00
$warning = $this -> l10n -> t ( '<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working.' );
$info = $this -> l10n -> t ( 'Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.' );
2020-01-31 18:20:50 -05:00
$returnaddr = " contact/ $cid " ;
2020-10-10 06:06:34 -04:00
// This data is fetched automatically for most networks.
// Editing does only makes sense for mail and feed contacts.
if ( ! in_array ( $contact [ 'network' ], [ Protocol :: FEED , Protocol :: MAIL ])) {
$readonly = 'readonly' ;
} else {
$readonly = '' ;
}
2020-08-06 22:49:21 -04:00
$tab_str = Contact :: getTabsHTML ( $contact , Contact :: TAB_ADVANCED );
2020-01-31 18:20:50 -05:00
2020-01-31 18:37:11 -05:00
$tpl = Renderer :: getMarkupTemplate ( 'contact/advanced.tpl' );
2020-01-31 18:20:50 -05:00
return Renderer :: replaceMacros ( $tpl , [
'$tab_str' => $tab_str ,
'$warning' => $warning ,
'$info' => $info ,
'$returnaddr' => $returnaddr ,
2021-11-17 15:32:57 -05:00
'$return' => $this -> l10n -> t ( 'Return to contact editor' ),
2020-01-31 18:20:50 -05:00
'$contact_id' => $contact [ 'id' ],
2021-11-17 15:32:57 -05:00
'$lbl_submit' => $this -> l10n -> t ( 'Submit' ),
'$name' => [ 'name' , $this -> l10n -> t ( 'Name' ), $contact [ 'name' ], '' , '' , $readonly ],
'$nick' => [ 'nick' , $this -> l10n -> t ( 'Account Nickname' ), $contact [ 'nick' ], '' , '' , $readonly ],
'$attag' => [ 'attag' , $this -> l10n -> t ( '@Tagname - overrides Name/Nickname' ), $contact [ 'attag' ]],
'$url' => [ 'url' , $this -> l10n -> t ( 'Account URL' ), $contact [ 'url' ], '' , '' , $readonly ],
'$alias' => [ 'alias' , $this -> l10n -> t ( 'Account URL Alias' ), $contact [ 'alias' ], '' , '' , $readonly ],
'$request' => [ 'request' , $this -> l10n -> t ( 'Friend Request URL' ), $contact [ 'request' ], '' , '' , $readonly ],
'confirm' => [ 'confirm' , $this -> l10n -> t ( 'Friend Confirm URL' ), $contact [ 'confirm' ], '' , '' , $readonly ],
'notify' => [ 'notify' , $this -> l10n -> t ( 'Notification Endpoint URL' ), $contact [ 'notify' ], '' , '' , $readonly ],
'poll' => [ 'poll' , $this -> l10n -> t ( 'Poll/Feed URL' ), $contact [ 'poll' ], '' , '' , $readonly ],
'photo' => [ 'photo' , $this -> l10n -> t ( 'New photo from this URL' ), '' , '' , '' , $readonly ],
2020-01-31 18:20:50 -05:00
]);
}
}