Ejemplo n.º 1
0
    /**
     * Add like condition to where clause for column which can be translated with language overlay.
     * @param DataMapper $object model object which will be using this function.
     * @param string $column column name in table.
     * @param string $value search text.
     * @param string $wrap wraping constant, can be 'both', 'before', 'after'.
     * @param bool $strip_html if set to TRUE it will strip html tags from column.
     * @param string $lang_idiom language idiom, default is NULL = current language idion set in language object.
     * @return DataMapper returns object for method chaining.
     */
    public function like_with_overlay($object, $column, $value, $wrap = 'both', $strip_html = FALSE, $lang_idiom = NULL)
    {
        $CI =& get_instance();
        if (is_null($lang_idiom)) {
            $lang_idiom = $CI->lang->get_current_idiom();
        }
        $like = $wrap == 'before' ? '%' . $object->db->escape_like_str($value) : ($wrap == 'after' ? $object->db->escape_like_str($value) . '%' : '%' . $object->db->escape_like_str($value) . '%');
        $subquery = ($strip_html === TRUE ? 'fnStripTags(' : '') . '(SELECT `text` AS `like_text`
FROM `lang_overlays`
WHERE `table` = "' . $object->db->escape_str($object->table) . '" AND `table_id` = ' . $object->db->protect_identifiers($object->table) . '.`id` AND `column` = "' . $object->db->escape_str($column) . '" AND `idiom` = "' . $object->db->escape_str($lang_idiom) . '"
UNION
SELECT ' . $object->db->protect_identifiers($object->table) . '.' . $object->db->protect_identifiers($column) . ' AS `like_text`
LIMIT 1)' . ($strip_html === TRUE ? ') COLLATE ' . $object->db->dbcollat : '') . ' LIKE "' . $like . '"';
        $object->where($subquery);
        return $object;
    }