We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Notice.php 3.48 KB
Newer Older
Evan Prodromou's avatar
Evan Prodromou committed
1
<?php
Evan Prodromou's avatar
Evan Prodromou committed
2
/*
Evan Prodromou's avatar
Evan Prodromou committed
3 4
 * Laconica - a distributed open-source microblogging tool
 * Copyright (C) 2008, Controlez-Vous, Inc.
Evan Prodromou's avatar
Evan Prodromou committed
5
 *
Evan Prodromou's avatar
Evan Prodromou committed
6 7 8 9
 * 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.
Evan Prodromou's avatar
Evan Prodromou committed
10
 *
Evan Prodromou's avatar
Evan Prodromou committed
11 12 13 14
 * 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.
Evan Prodromou's avatar
Evan Prodromou committed
15
 *
Evan Prodromou's avatar
Evan Prodromou committed
16 17 18
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
Evan Prodromou's avatar
Evan Prodromou committed
19

Evan Prodromou's avatar
Evan Prodromou committed
20
if (!defined('LACONICA')) { exit(1); }
Evan Prodromou's avatar
Evan Prodromou committed
21

Evan Prodromou's avatar
Evan Prodromou committed
22 23 24 25 26
/**
 * Table Definition for notice
 */
require_once 'DB/DataObject.php';

27
class Notice extends DB_DataObject 
Evan Prodromou's avatar
Evan Prodromou committed
28 29 30 31 32 33 34
{
    ###START_AUTOCODE
    /* the code below is auto generated do not remove the above tag */

    public $__table = 'notice';                          // table name
    public $id;                              // int(4)  primary_key not_null
    public $profile_id;                      // int(4)   not_null
35
    public $uri;                             // varchar(255)  unique_key
36 37 38
    public $content;                         // varchar(140)  
    public $rendered;                        // text()  
    public $url;                             // varchar(255)  
Evan Prodromou's avatar
Evan Prodromou committed
39 40
    public $created;                         // datetime()   not_null
    public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
41
    public $reply_to;                        // int(4)  
Evan Prodromou's avatar
Evan Prodromou committed
42
    public $is_local;                        // tinyint(1)  
43
    public $source;                          // varchar(32)  
Evan Prodromou's avatar
Evan Prodromou committed
44 45 46 47 48 49

    /* Static get */
    function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Notice',$k,$v); }

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE
Evan Prodromou's avatar
Evan Prodromou committed
50 51

	function getProfile() {
Evan Prodromou's avatar
Evan Prodromou committed
52
		return Profile::staticGet($this->profile_id);
Evan Prodromou's avatar
Evan Prodromou committed
53
	}
Mike Cochrane's avatar
Mike Cochrane committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

	function saveTags() {
		/* extract all #hastags */
		$count = preg_match_all('/(?:^|\s)#([a-z0-9]{1,64})/', strtolower($this->content), $match);
		if (!$count) {
			return true;
		}

		/* Add them to the database */
		foreach(array_unique($match[1]) as $hashtag) {
			$tag = DB_DataObject::factory('Notice_tag');
			$tag->notice_id = $this->id;
			$tag->tag = $hashtag;
			$tag->created = $this->created;
			$id = $tag->insert();
			if (!$id) {
				$last_error = PEAR::getStaticProperty('DB_DataObject','lastError');
				common_log(LOG_ERROR, 'DB error inserting hashtag: ' . $last_error->message);
				common_server_error(sprintf(_('DB error inserting hashtag: %s'), $last_error->message));
				return;
			}
		}
		return true;
	}
78 79 80 81 82 83 84 85 86
	
	static function saveNew($profile_id, $content, $source=NULL, $is_local=1) {
		
		$notice = new Notice();
		$notice->profile_id = $profile_id;
		$notice->is_local = $is_local;
		$notice->created = DB_DataObject_Cast::dateTime();
		$notice->content = $content;
		$notice->rendered = common_render_content($notice->content, $notice);
Evan Prodromou's avatar
Evan Prodromou committed
87 88 89 90
		if ($source) {
			$notice->source = $source;
		}
		
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
		$id = $notice->insert();

		if (!$id) {
			return _('Problem saving notice.');
		}

		$orig = clone($notice);
		$notice->uri = common_notice_uri($notice);

		if (!$notice->update($orig)) {
			return _('Problem saving notice.');
		}

		common_save_replies($notice);
		$notice->saveTags();
		
		return $notice;
	}
Evan Prodromou's avatar
Evan Prodromou committed
109
}