2008-08-27 12:24:23 +09:00
< ? php
2020-06-29 07:41:46 +09:00
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
2008-08-27 12:24:23 +09:00
/**
* Table Definition for foreign_link
*/
2020-06-29 07:41:46 +09:00
defined ( 'GNUSOCIAL' ) || die ();
2008-08-27 12:24:23 +09:00
2011-08-23 06:52:02 +09:00
class Foreign_link extends Managed_DataObject
2008-08-27 12:24:23 +09:00
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'foreign_link' ; // table name
public $user_id ; // int(4) primary_key not_null
2009-05-28 09:59:49 +09:00
public $foreign_id ; // bigint(8) primary_key not_null unsigned
2008-08-27 12:24:23 +09:00
public $service ; // int(4) primary_key not_null
2015-02-13 02:18:55 +09:00
public $credentials ; // varchar(191) not 255 because utf8mb4 takes more space
2008-08-27 12:24:23 +09:00
public $noticesync ; // tinyint(1) not_null default_1
public $friendsync ; // tinyint(1) not_null default_2
public $profilesync ; // tinyint(1) not_null default_1
2009-04-29 09:08:20 +09:00
public $last_noticesync ; // datetime()
public $last_friendsync ; // datetime()
2020-06-29 07:41:46 +09:00
public $created ; // datetime()
public $modified ; // timestamp() not_null default_CURRENT_TIMESTAMP
2008-08-27 12:24:23 +09:00
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
2008-08-28 16:22:05 +09:00
2011-08-23 06:52:02 +09:00
public static function schemaDef ()
{
return array (
'fields' => array (
'user_id' => array ( 'type' => 'int' , 'not null' => true , 'description' => 'link to user on this system, if exists' ),
2020-06-29 02:05:11 +09:00
'foreign_id' => array ( 'type' => 'int' , 'size' => 'big' , 'not null' => true , 'description' => 'link to user on foreign service, if exists' ),
2011-08-23 06:52:02 +09:00
'service' => array ( 'type' => 'int' , 'not null' => true , 'description' => 'foreign key to service' ),
2015-02-13 02:18:55 +09:00
'credentials' => array ( 'type' => 'varchar' , 'length' => 191 , 'description' => 'authc credentials, typically a password' ),
2011-08-23 06:52:02 +09:00
'noticesync' => array ( 'type' => 'int' , 'size' => 'tiny' , 'not null' => true , 'default' => 1 , 'description' => 'notice synchronization, bit 1 = sync outgoing, bit 2 = sync incoming, bit 3 = filter local replies' ),
'friendsync' => array ( 'type' => 'int' , 'size' => 'tiny' , 'not null' => true , 'default' => 2 , 'description' => 'friend synchronization, bit 1 = sync outgoing, bit 2 = sync incoming' ),
'profilesync' => array ( 'type' => 'int' , 'size' => 'tiny' , 'not null' => true , 'default' => 1 , 'description' => 'profile synchronization, bit 1 = sync outgoing, bit 2 = sync incoming' ),
'last_noticesync' => array ( 'type' => 'datetime' , 'description' => 'last time notices were imported' ),
'last_friendsync' => array ( 'type' => 'datetime' , 'description' => 'last time friends were imported' ),
2020-06-29 07:41:46 +09:00
'created' => array ( 'type' => 'datetime' , 'description' => 'date this record was created' ),
'modified' => array ( 'type' => 'timestamp' , 'not null' => true , 'description' => 'date this record was modified' ),
2011-08-23 06:52:02 +09:00
),
'primary key' => array ( 'user_id' , 'foreign_id' , 'service' ),
'foreign keys' => array (
'foreign_link_user_id_fkey' => array ( 'user' , array ( 'user_id' => 'id' )),
2020-07-31 22:12:48 +09:00
'foreign_link_foreign_id_service_fkey' => array ( 'foreign_user' , array ( 'foreign_id' => 'id' , 'service' => 'service' )),
2011-08-23 06:52:02 +09:00
'foreign_link_service_fkey' => array ( 'foreign_service' , array ( 'service' => 'id' )),
),
2020-07-31 22:36:40 +09:00
'indexes' => array (
'foreign_link_foreign_id_service_idx' => array ( 'foreign_id' , 'service' ),
'foreign_link_service_idx' => array ( 'service' ),
),
2011-08-23 06:52:02 +09:00
);
}
2020-06-29 02:05:11 +09:00
public static function getByUserID ( $user_id , $service )
2009-01-05 10:04:07 +09:00
{
2009-08-19 07:59:14 +09:00
if ( empty ( $user_id ) || empty ( $service )) {
2015-07-18 04:03:37 +09:00
throw new ServerException ( 'Empty user_id or service for Foreign_link::getByUserID' );
2009-08-19 07:59:14 +09:00
}
2008-12-24 04:19:07 +09:00
$flink = new Foreign_link ();
$flink -> service = $service ;
$flink -> user_id = $user_id ;
$flink -> limit ( 1 );
2008-08-28 16:22:05 +09:00
2015-07-18 04:03:37 +09:00
if ( ! $flink -> find ( true )) {
throw new NoResultException ( $flink );
}
2009-08-19 07:59:14 +09:00
2015-07-18 04:03:37 +09:00
return $flink ;
2008-12-24 04:19:07 +09:00
}
2009-01-05 10:04:07 +09:00
2020-06-29 02:05:11 +09:00
public static function getByForeignID ( $foreign_id , $service )
2009-01-05 10:04:07 +09:00
{
2009-08-19 07:59:14 +09:00
if ( empty ( $foreign_id ) || empty ( $service )) {
2015-07-18 04:03:37 +09:00
throw new ServerException ( 'Empty foreign_id or service for Foreign_link::getByForeignID' );
}
2008-11-17 11:46:24 +09:00
2015-07-18 04:03:37 +09:00
$flink = new Foreign_link ();
$flink -> service = $service ;
$flink -> foreign_id = $foreign_id ;
$flink -> limit ( 1 );
2008-11-17 11:46:24 +09:00
2015-07-18 04:03:37 +09:00
if ( ! $flink -> find ( true )) {
throw new NoResultException ( $flink );
2009-08-19 07:59:14 +09:00
}
2015-07-18 04:03:37 +09:00
return $flink ;
2008-12-24 04:19:07 +09:00
}
2009-01-05 10:04:07 +09:00
2020-06-29 02:05:11 +09:00
public function set_flags ( $noticesend , $noticerecv , $replysync , $repeatsync , $friendsync )
2009-01-05 13:02:12 +09:00
{
2009-04-14 11:19:26 +09:00
if ( $noticesend ) {
2009-01-05 13:02:12 +09:00
$this -> noticesync |= FOREIGN_NOTICE_SEND ;
} else {
$this -> noticesync &= ~ FOREIGN_NOTICE_SEND ;
}
2009-08-19 07:59:14 +09:00
2009-04-14 11:19:26 +09:00
if ( $noticerecv ) {
$this -> noticesync |= FOREIGN_NOTICE_RECV ;
} else {
$this -> noticesync &= ~ FOREIGN_NOTICE_RECV ;
}
2009-01-05 13:02:12 +09:00
if ( $replysync ) {
$this -> noticesync |= FOREIGN_NOTICE_SEND_REPLY ;
} else {
$this -> noticesync &= ~ FOREIGN_NOTICE_SEND_REPLY ;
}
2016-03-19 19:23:26 +09:00
if ( $repeatsync ) {
$this -> noticesync |= FOREIGN_NOTICE_SEND_REPEAT ;
} else {
$this -> noticesync &= ~ FOREIGN_NOTICE_SEND_REPEAT ;
}
2009-01-05 13:02:12 +09:00
if ( $friendsync ) {
$this -> friendsync |= FOREIGN_FRIEND_RECV ;
} else {
$this -> friendsync &= ~ FOREIGN_FRIEND_RECV ;
}
$this -> profilesync = 0 ;
}
2011-03-23 00:54:23 +09:00
// Convenience methods
2020-06-29 02:05:11 +09:00
public function getForeignUser ()
2009-01-05 10:04:07 +09:00
{
2008-12-24 04:19:07 +09:00
$fuser = new Foreign_user ();
$fuser -> service = $this -> service ;
$fuser -> id = $this -> foreign_id ;
2009-01-05 10:04:07 +09:00
2008-12-24 04:19:07 +09:00
$fuser -> limit ( 1 );
2009-01-05 10:04:07 +09:00
2015-07-18 01:44:09 +09:00
if ( ! $fuser -> find ( true )) {
throw new NoResultException ( $fuser );
2008-12-24 04:19:07 +09:00
}
2009-01-05 10:04:07 +09:00
2015-07-18 01:44:09 +09:00
return $fuser ;
2008-12-24 04:19:07 +09:00
}
2009-01-05 10:04:07 +09:00
2020-06-29 02:05:11 +09:00
public function getUser ()
2008-12-24 04:33:23 +09:00
{
2015-07-18 18:39:34 +09:00
return Profile :: getByID ( $this -> user_id ) -> getUser ();
2008-12-24 04:19:07 +09:00
}
2009-01-05 10:04:07 +09:00
2020-06-29 02:05:11 +09:00
public function getProfile ()
2013-09-20 00:20:44 +09:00
{
2015-07-18 18:39:34 +09:00
return Profile :: getByID ( $this -> user_id );
2013-09-20 00:20:44 +09:00
}
2010-03-05 12:14:40 +09:00
// Make sure we only ever delete one record at a time
2020-06-29 02:05:11 +09:00
public function safeDelete ()
2010-03-05 12:14:40 +09:00
{
if ( ! empty ( $this -> user_id )
&& ! empty ( $this -> foreign_id )
2020-06-29 02:05:11 +09:00
&& ! empty ( $this -> service )) {
2010-03-05 12:14:40 +09:00
return $this -> delete ();
} else {
2020-06-29 02:05:11 +09:00
common_debug (
LOG_WARNING ,
2010-03-05 12:14:40 +09:00
'Foreign_link::safeDelete() tried to delete a '
. 'Foreign_link without a fully specified compound key: '
2020-06-29 02:05:11 +09:00
. var_export ( $this , true )
);
2010-03-05 12:14:40 +09:00
return false ;
}
}
2008-08-27 12:24:23 +09:00
}