. * */ namespace Friendica\Model; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post\Category; /** * This class handles FileTag related functions * * 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. */ class FileTag { /** * URL encode <, >, left and right brackets * * @param string $s String to be URL encoded. * * @return string The URL encoded string. */ public static function encode($s) { return str_replace(['<', '>', '[', ']'], ['%3c', '%3e', '%5b', '%5d'], $s); } /** * URL decode <, >, left and right brackets * * @param string $s The URL encoded string to be decoded * * @return string The decoded string. */ public static function decode($s) { return str_replace(['%3c', '%3e', '%5b', '%5d'], ['<', '>', '[', ']'], $s); } /** * Query files for tag * * @param string $table The table to be queired. * @param string $s The search term * @param string $type Optional file type. * * @return string Query string. */ public static function fileQuery($table, $s, $type = 'file') { if ($type == 'file') { $str = preg_quote('[' . str_replace('%', '%%', self::encode($s)) . ']'); } else { $str = preg_quote('<' . str_replace('%', '%%', self::encode($s)) . '>'); } return " AND " . (($table) ? DBA::escape($table) . '.' : '') . "file regexp '" . DBA::escape($str) . "' "; } /** * Get file tags from array * * ex. given [music,video] return