Foreign_link.php 5.98 KB
Newer Older
1 2 3 4
<?php
/**
 * Table Definition for foreign_link
 */
5
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
6

7
class Foreign_link extends Managed_DataObject
8 9 10 11 12 13
{
    ###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
14
    public $foreign_id;                      // bigint(8)  primary_key not_null unsigned
15
    public $service;                         // int(4)  primary_key not_null
16
    public $credentials;                     // varchar(255)
17 18 19
    public $noticesync;                      // tinyint(1)   not_null default_1
    public $friendsync;                      // tinyint(1)   not_null default_2
    public $profilesync;                     // tinyint(1)   not_null default_1
20 21
    public $last_noticesync;                 // datetime()
    public $last_friendsync;                 // datetime()
22 23 24 25 26
    public $created;                         // datetime()   not_null
    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE
27

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
    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'),
                'foreign_id' => array('type' => 'int', 'size' => 'big', 'unsigned' => true, 'not null' => true, 'description' => 'link to user on foreign service, if exists'),
                'service' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to service'),
                'credentials' => array('type' => 'varchar', 'length' => 255, 'description' => 'authc credentials, typically a password'),
                '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'),
                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
            ),
            'primary key' => array('user_id', 'foreign_id', 'service'),
            'foreign keys' => array(
                'foreign_link_user_id_fkey' => array('user', array('user_id' => 'id')),
                'foreign_link_foreign_id_fkey' => array('foreign_user', array('foreign_id' => 'id', 'service' => 'service')),
                'foreign_link_service_fkey' => array('foreign_service', array('service' => 'id')),
            ),
            'indexes' => array(
                'foreign_user_user_id_idx' => array('user_id'),
            ),
        );
    }

56 57
    static function getByUserID($user_id, $service)
    {
58 59 60 61
        if (empty($user_id) || empty($service)) {
            return null;
        }

62
        $flink = new Foreign_link();
63

64 65 66
        $flink->service = $service;
        $flink->user_id = $user_id;
        $flink->limit(1);
67

68 69 70
        $result = $flink->find(true);

        return empty($result) ? null : $flink;
71
    }
72 73 74

    static function getByForeignID($foreign_id, $service)
    {
75 76 77 78 79 80 81
        if (empty($foreign_id) || empty($service)) {
            return null;
        } else {
            $flink = new Foreign_link();
            $flink->service = $service;
            $flink->foreign_id = $foreign_id;
            $flink->limit(1);
82

83
            $result = $flink->find(true);
84

85 86
            return empty($result) ? null : $flink;
        }
87
    }
88

89
    function set_flags($noticesend, $noticerecv, $replysync, $friendsync)
90
    {
91
        if ($noticesend) {
92 93 94 95
            $this->noticesync |= FOREIGN_NOTICE_SEND;
        } else {
            $this->noticesync &= ~FOREIGN_NOTICE_SEND;
        }
96

97 98 99 100 101
        if ($noticerecv) {
            $this->noticesync |= FOREIGN_NOTICE_RECV;
        } else {
            $this->noticesync &= ~FOREIGN_NOTICE_RECV;
        }
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

        if ($replysync) {
            $this->noticesync |= FOREIGN_NOTICE_SEND_REPLY;
        } else {
            $this->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY;
        }

        if ($friendsync) {
            $this->friendsync |= FOREIGN_FRIEND_RECV;
        } else {
            $this->friendsync &= ~FOREIGN_FRIEND_RECV;
        }

        $this->profilesync = 0;
    }

118
    // Convenience methods
119
    function getForeignUser()
120
    {
121 122 123
        $fuser = new Foreign_user();
        $fuser->service = $this->service;
        $fuser->id = $this->foreign_id;
124

125
        $fuser->limit(1);
126

Evan Prodromou's avatar
TRUE  
Evan Prodromou committed
127
        if ($fuser->find(true)) {
128 129
            return $fuser;
        }
130 131

        return null;
132
    }
133

134 135
    function getUser()
    {
136
        return User::getKV($this->user_id);
137
    }
138

139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
    // Make sure we only ever delete one record at a time
    function safeDelete()
    {
        if (!empty($this->user_id)
            && !empty($this->foreign_id)
            && !empty($this->service))
        {
            return $this->delete();
        } else {
            common_debug(LOG_WARNING,
                'Foreign_link::safeDelete() tried to delete a '
                . 'Foreign_link without a fully specified compound key: '
                . var_export($this, true));
            return false;
        }
    }
155
}