mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 00:35:30 +00:00
source code re-org, move taxonomy to separate include
This commit is contained in:
parent
4f06905a18
commit
3b1e5e5204
4 changed files with 114 additions and 271 deletions
2
boot.php
2
boot.php
|
@ -37,6 +37,8 @@ require_once('include/permissions.php');
|
||||||
require_once('library/Mobile_Detect/Mobile_Detect.php');
|
require_once('library/Mobile_Detect/Mobile_Detect.php');
|
||||||
require_once('include/BaseObject.php');
|
require_once('include/BaseObject.php');
|
||||||
require_once('include/features.php');
|
require_once('include/features.php');
|
||||||
|
require_once('include/taxonomy.php');
|
||||||
|
|
||||||
|
|
||||||
define ( 'RED_PLATFORM', 'Red Matrix' );
|
define ( 'RED_PLATFORM', 'Red Matrix' );
|
||||||
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R');
|
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R');
|
||||||
|
|
91
include/taxonomy.php
Normal file
91
include/taxonomy.php
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?php /** @file */
|
||||||
|
|
||||||
|
// post categories and "save to file" use the same item.file table for storage.
|
||||||
|
// We will differentiate the different uses by wrapping categories in angle brackets
|
||||||
|
// and save to file categories in square brackets.
|
||||||
|
// To do this we need to escape these characters if they appear in our tag.
|
||||||
|
|
||||||
|
function file_tag_encode($s) {
|
||||||
|
return str_replace(array('<','>','[',']'),array('%3c','%3e','%5b','%5d'),$s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function file_tag_decode($s) {
|
||||||
|
return str_replace(array('%3c','%3e','%5b','%5d'),array('<','>','[',']'),$s);
|
||||||
|
}
|
||||||
|
|
||||||
|
function file_tag_file_query($table,$s,$type = 'file') {
|
||||||
|
|
||||||
|
if($type == 'file')
|
||||||
|
$termtype = TERM_FILE;
|
||||||
|
else
|
||||||
|
$termtype = TERM_CATEGORY;
|
||||||
|
|
||||||
|
return sprintf(" AND " . (($table) ? dbesc($table) . '.' : '') . "id in (select term.oid from term where term.type = %d and term.term = '%s' and term.uid = " . (($table) ? dbesc($table) . '.' : '') . "uid ) ",
|
||||||
|
intval($termtype),
|
||||||
|
protect_sprintf(dbesc($s))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function term_query($table,$s,$type = TERM_UNKNOWN) {
|
||||||
|
|
||||||
|
return sprintf(" AND " . (($table) ? dbesc($table) . '.' : '') . "id in (select term.oid from term where term.type = %d and term.term = '%s' and term.uid = " . (($table) ? dbesc($table) . '.' : '') . "uid ) ",
|
||||||
|
intval($type),
|
||||||
|
protect_sprintf(dbesc($s))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function store_item_tag($uid,$iid,$otype,$type,$term,$url = '') {
|
||||||
|
if(! $term)
|
||||||
|
return false;
|
||||||
|
$r = q("select * from term
|
||||||
|
where uid = %d and oid = %d and otype = %d and type = %d
|
||||||
|
and term = '%s' and url = '%s' ",
|
||||||
|
intval($uid),
|
||||||
|
intval($iid),
|
||||||
|
intval($otype),
|
||||||
|
intval($type),
|
||||||
|
dbesc($term),
|
||||||
|
dbesc($url)
|
||||||
|
);
|
||||||
|
if($r)
|
||||||
|
return false;
|
||||||
|
$r = q("insert into term (uid, oid, otype, type, term, url)
|
||||||
|
values( %d, %d, %d, %d, '%s', '%s') ",
|
||||||
|
intval($uid),
|
||||||
|
intval($iid),
|
||||||
|
intval($otype),
|
||||||
|
intval($type),
|
||||||
|
dbesc($term),
|
||||||
|
dbesc($url)
|
||||||
|
);
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_terms_oftype($arr,$type) {
|
||||||
|
$ret = array();
|
||||||
|
if(! (is_array($arr) && count($arr)))
|
||||||
|
return $ret;
|
||||||
|
|
||||||
|
if(! is_array($type))
|
||||||
|
$type = array($type);
|
||||||
|
|
||||||
|
foreach($type as $t)
|
||||||
|
foreach($arr as $x)
|
||||||
|
if($x['type'] == $t)
|
||||||
|
$ret[] = $x;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function format_term_for_display($term) {
|
||||||
|
$s = '';
|
||||||
|
if($term['type'] == TERM_HASHTAG)
|
||||||
|
$s .= '#';
|
||||||
|
elseif($term['type'] == TERM_MENTION)
|
||||||
|
$s .= '@';
|
||||||
|
|
||||||
|
if($term['url']) $s .= '<a target="extlink" href="' . $term['url'] . '">' . htmlspecialchars($term['term']) . '</a>';
|
||||||
|
else $s .= htmlspecialchars($term['term']);
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
284
include/text.php
284
include/text.php
|
@ -1424,278 +1424,28 @@ function reltoabs($text, $base)
|
||||||
}
|
}
|
||||||
|
|
||||||
function item_post_type($item) {
|
function item_post_type($item) {
|
||||||
if(intval($item['event-id']))
|
|
||||||
return t('event');
|
|
||||||
if(strlen($item['resource_id']))
|
switch($item['resource_type']) {
|
||||||
return t('photo');
|
case 'photo':
|
||||||
if(strlen($item['verb']) && $item['verb'] !== ACTIVITY_POST)
|
$post_type = t('photo');
|
||||||
return t('activity');
|
break;
|
||||||
if($item['id'] != $item['parent'])
|
case 'event':
|
||||||
return t('comment');
|
$post_type = t('event');
|
||||||
return t('post');
|
break;
|
||||||
|
default:
|
||||||
|
$post_type = t('status');
|
||||||
|
if($item['mid'] != $item['parent_mid'])
|
||||||
|
$post_type = t('comment');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// post categories and "save to file" use the same item.file table for storage.
|
if(strlen($item['verb']) && (! activity_compare($item['verb'],ACTIVITY_POST)))
|
||||||
// We will differentiate the different uses by wrapping categories in angle brackets
|
$post_type = t('activity');
|
||||||
// and save to file categories in square brackets.
|
|
||||||
// To do this we need to escape these characters if they appear in our tag.
|
|
||||||
|
|
||||||
function file_tag_encode($s) {
|
return $post_type;
|
||||||
return str_replace(array('<','>','[',']'),array('%3c','%3e','%5b','%5d'),$s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function file_tag_decode($s) {
|
|
||||||
return str_replace(array('%3c','%3e','%5b','%5d'),array('<','>','[',']'),$s);
|
|
||||||
}
|
|
||||||
|
|
||||||
function file_tag_file_query($table,$s,$type = 'file') {
|
|
||||||
|
|
||||||
if($type == 'file')
|
|
||||||
$termtype = TERM_FILE;
|
|
||||||
else
|
|
||||||
$termtype = TERM_CATEGORY;
|
|
||||||
|
|
||||||
return sprintf(" AND " . (($table) ? dbesc($table) . '.' : '') . "id in (select term.oid from term where term.type = %d and term.term = '%s' and term.uid = " . (($table) ? dbesc($table) . '.' : '') . "uid ) ",
|
|
||||||
intval($termtype),
|
|
||||||
protect_sprintf(dbesc($s))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function term_query($table,$s,$type = TERM_UNKNOWN) {
|
|
||||||
|
|
||||||
return sprintf(" AND " . (($table) ? dbesc($table) . '.' : '') . "id in (select term.oid from term where term.type = %d and term.term = '%s' and term.uid = " . (($table) ? dbesc($table) . '.' : '') . "uid ) ",
|
|
||||||
intval($type),
|
|
||||||
protect_sprintf(dbesc($s))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ex. given music,video return <music><video> or [music][video]
|
|
||||||
function file_tag_list_to_file($list,$type = 'file') {
|
|
||||||
$tag_list = '';
|
|
||||||
if(strlen($list)) {
|
|
||||||
$list_array = explode(",",$list);
|
|
||||||
if($type == 'file') {
|
|
||||||
$lbracket = '[';
|
|
||||||
$rbracket = ']';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$lbracket = '<';
|
|
||||||
$rbracket = '>';
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($list_array as $item) {
|
|
||||||
if(strlen($item)) {
|
|
||||||
$tag_list .= $lbracket . file_tag_encode(trim($item)) . $rbracket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $tag_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ex. given <music><video>[friends], return music,video or friends
|
|
||||||
function file_tag_file_to_list($file,$type = 'file') {
|
|
||||||
$matches = false;
|
|
||||||
$list = '';
|
|
||||||
if($type == 'file') {
|
|
||||||
$cnt = preg_match_all('/\[(.*?)\]/',$file,$matches,PREG_SET_ORDER);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$cnt = preg_match_all('/<(.*?)>/',$file,$matches,PREG_SET_ORDER);
|
|
||||||
}
|
|
||||||
if($cnt) {
|
|
||||||
foreach($matches as $mtch) {
|
|
||||||
if(strlen($list))
|
|
||||||
$list .= ',';
|
|
||||||
$list .= file_tag_decode($mtch[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
|
|
||||||
function file_tag_update_pconfig($uid,$file_old,$file_new,$type = 'file') {
|
|
||||||
// $file_old - categories previously associated with an item
|
|
||||||
// $file_new - new list of categories for an item
|
|
||||||
|
|
||||||
if(! intval($uid))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if($file_old == $file_new)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
$saved = get_pconfig($uid,'system','filetags');
|
|
||||||
if(strlen($saved)) {
|
|
||||||
if($type == 'file') {
|
|
||||||
$lbracket = '[';
|
|
||||||
$rbracket = ']';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$lbracket = '<';
|
|
||||||
$rbracket = '>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$filetags_updated = $saved;
|
|
||||||
|
|
||||||
// check for new tags to be added as filetags in pconfig
|
|
||||||
$new_tags = array();
|
|
||||||
$check_new_tags = explode(",",file_tag_file_to_list($file_new,$type));
|
|
||||||
|
|
||||||
foreach($check_new_tags as $tag) {
|
|
||||||
if(! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket))
|
|
||||||
$new_tags[] = $tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
$filetags_updated .= file_tag_list_to_file(implode(",",$new_tags),$type);
|
|
||||||
|
|
||||||
// check for deleted tags to be removed from filetags in pconfig
|
|
||||||
$deleted_tags = array();
|
|
||||||
$check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type));
|
|
||||||
|
|
||||||
foreach($check_deleted_tags as $tag) {
|
|
||||||
if(! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket))
|
|
||||||
$deleted_tags[] = $tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($deleted_tags as $key => $tag) {
|
|
||||||
$r = q("select file from item where uid = %d " . file_tag_file_query('item',$tag,$type),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
|
|
||||||
if(count($r)) {
|
|
||||||
unset($deleted_tags[$key]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$filetags_updated = str_replace($lbracket . file_tag_encode($tag) . $rbracket,'',$filetags_updated);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($saved != $filetags_updated) {
|
|
||||||
set_pconfig($uid,'system','filetags', $filetags_updated);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(strlen($file_new)) {
|
|
||||||
set_pconfig($uid,'system','filetags', $file_new);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function store_item_tag($uid,$iid,$otype,$type,$term,$url = '') {
|
|
||||||
if(! $term)
|
|
||||||
return false;
|
|
||||||
$r = q("select * from term
|
|
||||||
where uid = %d and oid = %d and otype = %d and type = %d
|
|
||||||
and term = '%s' and url = '%s' ",
|
|
||||||
intval($uid),
|
|
||||||
intval($iid),
|
|
||||||
intval($otype),
|
|
||||||
intval($type),
|
|
||||||
dbesc($term),
|
|
||||||
dbesc($url)
|
|
||||||
);
|
|
||||||
if($r)
|
|
||||||
return false;
|
|
||||||
$r = q("insert into term (uid, oid, otype, type, term, url)
|
|
||||||
values( %d, %d, %d, %d, '%s', '%s') ",
|
|
||||||
intval($uid),
|
|
||||||
intval($iid),
|
|
||||||
intval($otype),
|
|
||||||
intval($type),
|
|
||||||
dbesc($term),
|
|
||||||
dbesc($url)
|
|
||||||
);
|
|
||||||
return $r;
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_terms_oftype($arr,$type) {
|
|
||||||
$ret = array();
|
|
||||||
if(! (is_array($arr) && count($arr)))
|
|
||||||
return $ret;
|
|
||||||
|
|
||||||
if(! is_array($type))
|
|
||||||
$type = array($type);
|
|
||||||
|
|
||||||
foreach($type as $t)
|
|
||||||
foreach($arr as $x)
|
|
||||||
if($x['type'] == $t)
|
|
||||||
$ret[] = $x;
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
function format_term_for_display($term) {
|
|
||||||
$s = '';
|
|
||||||
if($term['type'] == TERM_HASHTAG)
|
|
||||||
$s .= '#';
|
|
||||||
elseif($term['type'] == TERM_MENTION)
|
|
||||||
$s .= '@';
|
|
||||||
|
|
||||||
if($term['url']) $s .= '<a target="extlink" href="' . $term['url'] . '">' . htmlspecialchars($term['term']) . '</a>';
|
|
||||||
else $s .= htmlspecialchars($term['term']);
|
|
||||||
return $s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function file_tag_save_file($uid,$item,$file) {
|
|
||||||
$result = false;
|
|
||||||
if(! intval($uid))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
$r = q("select file from item where id = %d and uid = %d limit 1",
|
|
||||||
intval($item),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
if($r) {
|
|
||||||
if(! stristr($r[0]['file'],'[' . file_tag_encode($file) . ']'))
|
|
||||||
q("update item set file = '%s' where id = %d and uid = %d limit 1",
|
|
||||||
dbesc($r[0]['file'] . '[' . file_tag_encode($file) . ']'),
|
|
||||||
intval($item),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
$saved = get_pconfig($uid,'system','filetags');
|
|
||||||
if((! strlen($saved)) || (! stristr($saved,'[' . file_tag_encode($file) . ']')))
|
|
||||||
set_pconfig($uid,'system','filetags',$saved . '[' . file_tag_encode($file) . ']');
|
|
||||||
info( t('Item filed') );
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function file_tag_unsave_file($uid,$item,$file,$cat = false) {
|
|
||||||
$result = false;
|
|
||||||
if(! intval($uid))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if($cat == true)
|
|
||||||
$pattern = '<' . file_tag_encode($file) . '>' ;
|
|
||||||
else
|
|
||||||
$pattern = '[' . file_tag_encode($file) . ']' ;
|
|
||||||
|
|
||||||
|
|
||||||
$r = q("select file from item where id = %d and uid = %d limit 1",
|
|
||||||
intval($item),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
if(! $r)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
q("update item set file = '%s' where id = %d and uid = %d limit 1",
|
|
||||||
dbesc(str_replace($pattern,'',$r[0]['file'])),
|
|
||||||
intval($item),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
|
|
||||||
$r = q("select file from item where uid = %d and deleted = 0 " . file_tag_file_query('item',$file,(($cat) ? 'category' : 'file')),
|
|
||||||
intval($uid)
|
|
||||||
);
|
|
||||||
|
|
||||||
if(! $r) {
|
|
||||||
$saved = get_pconfig($uid,'system','filetags');
|
|
||||||
set_pconfig($uid,'system','filetags',str_replace($pattern,'',$saved));
|
|
||||||
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalise_openid($s) {
|
function normalise_openid($s) {
|
||||||
return trim(str_replace(array('http://','https://'),array('',''),$s),'/');
|
return trim(str_replace(array('http://','https://'),array('',''),$s),'/');
|
||||||
|
|
|
@ -85,7 +85,7 @@ function editpost_content(&$a) {
|
||||||
'$jotnets' => $jotnets,
|
'$jotnets' => $jotnets,
|
||||||
'$title' => htmlspecialchars($itm[0]['title']),
|
'$title' => htmlspecialchars($itm[0]['title']),
|
||||||
'$placeholdertitle' => t('Set title'),
|
'$placeholdertitle' => t('Set title'),
|
||||||
'$category' => file_tag_file_to_list($itm[0]['file'], 'category'),
|
'$category' => '', // FIXME
|
||||||
'$placeholdercategory' => t('Categories (comma-separated list)'),
|
'$placeholdercategory' => t('Categories (comma-separated list)'),
|
||||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||||
'$lockstate' => $lockstate,
|
'$lockstate' => $lockstate,
|
||||||
|
|
Loading…
Reference in a new issue