Skip to content

Commit a193bbc

Browse files
committed
Add vCard block.
1 parent da7b134 commit a193bbc

File tree

7 files changed

+197
-3
lines changed

7 files changed

+197
-3
lines changed

blocks/blocks.php

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,136 @@ function b_qr_mecard_edit($options) {
183183
return $form;
184184
}
185185

186+
// vCard : lower device compatibility than MECARD, but requested
187+
188+
function b_qr_vcard_show($options) {
189+
for($i=0;$i<28;$i++) {
190+
$options[$i]=mb_decode_numericentity($options[$i], array(0x0, 0x2FFFF, 0, 0xFFFF), 'UTF-8');
191+
}
192+
$crlf="\r\n";
193+
$vcard ="BEGIN:VCARDVERSION:3.0REV:".date('c').$crlf;
194+
$vcard.="FN:{$options[0]}".$crlf;
195+
$vcard.="N:{$options[1]};{$options[2]};{$options[3]};{$options[4]};{$options[5]}".$crlf;
196+
if(!empty($options[6])) $vcard.="ORG:{$options[6]}".$crlf;
197+
if(!empty($options[7])) $vcard.="TITLE:{$options[7]}".$crlf;
198+
if(!empty($options[9]) || !empty($options[10]) || !empty($options[11]) || !empty($options[12]) ||
199+
!empty($options[13]) || !empty($options[14]) || !empty($options[15])) {
200+
$vcard.="ADR;TYPE={$options[8]}:{$options[9]};{$options[10]};{$options[11]};";
201+
$vcard.="{$options[12]};{$options[13]};{$options[14]};{$options[15]}".$crlf;
202+
}
203+
if(!empty($options[16])) $vcard.="EMAIL;TYPE=INTERNET,PREF:{$options[16]}".$crlf;
204+
if(!empty($options[17])) $vcard.="EMAIL;TYPE=INTERNET:{$options[17]}".$crlf;
205+
if(!empty($options[18])) $vcard.="TEL;TYPE={$options[19]},PREF:{$options[18]}".$crlf;
206+
if(!empty($options[20])) $vcard.="TEL;TYPE={$options[21]}:{$options[20]}".$crlf;
207+
if(!empty($options[22])) $vcard.="TEL;TYPE={$options[23]}:{$options[22]}".$crlf;
208+
if(!empty($options[24])) $vcard.="URL:{$options[24]}".$crlf;
209+
if(!empty($options[25])) $vcard.="NOTE:{$options[25]}".$crlf;
210+
if(!empty($options[26])) $vcard.="{$options[26]}".$crlf;
211+
if(!empty($options[27])) $vcard.="{$options[27]}".$crlf;
212+
$vcard.="TZ:".date('O').$crlf;
213+
$vcard.="END:VCARD".$crlf;
214+
215+
$dir = basename( dirname ( dirname( __FILE__ ) ) ) ;
216+
217+
$block['qrcode']='<img src="'.XOOPS_URL.'/modules/'.$dir.'/getqrcode.php?qrdata='.urlencode($vcard).'" alt="'.$options[28].'" title="'.$options[28].'">';
218+
$block['qrdata']=urlencode($vcard);
219+
$block['qrscript']= XOOPS_URL.'/modules/'.$dir.'/getqrcode.php?qrdata=';
220+
// $block['url']=$oururl;
221+
$block['alt']=$options[28];
222+
$block['imagedir']= XOOPS_URL.'/modules/'.$dir.'/images';
223+
$block['usepopup']= $options[29]?true:false;
224+
$block['mouseover']= $options[29]>1;
225+
$block['popupprompt']= $options[30];
226+
$block['popupclose']=_MB_QR_SHOW_AS_POPUP_CLOSE;
227+
trigger_error(print_r($block,1));
228+
229+
return $block;
230+
}
231+
232+
function b_qr_formatvcard($tag,$value) {
233+
$carditem='';
234+
$value=mb_decode_numericentity($value, array(0x0, 0x2FFFF, 0, 0xFFFF), 'UTF-8');
235+
// escape according to docomo docs
236+
$value=str_replace("\\","\\\\",$value);
237+
$value=str_replace(":","\\:",$value);
238+
$value=str_replace(";","\\;",$value);
239+
if($tag=='N' || $tag=='ADR' || $tag=='KANA') $value=str_replace(",","\\,",$value);
240+
if(!empty($value)) $carditem=$tag.':'.$value.';';
241+
return $carditem;
242+
}
243+
244+
function b_qr_vcard_add($prompt,$op,$value,$br=true,$type='')
245+
{
246+
$form=$prompt;
247+
$l=$br?'<br />':'';
248+
switch(strtoupper($type)) {
249+
case 'ADR':
250+
$form .= ": <select id='options[{$op}]' name='options[{$op}]'>";
251+
$form .= '<option value="WORK"'.($value=="WORK"?' selected':'').'>'._MB_QR_VCARD_TYPE_WORK.'</option>';
252+
$form .= '<option value="HOME"'.($value=="HOME"?' selected':'').'>'._MB_QR_VCARD_TYPE_HOME.'</option>';
253+
$form .= '</select>';
254+
break;
255+
case 'TEL':
256+
$form .= ": <select id='options[{$op}]' name='options[{$op}]'>";
257+
$form .= '<option value="CELL,VOICE"'.($value=="CELL,VOICE"?' selected':'').'>'._MB_QR_VCARD_TYPE_CELL.'</option>';
258+
$form .= '<option value="WORK,VOICE"'.($value=="WORK,VOICE"?' selected':'').'>'._MB_QR_VCARD_TYPE_WORK.'</option>';
259+
$form .= '<option value="HOME,VOICE"'.($value=="HOME,VOICE"?' selected':'').'>'._MB_QR_VCARD_TYPE_HOME.'</option>';
260+
$form .= '<option value="FAX"'.($value=="FAX"?' selected':'').'>'._MB_QR_VCARD_TYPE_FAX.'</option>';
261+
$form .= '</select>';
262+
break;
263+
default:
264+
case '':
265+
$form .= ": <input type='text' value='{$value}' id='options[{$op}]' name='options[{$op}]' />";
266+
break;
267+
}
268+
return $form.$l;
269+
}
270+
271+
function b_qr_vcard_edit($options) {
272+
$form = _MB_QR_VCARD_STRING."<br />";
273+
274+
$form .= b_qr_vcard_add(_MB_QR_VCARD_FN,'0',$options[0]);
275+
$form .= b_qr_vcard_add(_MB_QR_VCARD_N_FAMILY,'1',$options[1]);
276+
$form .= b_qr_vcard_add(_MB_QR_VCARD_N_GIVEN,'2',$options[2]);
277+
$form .= b_qr_vcard_add(_MB_QR_VCARD_N_ADDITIONAL,'3',$options[3]);
278+
$form .= b_qr_vcard_add(_MB_QR_VCARD_N_PREFIX,'4',$options[4]);
279+
$form .= b_qr_vcard_add(_MB_QR_VCARD_N_SUFFIX,'5',$options[5]);
280+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ORG,'6',$options[6]);
281+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TITLE,'7',$options[7]);
282+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_TYPE,'8',$options[8],1,'ADR');
283+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_POBOX,'9',$options[9]);
284+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_EXTENDED,'10',$options[10]);
285+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_STREET,'11',$options[11]);
286+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_LOCALITY,'12',$options[12]);
287+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_REGION,'13',$options[13]);
288+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_POSTCODE,'14',$options[14]);
289+
$form .= b_qr_vcard_add(_MB_QR_VCARD_ADR_COUNTRY,'15',$options[15]);
290+
$form .= b_qr_vcard_add(_MB_QR_VCARD_EMAIL_PREF,'16',$options[16]);
291+
$form .= b_qr_vcard_add(_MB_QR_VCARD_EMAIL,'17',$options[17]);
292+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL_PREF,'18',$options[18],0);
293+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL_TYPE,'19',$options[19],1,'TEL');
294+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL,'20',$options[20],0);
295+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL_TYPE,'21',$options[21],1,'TEL');
296+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL,'22',$options[22],0);
297+
$form .= b_qr_vcard_add(_MB_QR_VCARD_TEL_TYPE,'23',$options[23],1,'TEL');
298+
$form .= b_qr_vcard_add(_MB_QR_VCARD_URL,'24',$options[24]);
299+
$form .= b_qr_vcard_add(_MB_QR_VCARD_NOTE,'25',$options[25]);
300+
$form .= b_qr_vcard_add(_MB_QR_VCARD_RAW,'26',$options[26]);
301+
$form .= b_qr_vcard_add(_MB_QR_VCARD_RAW,'27',$options[27]);
302+
303+
$form .= _MB_QR_VCARD_ALT.": <input type='text' value='".$options[28]."'id='options[28]' name='options[28]' /><br /><br />";
304+
305+
$form .= _MB_QR_SHOW_AS_POPUP.": <input type='radio' name='options[29]' value='1' ";
306+
if($options[29]==1) $form .="checked='checked'";
307+
$form .= " />&nbsp;"._MB_QR_SHOW_POPUP_ONCLICK."&nbsp;<input type='radio' name='options[29]' value='2' ";
308+
if($options[29]==2) $form .="checked='checked'";
309+
$form .= " />&nbsp;"._MB_QR_SHOW_POPUP_ONMOUSE."&nbsp;<input type='radio' name='options[29]' value='0' ";
310+
if(!$options[29]) $form .="checked='checked'";
311+
$form .= " />&nbsp;"._NO."<br /><br />";
312+
313+
$form .= _MB_QR_SHOW_AS_POPUP_PROMPT.": <input type='text' size='20' value='".$options[30]."'id='options[30]' name='options[30]' /><br /><br />";
314+
315+
return $form;
316+
}
317+
186318
?>

