Avatar.php 4.75 KB
Newer Older
Evan Prodromou's avatar
Evan Prodromou committed
1 2 3 4
<?php
/**
 * Table Definition for avatar
 */
5
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
Evan Prodromou's avatar
Evan Prodromou committed
6

7
class Avatar extends Managed_DataObject
Evan Prodromou's avatar
Evan Prodromou committed
8 9 10 11 12 13
{
    ###START_AUTOCODE
    /* the code below is auto generated do not remove the above tag */

    public $__table = 'avatar';                          // table name
    public $profile_id;                      // int(4)  primary_key not_null
14
    public $original;                        // tinyint(1)
Evan Prodromou's avatar
Evan Prodromou committed
15 16 17
    public $width;                           // int(4)  primary_key not_null
    public $height;                          // int(4)  primary_key not_null
    public $mediatype;                       // varchar(32)   not_null
18
    public $filename;                        // varchar(255)
Evan Prodromou's avatar
Evan Prodromou committed
19 20 21
    public $url;                             // varchar(255)  unique_key
    public $created;                         // datetime()   not_null
    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
Evan Prodromou's avatar
Evan Prodromou committed
22 23 24

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE
25
	
26 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
    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'),
                'original' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'uploaded by user or generated?'),
                'width' => array('type' => 'int', 'not null' => true, 'description' => 'image width'),
                'height' => array('type' => 'int', 'not null' => true, 'description' => 'image height'),
                'mediatype' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'file type'),
                'filename' => array('type' => 'varchar', 'length' => 255, 'description' => 'local filename, if local'),
                'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'avatar location'),
                '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('profile_id', 'width', 'height'),
            'unique keys' => array(
                'avatar_url_key' => array('url'),
            ),
            'foreign keys' => array(
                'avatar_profile_id_fkey' => array('profile', array('profile_id' => 'id')),
            ),
            'indexes' => array(
                'avatar_profile_id_idx' => array('profile_id'),
            ),
        );
    }
52
    // We clean up the file, too
53

54 55
    function delete()
    {
56 57
        $filename = $this->filename;
        if (parent::delete()) {
58
            @unlink(Avatar::path($filename));
59 60
        }
    }
61

62 63 64
    /**
     * Where should the avatar go for this user?
     */
65 66 67 68 69 70 71 72 73 74 75
    static function filename($id, $extension, $size=null, $extra=null)
    {
        if ($size) {
            return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
        } else {
            return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
        }
    }

    static function path($filename)
    {
76 77 78 79 80 81 82
        $dir = common_config('avatar', 'dir');

        if ($dir[strlen($dir)-1] != '/') {
            $dir .= '/';
        }

        return $dir . $filename;
83 84 85 86
    }

    static function url($filename)
    {
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
        $path = common_config('avatar', 'path');

        if ($path[strlen($path)-1] != '/') {
            $path .= '/';
        }

        if ($path[0] != '/') {
            $path = '/'.$path;
        }

        $server = common_config('avatar', 'server');

        if (empty($server)) {
            $server = common_config('site', 'server');
        }
Zach Copley's avatar
Zach Copley committed
102

103 104 105 106 107 108 109 110 111 112 113 114
        $ssl = common_config('avatar', 'ssl');

        if (is_null($ssl)) { // null -> guess
            if (common_config('site', 'ssl') == 'always' &&
                !common_config('avatar', 'server')) {
                $ssl = true;
            } else {
                $ssl = false;
            }
        }

        $protocol = ($ssl) ? 'https' : 'http';
115

116
        return $protocol.'://'.$server.$path.$filename;
117 118 119 120 121
    }

    function displayUrl()
    {
        $server = common_config('avatar', 'server');
122
        if ($server && !empty($this->filename)) {
123
            return Avatar::url($this->filename);
124 125 126 127 128
        } else {
            return $this->url;
        }
    }

129
    static function defaultImage($size)
130 131 132 133
    {
        static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
                                  AVATAR_STREAM_SIZE => 'stream',
                                  AVATAR_MINI_SIZE => 'mini');
134
        return Theme::path('default-avatar-'.$sizenames[$size].'.png');
135
    }
Evan Prodromou's avatar
Evan Prodromou committed
136
}