Merge remote-tracking branch 'upstream/develop' into 1512-ostatus-picture-posts
This commit is contained in:
commit
25c2e219ee
|
@ -33,6 +33,10 @@ General
|
||||||
|
|
||||||
/contacts (single contact view)
|
/contacts (single contact view)
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
* m: Status messages
|
||||||
|
* o: Profile
|
||||||
|
* t: Contacts
|
||||||
|
* d: Common friends
|
||||||
* b: Toggle Blocked status
|
* b: Toggle Blocked status
|
||||||
* i: Toggle Ignored status
|
* i: Toggle Ignored status
|
||||||
* v: Toggle Archive status
|
* v: Toggle Archive status
|
||||||
|
|
|
@ -2254,8 +2254,23 @@ function diaspora_retraction($importer,$xml) {
|
||||||
if($type === 'Person') {
|
if($type === 'Person') {
|
||||||
require_once('include/Contact.php');
|
require_once('include/Contact.php');
|
||||||
contact_remove($contact['id']);
|
contact_remove($contact['id']);
|
||||||
|
} elseif($type === 'StatusMessage') {
|
||||||
|
$guid = notags(unxmlify($xml->post_guid));
|
||||||
|
|
||||||
|
$r = q("SELECT * FROM `item` WHERE `guid` = '%s' AND `uid` = %d AND NOT `file` LIKE '%%[%%' LIMIT 1",
|
||||||
|
dbesc($guid),
|
||||||
|
intval($importer['uid'])
|
||||||
|
);
|
||||||
|
if(count($r)) {
|
||||||
|
if(link_compare($r[0]['author-link'],$contact['url'])) {
|
||||||
|
q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d",
|
||||||
|
dbesc(datetime_convert()),
|
||||||
|
intval($r[0]['id'])
|
||||||
|
);
|
||||||
|
delete_thread($r[0]['id'], $r[0]['parent-uri']);
|
||||||
}
|
}
|
||||||
elseif($type === 'Post') {
|
}
|
||||||
|
} elseif($type === 'Post') {
|
||||||
$r = q("select * from item where guid = '%s' and uid = %d and not file like '%%[%%' limit 1",
|
$r = q("select * from item where guid = '%s' and uid = %d and not file like '%%[%%' limit 1",
|
||||||
dbesc('guid'),
|
dbesc('guid'),
|
||||||
intval($importer['uid'])
|
intval($importer['uid'])
|
||||||
|
|
|
@ -1250,8 +1250,10 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
|
|
||||||
if ($notify)
|
if ($notify)
|
||||||
$guid_prefix = "";
|
$guid_prefix = "";
|
||||||
else
|
else {
|
||||||
$guid_prefix = $arr['network'];
|
$parsed = parse_url($arr["author-link"]);
|
||||||
|
$guid_prefix = hash("crc32", $parsed["host"]);
|
||||||
|
}
|
||||||
|
|
||||||
$arr['wall'] = ((x($arr,'wall')) ? intval($arr['wall']) : 0);
|
$arr['wall'] = ((x($arr,'wall')) ? intval($arr['wall']) : 0);
|
||||||
$arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $guid_prefix));
|
$arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $guid_prefix));
|
||||||
|
@ -2320,6 +2322,9 @@ function edited_timestamp_is_newer($existing, $update) {
|
||||||
function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) {
|
function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) {
|
||||||
if ($contact['network'] === NETWORK_OSTATUS) {
|
if ($contact['network'] === NETWORK_OSTATUS) {
|
||||||
if ($pass < 2) {
|
if ($pass < 2) {
|
||||||
|
// Test - remove before flight
|
||||||
|
//$tempfile = tempnam(get_temppath(), "ostatus2");
|
||||||
|
//file_put_contents($tempfile, $xml);
|
||||||
logger("Consume OStatus messages ", LOGGER_DEBUG);
|
logger("Consume OStatus messages ", LOGGER_DEBUG);
|
||||||
ostatus_import($xml,$importer,$contact, $hub);
|
ostatus_import($xml,$importer,$contact, $hub);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1310,6 +1310,14 @@ function ostatus_add_author($doc, $owner, $profile) {
|
||||||
return $author;
|
return $author;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
To-Do: Picture attachments should look like this:
|
||||||
|
|
||||||
|
<a href="https://status.pirati.ca/attachment/572819" title="https://status.pirati.ca/file/heluecht-20151202T222602-rd3u49p.gif"
|
||||||
|
class="attachment thumbnail" id="attachment-572819" rel="nofollow external">https://status.pirati.ca/attachment/572819</a>
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
function ostatus_entry($doc, $item, $owner, $toplevel = false) {
|
function ostatus_entry($doc, $item, $owner, $toplevel = false) {
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
require_once('include/socgraph.php');
|
require_once('include/socgraph.php');
|
||||||
require_once('include/Contact.php');
|
require_once('include/Contact.php');
|
||||||
require_once('include/contact_selectors.php');
|
require_once('include/contact_selectors.php');
|
||||||
|
require_once('mod/contacts.php');
|
||||||
|
|
||||||
function allfriends_content(&$a) {
|
function allfriends_content(&$a) {
|
||||||
|
|
||||||
|
@ -25,19 +26,11 @@ function allfriends_content(&$a) {
|
||||||
intval(local_user())
|
intval(local_user())
|
||||||
);
|
);
|
||||||
|
|
||||||
$vcard_widget .= replace_macros(get_markup_template("vcard-widget.tpl"),array(
|
|
||||||
'$name' => htmlentities($c[0]['name']),
|
|
||||||
'$photo' => $c[0]['photo'],
|
|
||||||
'url' => z_root() . '/contacts/' . $cid
|
|
||||||
));
|
|
||||||
|
|
||||||
if(! x($a->page,'aside'))
|
|
||||||
$a->page['aside'] = '';
|
|
||||||
$a->page['aside'] .= $vcard_widget;
|
|
||||||
|
|
||||||
if(! count($c))
|
if(! count($c))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
$a->page['aside'] = "";
|
||||||
|
profile_load($a, "", 0, get_contact_details_by_url($c[0]["url"]));
|
||||||
|
|
||||||
$r = all_friends(local_user(),$cid);
|
$r = all_friends(local_user(),$cid);
|
||||||
|
|
||||||
|
@ -86,10 +79,13 @@ function allfriends_content(&$a) {
|
||||||
$entries[] = $entry;
|
$entries[] = $entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$tab_str = contacts_tab($a, $cid, 3);
|
||||||
|
|
||||||
$tpl = get_markup_template('viewcontact_template.tpl');
|
$tpl = get_markup_template('viewcontact_template.tpl');
|
||||||
|
|
||||||
$o .= replace_macros($tpl,array(
|
$o .= replace_macros($tpl,array(
|
||||||
'$title' => sprintf( t('Friends of %s'), htmlentities($c[0]['name'])),
|
//'$title' => sprintf( t('Friends of %s'), htmlentities($c[0]['name'])),
|
||||||
|
'$tab_str' => $tab_str,
|
||||||
'$contacts' => $entries,
|
'$contacts' => $entries,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
require_once('include/socgraph.php');
|
require_once('include/socgraph.php');
|
||||||
require_once('include/Contact.php');
|
require_once('include/Contact.php');
|
||||||
require_once('include/contact_selectors.php');
|
require_once('include/contact_selectors.php');
|
||||||
|
require_once('mod/contacts.php');
|
||||||
|
|
||||||
function common_content(&$a) {
|
function common_content(&$a) {
|
||||||
|
|
||||||
|
@ -29,12 +30,12 @@ function common_content(&$a) {
|
||||||
intval($cid),
|
intval($cid),
|
||||||
intval($uid)
|
intval($uid)
|
||||||
);
|
);
|
||||||
}
|
$a->page['aside'] = "";
|
||||||
else {
|
profile_load($a, "", 0, get_contact_details_by_url($c[0]["url"]));
|
||||||
|
} else {
|
||||||
$c = q("SELECT `name`, `url`, `photo` FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
|
$c = q("SELECT `name`, `url`, `photo` FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
|
||||||
intval($uid)
|
intval($uid)
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
$vcard_widget .= replace_macros(get_markup_template("vcard-widget.tpl"),array(
|
$vcard_widget .= replace_macros(get_markup_template("vcard-widget.tpl"),array(
|
||||||
'$name' => htmlentities($c[0]['name']),
|
'$name' => htmlentities($c[0]['name']),
|
||||||
|
@ -45,6 +46,7 @@ function common_content(&$a) {
|
||||||
if(! x($a->page,'aside'))
|
if(! x($a->page,'aside'))
|
||||||
$a->page['aside'] = '';
|
$a->page['aside'] = '';
|
||||||
$a->page['aside'] .= $vcard_widget;
|
$a->page['aside'] .= $vcard_widget;
|
||||||
|
}
|
||||||
|
|
||||||
if(! count($c))
|
if(! count($c))
|
||||||
return;
|
return;
|
||||||
|
@ -127,10 +129,16 @@ function common_content(&$a) {
|
||||||
$entries[] = $entry;
|
$entries[] = $entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($cmd === 'loc' && $cid && $uid == local_user()) {
|
||||||
|
$tab_str = contacts_tab($a, $cid, 4);
|
||||||
|
} else
|
||||||
|
$title = t('Common Friends');
|
||||||
|
|
||||||
$tpl = get_markup_template('viewcontact_template.tpl');
|
$tpl = get_markup_template('viewcontact_template.tpl');
|
||||||
|
|
||||||
$o .= replace_macros($tpl,array(
|
$o .= replace_macros($tpl,array(
|
||||||
'$title' => t('Common Friends'),
|
'$title' => $title,
|
||||||
|
'$tab_str' => $tab_str,
|
||||||
'$contacts' => $entries,
|
'$contacts' => $entries,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
@ -552,16 +552,16 @@ function contacts_content(&$a) {
|
||||||
|
|
||||||
$nettype = sprintf( t('Network type: %s'),network_to_name($contact['network'], $contact["url"]));
|
$nettype = sprintf( t('Network type: %s'),network_to_name($contact['network'], $contact["url"]));
|
||||||
|
|
||||||
$common = count_common_friends(local_user(),$contact['id']);
|
//$common = count_common_friends(local_user(),$contact['id']);
|
||||||
$common_text = (($common) ? sprintf( tt('%d contact in common','%d contacts in common', $common),$common) : '');
|
//$common_text = (($common) ? sprintf( tt('%d contact in common','%d contacts in common', $common),$common) : '');
|
||||||
|
|
||||||
$polling = (($contact['network'] === NETWORK_MAIL | $contact['network'] === NETWORK_FEED) ? 'polling' : '');
|
$polling = (($contact['network'] === NETWORK_MAIL | $contact['network'] === NETWORK_FEED) ? 'polling' : '');
|
||||||
|
|
||||||
$x = count_all_friends(local_user(), $contact['id']);
|
//$x = count_all_friends(local_user(), $contact['id']);
|
||||||
$all_friends = (($x) ? t('View all contacts') : '');
|
//$all_friends = (($x) ? t('View all contacts') : '');
|
||||||
|
|
||||||
// tabs
|
// tabs
|
||||||
$tab_str = contact_tabs($a, $contact_id, 2);
|
$tab_str = contacts_tab($a, $contact_id, 2);
|
||||||
|
|
||||||
$lost_contact = (($contact['archive'] && $contact['term-date'] != '0000-00-00 00:00:00' && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
|
$lost_contact = (($contact['archive'] && $contact['term-date'] != '0000-00-00 00:00:00' && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
|
||||||
|
|
||||||
|
@ -814,7 +814,7 @@ function contacts_content(&$a) {
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
function contact_tabs($a, $contact_id, $active_tab) {
|
function contacts_tab($a, $contact_id, $active_tab) {
|
||||||
// tabs
|
// tabs
|
||||||
$tabs = array(
|
$tabs = array(
|
||||||
array(
|
array(
|
||||||
|
@ -831,41 +831,57 @@ function contact_tabs($a, $contact_id, $active_tab) {
|
||||||
'sel' => (($active_tab == 2)?'active':''),
|
'sel' => (($active_tab == 2)?'active':''),
|
||||||
'title' => t('Profile Details'),
|
'title' => t('Profile Details'),
|
||||||
'id' => 'status-tab',
|
'id' => 'status-tab',
|
||||||
'accesskey' => 'r',
|
'accesskey' => 'o',
|
||||||
),
|
)
|
||||||
array(
|
);
|
||||||
'label' => t('Repair'),
|
|
||||||
'url' => $a->get_baseurl(true) . '/crepair/' . $contact_id,
|
$x = count_all_friends(local_user(), $contact_id);
|
||||||
|
if ($x)
|
||||||
|
$tabs[] = array('label'=>t('Contacts'),
|
||||||
|
'url' => "allfriends/".$contact_id,
|
||||||
'sel' => (($active_tab == 3)?'active':''),
|
'sel' => (($active_tab == 3)?'active':''),
|
||||||
|
'title' => t('View all contacts'),
|
||||||
|
'id' => 'allfriends-tab',
|
||||||
|
'accesskey' => 't');
|
||||||
|
|
||||||
|
$common = count_common_friends(local_user(),$contact_id);
|
||||||
|
if ($common)
|
||||||
|
$tabs[] = array('label'=>t('Common Friends'),
|
||||||
|
'url' => "common/loc/".local_user()."/".$contact_id,
|
||||||
|
'sel' => (($active_tab == 4)?'active':''),
|
||||||
|
'title' => t('View all common friends'),
|
||||||
|
'id' => 'common-loc-tab',
|
||||||
|
'accesskey' => 'd');
|
||||||
|
|
||||||
|
$tabs[] = array('label' => t('Repair'),
|
||||||
|
'url' => $a->get_baseurl(true) . '/crepair/' . $contact_id,
|
||||||
|
'sel' => (($active_tab == 5)?'active':''),
|
||||||
'title' => t('Advanced Contact Settings'),
|
'title' => t('Advanced Contact Settings'),
|
||||||
'id' => 'repair-tab',
|
'id' => 'repair-tab',
|
||||||
'accesskey' => 'r',
|
'accesskey' => 'r');
|
||||||
),
|
|
||||||
array(
|
|
||||||
'label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
|
$tabs[] = array('label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
|
||||||
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
|
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
|
||||||
'sel' => '',
|
'sel' => '',
|
||||||
'title' => t('Toggle Blocked status'),
|
'title' => t('Toggle Blocked status'),
|
||||||
'id' => 'toggle-block-tab',
|
'id' => 'toggle-block-tab',
|
||||||
'accesskey' => 'b',
|
'accesskey' => 'b');
|
||||||
),
|
|
||||||
array(
|
$tabs[] = array('label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
|
||||||
'label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
|
|
||||||
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
|
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
|
||||||
'sel' => '',
|
'sel' => '',
|
||||||
'title' => t('Toggle Ignored status'),
|
'title' => t('Toggle Ignored status'),
|
||||||
'id' => 'toggle-ignore-tab',
|
'id' => 'toggle-ignore-tab',
|
||||||
'accesskey' => 'i',
|
'accesskey' => 'i');
|
||||||
),
|
|
||||||
array(
|
$tabs[] = array('label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
|
||||||
'label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
|
|
||||||
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
|
'url' => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
|
||||||
'sel' => '',
|
'sel' => '',
|
||||||
'title' => t('Toggle Archive status'),
|
'title' => t('Toggle Archive status'),
|
||||||
'id' => 'toggle-archive-tab',
|
'id' => 'toggle-archive-tab',
|
||||||
'accesskey' => 'v',
|
'accesskey' => 'v');
|
||||||
)
|
|
||||||
);
|
|
||||||
$tab_tpl = get_markup_template('common_tabs.tpl');
|
$tab_tpl = get_markup_template('common_tabs.tpl');
|
||||||
$tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
|
$tab_str = replace_macros($tab_tpl, array('$tabs' => $tabs));
|
||||||
|
|
||||||
|
@ -885,8 +901,10 @@ function contact_posts($a, $contact_id) {
|
||||||
|
|
||||||
if(get_config('system', 'old_pager')) {
|
if(get_config('system', 'old_pager')) {
|
||||||
$r = q("SELECT COUNT(*) AS `total` FROM `item`
|
$r = q("SELECT COUNT(*) AS `total` FROM `item`
|
||||||
WHERE `item`.`uid` = %d AND (`author-link` = '%s')",
|
WHERE `item`.`uid` = %d AND `author-link` IN ('%s', '%s')",
|
||||||
intval(local_user()), dbesc($contact["url"]));
|
intval(local_user()),
|
||||||
|
dbesc(normalise_link($contact["url"])),
|
||||||
|
dbesc(str_replace("http://", "https://", $contact["url"])));
|
||||||
|
|
||||||
$a->set_pager_total($r[0]['total']);
|
$a->set_pager_total($r[0]['total']);
|
||||||
}
|
}
|
||||||
|
@ -896,16 +914,17 @@ function contact_posts($a, $contact_id) {
|
||||||
`owner-link` AS `url`, `owner-avatar` AS `thumb`
|
`owner-link` AS `url`, `owner-avatar` AS `thumb`
|
||||||
FROM `item` FORCE INDEX (uid_contactid_created)
|
FROM `item` FORCE INDEX (uid_contactid_created)
|
||||||
WHERE `item`.`uid` = %d AND `contact-id` = %d
|
WHERE `item`.`uid` = %d AND `contact-id` = %d
|
||||||
AND (`author-link` = '%s')
|
AND `author-link` IN ('%s', '%s')
|
||||||
ORDER BY `item`.`created` DESC LIMIT %d, %d",
|
ORDER BY `item`.`created` DESC LIMIT %d, %d",
|
||||||
intval(local_user()),
|
intval(local_user()),
|
||||||
intval($contact_id),
|
intval($contact_id),
|
||||||
dbesc($contact["url"]),
|
dbesc(normalise_link($contact["url"])),
|
||||||
|
dbesc(str_replace("http://", "https://", $contact["url"])),
|
||||||
intval($a->pager['start']),
|
intval($a->pager['start']),
|
||||||
intval($a->pager['itemspage'])
|
intval($a->pager['itemspage'])
|
||||||
);
|
);
|
||||||
|
|
||||||
$tab_str = contact_tabs($a, $contact_id, 1);
|
$tab_str = contacts_tab($a, $contact_id, 1);
|
||||||
|
|
||||||
$o .= $tab_str;
|
$o .= $tab_str;
|
||||||
|
|
||||||
|
|
|
@ -24,24 +24,8 @@ function crepair_init(&$a) {
|
||||||
|
|
||||||
if($contact_id) {
|
if($contact_id) {
|
||||||
$a->data['contact'] = $r[0];
|
$a->data['contact'] = $r[0];
|
||||||
|
$contact = $r[0];
|
||||||
if (($a->data['contact']['network'] != "") AND ($a->data['contact']['network'] != NETWORK_DFRN)) {
|
profile_load($a, "", 0, get_contact_details_by_url($contact["url"]));
|
||||||
$networkname = format_network_name($a->data['contact']['network'],$a->data['contact']['url']);
|
|
||||||
} else
|
|
||||||
$networkname = '';
|
|
||||||
|
|
||||||
$vcard_widget = replace_macros(get_markup_template("vcard-widget.tpl"),array(
|
|
||||||
'$name' => htmlentities($a->data['contact']['name']),
|
|
||||||
'$photo' => $a->data['contact']['photo'],
|
|
||||||
'$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? z_root()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'],
|
|
||||||
'$addr' => (($a->data['contact']['addr'] != "") ? ($a->data['contact']['addr']) : ""),
|
|
||||||
'$network_name' => $networkname,
|
|
||||||
'$network' => t('Network:'),
|
|
||||||
'account_type' => (($a->data['contact']['forum'] || $a->data['contact']['prv']) ? t('Forum') : '')
|
|
||||||
));
|
|
||||||
|
|
||||||
$a->page['aside'] .= $vcard_widget;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +154,7 @@ function crepair_content(&$a) {
|
||||||
|
|
||||||
$update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DSPR, NETWORK_OSTATUS));
|
$update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DSPR, NETWORK_OSTATUS));
|
||||||
|
|
||||||
$tab_str = contact_tabs($a, $contact['id'], 3);
|
$tab_str = contacts_tab($a, $contact['id'], 5);
|
||||||
|
|
||||||
|
|
||||||
$tpl = get_markup_template('crepair.tpl');
|
$tpl = get_markup_template('crepair.tpl');
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<h2>{{$header}}</h2>
|
{{if $header}}<h2>{{$header}}</h2>{{/if}}
|
||||||
|
|
||||||
<div id="contact-edit-wrapper" >
|
<div id="contact-edit-wrapper" >
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="section-title-wrapper">
|
<div class="section-title-wrapper">
|
||||||
<h2>{{$title}}</h2>
|
{{if $title}}<h2>{{$title}}</h2>{{/if}}
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
|
|
||||||
{{include file="section_title.tpl"}}
|
{{include file="section_title.tpl"}}
|
||||||
|
|
||||||
|
{{$tab_str}}
|
||||||
|
|
||||||
<div id="viewcontact_wrapper-{{$id}}">
|
<div id="viewcontact_wrapper-{{$id}}">
|
||||||
{{foreach $contacts as $contact}}
|
{{foreach $contacts as $contact}}
|
||||||
{{include file="contact_template.tpl"}}
|
{{include file="contact_template.tpl"}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="clear"></div>
|
||||||
<div id="view-contact-end"></div>
|
<div id="view-contact-end"></div>
|
||||||
|
|
||||||
{{$paginate}}
|
{{$paginate}}
|
||||||
|
|
Loading…
Reference in a new issue