docs/changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
Qr Module ChangeLog
22

3+
=== Qr Module 1.4 ===
4+
Release date: 11 Mar 2013
5+
6+
* added vCard block
7+
38
=== Qr Module 1.3 ===
49
Release date: 05 Mar 2013
510

docs/readme.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ which use the standard mainfile inclusion. This adds a layer of
2525
additional protections (such as protector) but requires access
2626
permissions to work as intended.
2727

28-
Five blocks are available.
28+
Several blocks are available.
2929

3030
Manual QR Code - Display any string as a QR code
3131
MECARD - Docomo MECARD format QR code
@@ -40,6 +40,7 @@ QR Bookmark This Page - Display a MEBKM format bookmark QR code
4040
that includes the page title and url.
4141
Also includes an option to show the code
4242
as a popup.
43+
vCard - Displays vCard format QR Code
4344

4445
Additionally, a qr code image in png format can be generated
4546
outside of the supplied blocks by supplying these scripts as

language/english/blocks.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,43 @@
3636
define('_MB_QR_SHOW_POPUP_ONMOUSE','On Mouse Over');
3737
define('_MB_QR_SHOW_AS_POPUP_PROMPT', 'Prompt for Popup Open');
3838
define('_MB_QR_SHOW_AS_POPUP_CLOSE', 'Click to Close');
39+
40+
// new in vcard
41+
define('_MB_QR_VCARD_STRING', 'vCard data fields, leave field blank to omit from bar code. (Full Name and Name required.)');
42+
define('_MB_QR_VCARD_ALT' , 'ALT String for QR Code Image');
43+
define('_MB_QR_VCARD_TYPE' ,'Type');
44+
define('_MB_QR_VCARD_TYPE_WORK' ,'Work');
45+
define('_MB_QR_VCARD_TYPE_HOME' ,'Home');
46+
define('_MB_QR_VCARD_TYPE_CELL' ,'Cell');
47+
define('_MB_QR_VCARD_TYPE_FAX' ,'Fax');
48+
49+
define('_MB_QR_VCARD_FN' ,'Full Name');
50+
define('_MB_QR_VCARD_N_FAMILY' ,'Name - Family');
51+
define('_MB_QR_VCARD_N_GIVEN' ,'Name - Given Name');
52+
define('_MB_QR_VCARD_N_ADDITIONAL' ,'Name(s) - Additional');
53+
define('_MB_QR_VCARD_N_PREFIX' ,'Name - Prefixes');
54+
define('_MB_QR_VCARD_N_SUFFIX' ,'Name - Suffixes');
55+
define('_MB_QR_VCARD_ORG' ,'Organization');
56+
define('_MB_QR_VCARD_TITLE' ,'Title');
57+
58+
define('_MB_QR_VCARD_ADR_TYPE' ,'Address - Type');
59+
define('_MB_QR_VCARD_ADR_POBOX' ,'Address - PO Box');
60+
define('_MB_QR_VCARD_ADR_EXTENDED' ,'Address - Extended Address');
61+
define('_MB_QR_VCARD_ADR_STREET' ,'Address - Street Address');
62+
define('_MB_QR_VCARD_ADR_LOCALITY' ,'Address - City');
63+
define('_MB_QR_VCARD_ADR_REGION' ,'Address - State/Province');
64+
define('_MB_QR_VCARD_ADR_POSTCODE' ,'Address - Postal Code');
65+
define('_MB_QR_VCARD_ADR_COUNTRY' ,'Address - Country');
66+
67+
define('_MB_QR_VCARD_EMAIL_PREF' ,'Email - Prefered');
68+
define('_MB_QR_VCARD_EMAIL' ,'Email');
69+
70+
define('_MB_QR_VCARD_TEL_TYPE' ,'Type');
71+
define('_MB_QR_VCARD_TEL_PREF' ,'Phone - Prefered');
72+
define('_MB_QR_VCARD_TEL' ,'Phone');
73+
define('_MB_QR_VCARD_URL' ,'URL');
74+
define('_MB_QR_VCARD_NOTE' ,'Note');
75+
76+
define('_MB_QR_VCARD_RAW' ,'Raw vCard Line Data');
77+
3978
?>

