Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 990

Přidáno uživatelem Michal Kliment před více než 13 roky(ů)

Dalsi sada zmen ve vetvi vyhledovani a filtrovani.

Zobrazit rozdíly:

freenetis/branches/search_filters/media/css/style.css
}
.search_result_title {
}
#whisper {
display: none;
background-color: white;
border: 1px solid #CCC;
width: 224px;
height: 300px;
position: absolute;
top: 120px;
left: 10px;
overflow: auto;
}
#whisper a:hover {
background-color: lightGoldenrodYellow;
border: 1px solid orange;
}
.whisper_search_result {
padding: 5px;
display: block;
text-decoration: none;
border: 1px solid #CCC;
}
#search_submit {
width: 14px;
}
.ajax-loader-big {
padding-left: 60px;
padding-top: 80px;
}
.search {
margin-bottom: 10px;
}
freenetis/branches/search_filters/application/i18n/cs_CZ/texts.php
'next update' => 'příští aktualizace',
'nineth-degree certified engineers' => 'Certifikování technici devátého stupně',
'no' => 'ne',
'no items found' => 'Nebyly nalezeny žádné položky.',
'no redirection is possible to set for this ip address' => 'Žádné přesměrování není možné nastavit pro tuto IP adresu.',
'no sms message has been added' => 'Žádná SMS zpráva nebyla přidána.',
'no member fee set!' => 'Členský příspěvek nenastaven!',
freenetis/branches/search_filters/application/models/search.php
'model' => 'member'
),
array(
'method' => 'member_id',
'model' => 'member'
),
array(
'method' => 'member_variable_symbol',
'model' => 'member'
),
array(
'method' => 'member_comment',
'model' => 'member'
),
......
'model' => 'member'
),
array(
'method' => 'member_street',
'model' => 'member'
),
array(
'method' => 'user_name',
'model' => 'user',
),
array(
'method' => 'user_surname',
'method' => 'user_login',
'model' => 'user',
),
array(
'method' => 'town_names',
'method' => 'user_contact',
'model' => 'user',
),
array(
'method' => 'town_name',
'model' => 'town'
),
array(
'method' => 'device_name',
'model' => 'device'
),
array(
'method' => 'device_mac',
'model' => 'device'
),
array(
'method' => 'device_ip_address',
'model' => 'device'
),
array(
'method' => 'subnet_name',
'model' => 'subnet'
),
array(
'method' => 'subnet_address',
'model' => 'subnet'
)
);
public function member_name ($keyword)
{
return $this->db->query("
SELECT m.id, m.name AS value, CONCAT(IFNULL(t.translated_term,e.value),' ',m.name) AS return_value, 'members/show/' AS link FROM members m
SELECT m.id, m.name AS value,
CONCAT('ID ',m.id,', ',s.street,' ',ap.street_number,', ',tw.town,IF(tw.quarter IS NOT NULL,CONCAT('-',tw.quarter),'')) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE m.name LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function member_id ($keyword)
{
return $this->db->query("
SELECT m.id, m.id AS value,
CONCAT('ID ',m.id,', ',s.street,' ',ap.street_number,', ',tw.town,IF(tw.quarter IS NOT NULL,CONCAT('-',tw.quarter),'')) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE m.id LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function member_variable_symbol ($keyword)
{
return $this->db->query("
SELECT m.id, m.variable_symbol AS value,
CONCAT('".url_lang::lang('texts.Variable symbol').": ', m.variable_symbol) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE m.variable_symbol LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function member_comment ($keyword)
{
return $this->db->query("
SELECT m.id, m.comment AS value, CONCAT(IFNULL(t.translated_term,e.value),' ',m.name) AS return_value, 'members/show/' AS link FROM members m
SELECT m.id, m.comment AS value,
CONCAT('".url_lang::lang('texts.Comment').": ',m.comment) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE m.comment LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
......
public function member_town ($keyword)
{
return $this->db->query("
SELECT m.id, CONCAT(town, ' ',IFNULL(quarter,'')) AS value, CONCAT(IFNULL(t.translated_term,e.value),' ',m.name) AS return_value, 'members/show/' AS link FROM members m
SELECT m.id,
CONCAT(town, ' ',IFNULL(quarter,'')) AS value,
CONCAT('ID ',m.id,', ',s.street,' ',ap.street_number,', ',tw.town,IF(tw.quarter IS NOT NULL,CONCAT('-',tw.quarter),'')) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN towns ON ap.town_id = towns.id
WHERE CONCAT(town, ' ',IFNULL(quarter,'')) LIKE '%$keyword%' COLLATE utf8_general_ci
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE CONCAT(tw.town, ' ',IFNULL(tw.quarter,'')) LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function member_street ($keyword)
{
return $this->db->query("
SELECT m.id,
CONCAT(s.street, ' ',ap.street_number) AS value,
CONCAT('ID ',m.id,', ',s.street,' ',ap.street_number,', ',tw.town,IF(tw.quarter IS NOT NULL,CONCAT('-',tw.quarter),'')) AS `desc`,
CONCAT(IFNULL(t.translated_term,e.value),' ',m.name,IF(mf.id IS NOT NULL,' (".url_lang::lang('texts.I').")','')) AS return_value,
'members/show/' AS link FROM members m
JOIN enum_types e ON m.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
JOIN address_points ap ON m.address_point_id = ap.id
JOIN streets s ON ap.street_id = s.id
JOIN towns tw ON ap.town_id = tw.id
LEFT JOIN membership_interrupts mi ON m.id = mi.member_id
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id AND (mf.activation_date < CURDATE() AND mf.deactivation_date > CURDATE())
WHERE CONCAT(s.street, ' ',ap.street_number) LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function user_name ($keyword)
{
return $this->db->query("
SELECT u.id, u.name AS value, CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
FROM users u WHERE u.name LIKE '%$keyword%' COLLATE utf8_general_ci
SELECT u.id,
CONCAT(u.name,' ',u.surname) AS value,
CONCAT('".url_lang::lang('texts.Username').":',u.login) AS `desc`,
CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
FROM users u WHERE CONCAT(u.name,' ',u.surname) LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function user_login ($keyword)
{
return $this->db->query("
SELECT u.id,
u.login AS value,
CONCAT('".url_lang::lang('texts.Username').":',u.login) AS `desc`,
CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
FROM users u WHERE u.login LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function user_surname ($keyword)
{
return $this->db->query("
SELECT u.id, u.surname AS value, CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
SELECT u.id,
u.surname AS value,
CONCAT('".url_lang::lang('texts.Username').":',u.login) AS `desc`,
CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
FROM users u WHERE u.surname LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function town_names ($keyword)
public function user_contact($keyword)
{
return $this->db->query("
SELECT t.id, CONCAT(t.town, ' ',t.quarter) AS value,
CONCAT('".url_lang::lang('texts.Town')." ',t.town,IF(t.quarter IS NOT NULL,CONCAT('-',t.quarter),''), ', ".url_lang::lang('texts.ZIP code')." ',t.zip_code) AS return_value,
SELECT u.id,
c.value AS value,
CONCAT(IFNULL(t.translated_term,e.value),': ',c.value) AS `desc`,
CONCAT('".url_lang::lang('texts.User')." ', u.name, ' ',u.surname) AS return_value, 'users/show/' AS link
FROM users u
LEFT JOIN users_contacts uc ON u.id = uc.user_id
LEFT JOIN contacts c ON uc.contact_id = c.id
LEFT JOIN enum_types e ON c.type = e.id
LEFT JOIN translations t ON e.value LIKE t.original_term AND t.lang = 'cs'
WHERE c.value LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function town_name ($keyword)
{
return $this->db->query("
SELECT t.id, CONCAT(t.town, ' ',t.quarter) AS value, t.id AS `desc`,
CONCAT('".url_lang::lang('texts.ZIP code')." ',t.zip_code) AS `desc`,
CONCAT('".url_lang::lang('texts.Town')." ',t.town,IF(t.quarter IS NOT NULL AND t.quarter <> '',CONCAT('-',t.quarter),'')) AS return_value,
'towns/show/' AS link
FROM towns t
WHERE CONCAT(t.town, ' ',t.quarter) LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function device_name ($keyword)
{
return $this->db->query("
SELECT d.id,
d.name AS value,
CONCAT('".url_lang::lang('texts.User')." ',u.name,' ',u.surname) AS `desc`,
CONCAT('".url_lang::lang('texts.Device')." ', d.name) AS return_value,
'devices/show/' AS link
FROM devices d
JOIN users u ON d.user_id = u.id
WHERE d.name LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function device_mac ($keyword)
{
return $this->db->query("
SELECT d.id,
ic.mac AS value,
CONCAT('".url_lang::lang('texts.MAC address').": ', ic.mac) AS `desc`,
CONCAT('".url_lang::lang('texts.Device')." ',d.name) AS return_value,
'devices/show/' AS link
FROM devices d
JOIN ifaces ic ON ic.device_id = d.id
WHERE ic.mac LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function device_ip_address ($keyword)
{
return $this->db->query("
SELECT d.id,
IFNULL(ip1.ip_address,ip2.ip_address) AS value,
CONCAT('".url_lang::lang('texts.IP address').": ', IFNULL(ip1.ip_address,ip2.ip_address)) AS `desc`,
CONCAT('".url_lang::lang('texts.Device')." ',d.name) AS return_value,
'devices/show/' AS link
FROM devices d
JOIN ifaces ic ON ic.device_id = d.id
LEFT JOIN ip_addresses ip1 ON ip1.iface_id = ic.id
LEFT JOIN vlan_ifaces vi ON vi.iface_id = ic.id
LEFT JOIN ip_addresses ip2 ON ip2.vlan_iface_id = vi.id
WHERE ip1.ip_address LIKE '%$keyword%' COLLATE utf8_general_ci OR ip2.ip_address LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function subnet_name ($keyword)
{
return $this->db->query("
SELECT s.id,
s.name AS value,
CONCAT('".url_lang::lang('texts.Address').": ',s.network_address,'/',32-log2((~inet_aton(s.netmask) & 0xffffffff) + 1)) AS `desc`,
CONCAT('".url_lang::lang('texts.Subnet')." ',s.name) AS return_value,
'subnets/show/' AS link
FROM subnets s
WHERE s.name LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
public function subnet_address ($keyword)
{
return $this->db->query("
SELECT s.id,
CONCAT(s.network_address,'/',32-log2((~inet_aton(s.netmask) & 0xffffffff) + 1)) AS value,
CONCAT('".url_lang::lang('texts.Address').": ',s.network_address,'/',32-log2((~inet_aton(s.netmask) & 0xffffffff) + 1)) AS `desc`,
CONCAT('".url_lang::lang('texts.Subnet')." ',s.name) AS return_value,
'subnets/show/' AS link
FROM subnets s
WHERE CONCAT(s.network_address,'/',32-log2((~inet_aton(s.netmask) & 0xffffffff) + 1)) LIKE '%$keyword%' COLLATE utf8_general_ci
");
}
}
?>
freenetis/branches/search_filters/application/controllers/search.php
class Search_Controller extends Controller
{
private $results = array();
public function index()
{
url::redirect (url_lang::base().'search/simple/'.$this->input->get('keyword'));
}
public function simple ($keyword = NULL)
private function search ($keyword = NULL)
{
//$profiler = new Profiler();
$keywords = explode(" ", $keyword);
$keywords = explode(" ", trim($keyword));
$keys = array();
......
foreach (Search_Model::$searchs as $search)
{
foreach ($keys as $key)
{
{
if (isset($total_counts[$search['model']]))
$total_counts[$search['model']]++;
else
......
foreach ($result as $row)
{
$value = url::title($row->value,' ');
for ($length = mb_strlen($key); $length > mb_strlen($key)-3; $length--)
{
$offset = 0;
while ($offset + $length < mb_strlen($key))
{
$t_key = url::title(mb_substr($key, $offset, $length),' ');
echo $t_key;
/*$cursor = 0;
$t_key = url::title(mb_substr($key, $offset, $length),' ');
while (true)
{
$t_value = mb_substr($value, $cursor, mb_strlen($value));
$position = strpos ($t_value, $t_key);
echo $position." ".mb_substr($value, $cursor, mb_strlen($value))."<br />";
$cursor = $position;
}*/
$offset++;
}
}
similar_text(url::title($row->value), url::title($key), $percent);
if (isset($sums[$search['model']][$row->id]))
if (!isset($sums[$search['model']][$row->id]))
{
//$sums[$search['model']][$row->id] += similar_text($row->value, $key);
$sums[$search['model']][$row->id] += $percent;
$counts[$search['model']][$row->id]++;
}
else
{
//$sums[$search['model']][$row->id] = similar_text($row->value, $key);
$sums[$search['model']][$row->id] = $percent;
$counts[$search['model']][$row->id] = 1;
$sums[$search['model']][$row->id] = 0;
$counts[$search['model']][$row->id] = 0;
$values[$search['model']][$row->id] = $row;
}
$sums[$search['model']][$row->id] += $percent;
$counts[$search['model']][$row->id]++;
}
}
}
//echo "<pre>";
//print_r ($counts);
$result_sums = array();
$result_counts = array();
$results = array();
foreach ($sums as $model => $model_sums)
{
foreach ($model_sums as $id => $sum)
{
$result_sums[] = $sum;
$result_sums[] = $sum / $total_counts[$model];
$result_counts[] = $counts[$model][$id] / $total_counts[$model];
$results[] = $values[$model][$id];
$this->results[] = $values[$model][$id];
}
}
array_multisort ($result_sums, SORT_DESC, $result_counts, SORT_DESC, $results, SORT_DESC);
array_multisort ($result_sums, SORT_DESC, $result_counts, SORT_DESC, $this->results, SORT_DESC);
/*foreach ($keys as $i => $key)
$keys[$i] = '/('.trim($key).')/iu';
foreach ($results as $x => $result)
/*foreach ($this->results as $x => $result)
{
$results[$x]->return_value = preg_replace($keys, '<b>\1</b>', $result->return_value);
echo "$result_sums[$x] $result_counts[$x] $result->return_value<br />";
}*/
}
public function simple ($keyword)
{
$profiler = new Profiler();
$this->search($keyword);
$view = new View('main');
$view->title = $keyword;
$view->content = new View('search');
$view->content->results = $results;
$view->content->results = $this->results;
$view->render(TRUE);
//echo $profiler->render(TRUE);
echo $profiler->render(TRUE);
}
public function ajax ($count = 100)
{
$this->search($this->input->get('q'));
$counter = 0;
foreach ($this->results as $result)
{
$counter++;
?>
<a href="<?php echo url_lang::base().$result->link.$result->id ?>" class="whisper_search_result">
<b><?php echo $result->return_value ?></b><br />
<i><?php echo $result->desc ?></i>
</a>
<?php
if ($counter == $count)
break;
}
if (!$counter)
{
?>
<div class="whisper_search_result"><?php echo url_lang::lang('texts.No items found.') ?></div>
<?php
}
}
}
?>
freenetis/branches/search_filters/application/views/main.php
if ((history.length == 1 || history.length == 2) && document.referrer == "")
$.post("<?php echo url_lang::base()?>json/insert_path/");
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$("#keyword").keyup(function() {
delay (function (){
if ($("#keyword").val().length >=1)
{
$("#whisper").html("<img src='<?php echo url::base() ?>media/images/ajax-loader-big.gif' class='ajax-loader-big'>");
$("#whisper").show ('slow');
$.get("<?php echo url_lang::base() ?>search/ajax/", { q: $("#keyword").val() }, function (data){
$("#whisper").html (data);
});
}
else
$("#whisper").hide ('slow');
}, 200);
});
$("#keyword").click(function (){
$("#keyword").trigger("keyup");
});
$("*").bind ("click", function (e){
e.stopPropagation();
if (this.id != 'whisper' && this.id != 'keyword')
$("#whisper").hide ('slow');
});
$.validator.addMethod('ip_address', function(value) {
return value.match(/^((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])$/);
}, '<?php echo url_lang::lang('texts.Invalid IP address') ?>');
......
<?php
if ($this->session->get('user_id'))
{
echo form::open(url_lang::base().'search', array('method' => 'get'));
echo form::open(url_lang::base().'search', array('method' => 'get', 'autocomplete' => 'off', 'class' => 'search'));
echo form::input('keyword');
echo form::submit('submit', 'Send');
echo form::imagebutton('search_submit', url::base().'media/images/icons/search.gif');
echo form::close();
?>
<div id="whisper"></div>
<?php
echo new View('menu');
}
?>
freenetis/branches/search_filters/application/views/search.php
<?php foreach ($results as $result): ?>
<div class="search_result">
<?php echo html::anchor (url_lang::base().$result->link.$result->id, $result->return_value, array('class' => 'search_result_title')) ?>
<?php echo html::anchor (url_lang::base().$result->link.$result->id, $result->return_value, array('class' => 'search_result_title')) ?><br />
<i><?php echo $result->desc ?></i>
</div>
<?php endforeach ?>

Také k dispozici: Unified diff