language/english/help/help.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@ <h4 class="odd">Preferences</h4>
3535
</p>
3636

3737
<h4 class="odd">Blocks</h4>
38-
<p class="even">QR module provides 5 different blocks.
38+
<p class="even">QR module provides several different blocks.
3939
<ul style="padding-left:2em;" >
4040
<li><b>Manual QR Code</b> - Displays a string as a code</li>
4141
<li><b>MECARD</b> - coded contact data in docomo MECARD format</li>
4242
<li><b>This Page QR Code</b> - Displays URL for the current page as a QR code&reg;. The URL includes only the specified page parameters in a 'get' type request.</li>
4343
<li><b>This Page QR Code Block Extra</b> - as above, but uses a separate template (templates/blocks/qr_blockx_html) for special customizations. </li>
4444
<li><b>QR Bookmark This Page</b> - Displays a MEBKM format bookmark QR code that includes the page title and url.</li>
45+
<li><b>vCard</b> - coded contact data in vCard format. This offers a limited subset of vCard version 3.0. Please note, the results of scanning this code will vary greatly among mobile devices.</li>
4546
</ul>
4647
<br />
4748
All blocks include a popup option, that will show a prompt rather than the QR code. Clicking the prompt reveals the full code.

language/english/modinfo.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,11 @@
5757
define('_MI_QR_POPUP_LAUNCH', 'Click for QR Code&reg;');
5858
define('_MI_QR_FOR_THIS_PAGE', 'QR Code to access this page');
5959
define('_MI_QR_DEFAULT_MECARD_ALT', 'Contact Information');
60+
61+
// new in vcard
62+
define('_MI_QR_VCARD', 'vCard');
63+
define('_MI_QR_VCARD_DESC', 'vCard format QR Code');
64+
define('_MI_QR_DEFAULT_VCARD_ALT', 'Contact Information');
65+
6066
}
6167
?>

xoops_version.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
$modversion['name'] = _MI_QR_NAME;
1515
$modversion['dirname'] = basename( dirname( __FILE__ ) ) ;
16-
$modversion['version'] = '1.3';
16+
$modversion['version'] = '1.4';
1717
$modversion['description'] = _MI_QR_DESC;
1818
$modversion['author'] = "Richard Griffith (geekwright.com)";
1919
$modversion['credits'] = "QRcode scripts by Y.Swetake (swetake.com)";
@@ -120,6 +120,16 @@
120120
'options' => 'page,post_id,itemid,topic_id,forum,storyid,lid|'._MI_QR_FOR_THIS_PAGE.'|0|0|'._MI_QR_POPUP_LAUNCH,
121121
'template' => 'qr_block_mebkm.html');
122122

123+
$modversion['blocks'][] = array(
124+
'file' => 'blocks.php',
125+
'name' => _MI_QR_VCARD,
126+
'description' => _MI_QR_VCARD_DESC,
127+
'show_func' => 'b_qr_vcard_show',
128+
'edit_func' => 'b_qr_vcard_edit',
129+
'options' => '||||||||||||||||||||||||||||'._MI_QR_DEFAULT_VCARD_ALT.'|0|'._MI_QR_POPUP_LAUNCH,
130+
'template' => 'qr_block.html');
131+
132+
123133
// Templates
124134
$modversion['templates'][1]['file'] = 'qr_index.html';
125135
$modversion['templates'][1]['description'] = 'Module Index';

0 commit comments

Comments
 (0)