/** * Smarty {sendmusic} function plugin * * Type: function<br> * Name: sendmusic<br> * Purpose: "送歌"按钮, 连同脚本过程及对话框 * * @author XU Jian <*****@*****.**> * @param array * @param Smarty * */ function smarty_function_sendmusic($params, &$smarty) { global $current_user_id; $number = $params['number']; if (!isset($number)) { $smarty->trigger_error('Smarty plugin confirm error: parameter "number" expected.'); } $title = $params['title']; if (!isset($title)) { $title = '(未知)'; } $artist = $params['artist']; if (!isset($artist)) { $artist = '(未知)'; } $method = $params['method']; if (!isset($method) || $method == '') { $method = 'light'; } //送歌的link文字 $text = isset($params['text']) ? $params['text'] : ''; //送歌的css class $cssclass = isset($params['class']) ? $params['class'] : ''; $oncomplete = $params['oncomplete']; if (!isset($oncomplete) || $oncomplete == '') { $oncomplete = 'void(0);'; } $html = Template::RequireJsCode('<link href="' . Asset::GetAssetUrl('/css/components/matchbox.css') . '" rel="stylesheet" type="text/css" />'); $html .= "<a title=\"送歌\" href=\"javascript:void(0);\" onclick=\"__openSendMusicDialog('{$number}', '{$title}', '{$artist}')\" class=\"{$cssclass}\">{$text}</a>"; $script = <<<EOF <script type="text/javascript"> function __openSendMusicDialog(number, title, artist){ \t\$('#sendmusic-dialog').dialog({title: '送歌'}); \t\$('#jquery-interactive-box form input[name="music_id"]').val(number); \t\$('#jquery-interactive-box .song-title').text(title); \t\$('#jquery-interactive-box .song-artist').text(artist); \t\$('#jquery-interactive-box .matchbox').matchbox({name: 'friend_id', userid: {$current_user_id}}); \t\$('#jquery-interactive-box form input.default').unbind('click'); \t\$('#jquery-interactive-box form').ajaxForm({ \t\tbefroeSumit: function(){ \t\t\tif(!\$('#jquery-interactive-box form input[name="friend_id"]').val()){ \t\t\t\talert('请选择朋友'); \t\t\t\treturn false \t\t\t} \t\t}, \t\tsuccess: function(r){ \t\t\tif(r.substr(0,1)=='0'){ \t\t\t\t\$('#jquery-interactive-box').hide(); \t\t\t\t\$.alert('送出了一首歌'); \t\t\t}else{ \t\t\t\talert(r.substr(2)); \t\t\t\t\$(this).attr('disabled', false); \t\t\t} \t\t} \t}); } </script> EOF; $script = Template::RequireJsCode($script); Template::ScriptHolder('', $script); $html_dialog = '<div id="sendmusic-dialog" style="display:none;">'; $html_dialog .= Template::Render('section/music_send_user.tpl'); $html_dialog .= '</div>'; $html_dialog = Template::RequireJsCode($html_dialog); Template::ScriptHolder('', $html_dialog); $script = Template::RequireJs('/scripts/jquery.matchbox.js'); $script .= Template::RequireJs('/scripts/jquery.peoplepicker.js'); Template::ScriptHolder('', $script); return $html; }
/** * Smarty {js} block plugin * * Name: js<br> * Purpose: 提供js合并去重功能 * @link * @author Yancan <*****@*****.**> * @param array * @param Smarty * */ function smarty_block_jsholder($params, $content, &$smarty, &$repeat) { if ($repeat) { return; } static $cont = array(); $output = (isset($params['output']) and $params['output']); if ($output) { if (empty($cont)) { return ''; } if (ASSET_COMBO) { $url = "'" . Asset::GetComboUrl(array_keys($cont)) . "'"; } else { $js = array(); foreach ($cont as $key => $value) { $js[] = Asset::GetAssetUrl($key); } $url = json_encode($js); } return $url; } if (empty($content)) { return ''; } foreach (explode("\n", $content) as $v) { if (empty($v)) { continue; } $v = trim($v); $v = ltrim($v, '/'); $cont[$v] = 1; } }
/** * Smarty {quikedit} function plugin * * Type: function<br> * Name: quikedit<br> * Date: Mon. Sep 15, 2008<br> * Purpose: eidt-in-place效果, 直接编辑页内的文本内容(类似flickr.com的直接编辑照片标题、照片说明并保存) * Examples: <{quikedit target="#phototitle"}> * Output: <div id='phototitle-quickedit'> <script .....> * @link * @author 许健 * @version 1.0 * @param array * @param Smarty * @return HTML to render the quikedit front-end component * */ function smarty_block_quickedit($params, $content, &$smarty, &$repeat) { if (!$repeat) { $target = $params['target']; if (!isset($target)) { $smarty->trigger_error('Smarty plugin "quickedit" error: parameter "target" expected.'); } if (strpos($target, '#') == 0) { $target = substr($target, 1); } $action = $params['action']; if (!isset($action)) { $smarty->trigger_error('Smarty plugin "quickedit" error: parameter "action" expected.'); } $name = $params['name']; if (!isset($name)) { $name = 'content'; } $maxlength = $params['maxlength']; $scale = $params['scale']; // may be: input, single, multiple, textarea if (!isset($scale)) { $scale = 'text'; } $oncomplete = $params['oncomplete']; $html .= '<div id="' . $target . '-quickedit" class="quickedit" style="display:none;">'; $html .= '<form id="' . $target . '-quickedit-form" name="' . $target . '-form" method="POST" action="' . $action . '">'; $html .= '<input type="hidden" name="ajax" value="1" /> '; $html .= $content; // 写入需要追加的input type=hidden if (in_array($scale, array('multiple', 'textarea'))) { $html .= '<textarea id="' . $target . '-quickedit-content" name="' . $name . '" class="edit" maxlength="' . $maxlength . '"></textarea>'; } else { $html .= '<input id="' . $target . '-quickedit-content" name="' . $name . '" class="edit" maxlength="' . $maxlength . '" value="" autocomplete="off" />'; } $html .= '<div class="buttons">'; $html .= '<div class="floatright error" id="' . $target . '-quickedit-error"></div> '; $html .= '<input type="submit" id="' . $target . '-quickedit-submit" value="确定" class="default" /> '; $html .= '<a id="' . $target . '-quickedit-cancel" href="cancel" />取消</a>'; $html .= '</div>'; $html .= '</form>'; $html .= '</div>'; $script .= '<script type="text/javascript" src="' . Asset::GetAssetUrl('/lib/jquery/jquery.form.js') . '"></script>'; $script .= '<script type="text/javascript" src="' . Asset::GetAssetUrl('/scripts/jquery.quickedit.js') . '"></script>'; $script .= '<script type="text/javascript">'; $script .= '$(\'#' . $target . '\').quickedit({action:\'' . $action . '\''; if (isset($oncomplete)) { $script .= ', oncomplete: function(){eval(\'' . $oncomplete . '\');}'; } $script .= '});'; $script .= '</script>'; Template::ScriptHolder('', $script); return $html; } }
/** * Smarty {audioplayer} function plugin * * Type: function<br> * Name: audioplayer<br> * Date: Sat. Nov 12, 2008<br> * Purpose: 外观一致的音乐播放器, 使用WordPress plugin: audio player * Examples: <{audioplayer url="http://...."}> * @link * @author 许健 * @version 1.0 * @param array * @param Smarty * @return HTML to render the audio player front-end component * */ function smarty_function_audioplayer($params, &$smarty) { $name = $params['name']; if (!isset($name)) { $smarty->trigger_error('Smarty plugin audioplayer error: parameter "name" expected.'); } $url = $params['url']; if (!isset($url)) { $smarty->trigger_error('Smarty plugin audioplayer error: parameter "url" expected.'); } $titles = $params['titles']; $artists = $params['artists']; $autostart = $params['autostart']; if (in_array($autostart, array('yes', 'true', '1'))) { $autostart = 'yes'; } else { $autostart = 'no'; } $loop = $params['loop']; if (in_array($loop, array('false', 'no', '0'))) { $loop = 'no'; } else { $loop = 'yes'; } $width = $params['width']; if (!isset($width)) { $width = 200; } $html = Template::RequireJs('/lib/audioplayer.js'); $html .= '<script type="text/javascript">AudioPlayer.setup("' . Asset::GetAssetUrl('/lib/audioplayer.swf') . '", { width: ' . $width . ' }); </script>'; $html .= '<script type="text/javascript">'; $html .= "AudioPlayer.embed('audioplayer-{$name}', {soundFile: '{$url}', titles: '{$titles}', artists: '{$artists}', autostart: '{$autostart}', loop: '{$loop}'}); "; $html .= '</script>'; Template::ScriptHolder('', $html); return '<div id="audioplayer-' . $name . '"></div>'; //$html; }
/** * Smarty {matchbox} function plugin * * Type: function<br> * Name: matchbox<br> * Date: Tue. Sep 9, 2008<br> * Purpose: 显示一个“姓名查询器”, 输入汉字、汉语拼音关键字, 向后端查询好友姓名, 显示下拉菜单并可选择输入 * Examples: <{matchbox name="recipients"}> * Output: <script src=..... /> <link type=.... /> * <div class="matchbox"> <input type="hidden" name="recipients" /> </div> * <script ....></script> * @link * @author 许健 * @version 1.0 * @param array * @param Smarty * @return HTML to render the matchbox front-end component * * history: Thu. 2008-11-13 许健 + People Picker */ function smarty_function_matchbox($params, &$smarty) { $name = $params['name']; if (!isset($name)) { $smarty->trigger_error('Smarty plugin sprite error: parameter "name" expected.'); } $userid = $params['userid']; if (!isset($userid)) { $smarty->trigger_error('Smarty plugin sprite error: parameter "userid" expected.'); } if (!isset($params['groupid'])) { $groupid = 0; } else { $groupid = $params['groupid']; } $limit = $params['limit']; $width = $params['width']; if (!isset($width) || $width == '') { $width = '400'; } $exclude = $params['exclude']; $height = $params['height']; if (!isset($height) || $height == '') { $height = '18'; } $paging = $params['paging']; if (!isset($paging) || $paging == '') { $paging = 'true'; } $layout = $params['layout']; $queryurl = $params['queryurl']; $filter = $params['filter']; // group, online... $html = '<link href="' . Asset::GetAssetUrl('/css/components/matchbox.css') . '" rel="stylesheet" type="text/css" />'; $htlm .= "\n"; $html .= '<div title="请输入好友姓名,支持全拼、中文、首字母模糊输入" class="floatleft" style="width:' . $width . 'px"><div id="jquery-matchbox-' . $name . '" class="matchbox"></div></div>'; $script .= '<script type="text/javascript" src="' . Asset::GetAssetUrl('/scripts/jquery.matchbox.js') . '"></script>'; $script .= "\n"; $script .= '<script type="text/javascript" src="' . Asset::GetAssetUrl('/scripts/jquery.peoplepicker.js') . '"></script>'; $script .= "\n"; $script .= '<script type="text/javascript">'; $script .= '$(\'#jquery-matchbox-' . $name . '\').matchbox({name: "' . $name . '", userid:"' . $userid . '", groupid:"' . $groupid . '"'; if (isset($limit) && is_numeric($limit)) { $script .= ', limit: ' . $limit; } if (isset($layout) && $layout == 'floating') { $script .= ', layout: "floating"'; } if (isset($exclude)) { $script .= ', exclude: "' . $exclude . '"'; } if (isset($filter)) { $script .= ', filter: "' . $filter . '"'; } if (isset($filter)) { $script .= ', paging: "' . $paging . '"'; } if (isset($queryurl)) { $script .= ', queryUrl: "' . $queryurl . '"'; } $script .= '});'; $script .= '</script>'; $script .= "\n"; Template::ScriptHolder('', $script); return $html; }
/** * 生成 <script ...></script> * * @param array $js * @param boolean $mtime * @return string * @see Asset::GetAssetUrl() */ public static function JsToString(array $js, $mtime = true) { if (empty($js)) { return ''; } $cnt = count($js); if (ASSET_COMBO) { $str = '<script type="text/javascript" src="' . ($cnt > 1 ? Asset::GetComboUrl($js, $mtime) : Asset::GetAssetUrl($js[0], $mtime)) . '"></script>'; } else { $str = ''; for ($i = 0; $i < $cnt; ++$i) { $str .= '<script type="text/javascript" src="' . Asset::GetAssetUrl($js[$i], $mtime) . "\"></script>\n"; } } return $str; }
/** * Smarty formaturl modifier plugin * * Type: modifier<br> * Name: formaturl<br> * Date: JUNE 11, 2008 * Purpose: Format url as purpose * Input: string to format * Example: {$var|formaturl} * @version 1.0 * @param (String) $url | 要格式化的网址 * @param (Boolean) $mtime | 可选,文件创建时间 * @return (String) 格式化后的网址 */ function smarty_modifier_formaturl($url, $mtime = true, $type = 1) { return Asset::GetAssetUrl($url, $mtime, $type); }
/** * Smarty {privacee} function plugin * * Type: function<br> * Name: privacee<br> * Purpose: * @link * @author 许健 (xujianmac@gmail.com) * @param array * @param Smarty * */ function smarty_function_privacee($params, &$smarty) { $link = $params['link']; if (!isset($link)) { $smarty->trigger_error('Smarty plugin privacee error: parameter "link" expected.'); } $origin = $params['origin']; if (!isset($origin)) { $origin = 'null'; } $oncomplete = $params['oncomplete']; if (!isset($oncomplete) || $oncomplete == '') { $oncomplete = 'function(){ return;}'; } else { if (strchr($oncomplete, '(') || strchr($oncomplete, 'return')) { $oncomplete = 'function(){' . $oncomplete . '}'; } } $onengage = $params['onengage']; if (strchr($onengage, '(') || strchr($onengage, 'return')) { $onengage = 'function(){' . $onengage . '}'; } $ondismiss = $params['ondismiss']; if (strchr($ondismiss, '(') || strchr($ondismiss, 'return')) { $ondismiss = 'function(){' . $ondismiss . '}'; } //var_dump($origin); $onload = $params['onload']; $onabort = $params['onabort']; $onerror = $params['onerror']; $origin = explode(';', $origin); //var_dump($origin); $html = '<link href="' . Asset::GetAssetUrl('/css/components/privacy.css') . '" rel="stylesheet" type="text/css" />'; $html .= "\n"; Template::Assign('oringin', $origin); Template::Assign('oringin_type', $origin[0]); Template::Assign('oringin_data', $origin[1]); $html .= Template::Render('section/privacy_setting.tpl'); $html = Template::RequireJsCode($html); Template::ScriptHolder('', $html); $script = Template::RequireJs('/lib/jquery/jquery.form.js'); $script .= "\n"; $script .= <<<EOF <script type="text/javascript"> EOF; if (isset($onengage)) { $script .= "\n__privacee__onengage = {$onengage};"; } if (isset($ondismiss)) { $script .= "\n__privacee__ondismiss = {$ondismiss};"; } $script .= <<<EOF \$('{$link}').click(function(){ \t\$(this).blur(); \tvar p = \$(this).position(); \$('#privacy-spring').show().css('left', p.left + 44).css('top', p.top - 3); __privacee__onengage.call(); \t__privacee__oncomplete = {$oncomplete}; \twindow.setTimeout(function(){ \t\t\$(window).resize(function(){ \t\t\t\$('#privacy-spring').hide(); \t\t}); \t}, 500); \treturn false; }); </script> EOF; Template::ScriptHolder('', $script); return ''; }
/** * 根据 file_id ,获取一个/一组文件的访问地址 * @param int/array $id file * @param string $thumb */ public static function GetUrlByName($file_info, $thumb = '48x48', $type = 'avatar', $reg = 1) { if (is_numeric($file_info)) { return Asset::GetAssetUrl('/images/red.jpg'); } list($user_id, $file_name) = explode('_', $file_info, 2); if (empty($user_id) || empty($file_name)) { return Asset::DefaultUrl(0, $thumb, '', $reg); } if (0 == strncmp($file_name, 'http://', 7)) { return $file_name; /*$size = getimagesize($file_name); if(false===$size || !is_array($size) || empty($size)) return JWAsset::DefaultUrl(0, $thumb);*/ /*if(file_get_contents($file_name)) return $file_name; else*/ } $file_path = join('/', array('/system', $type, $user_id, $thumb, $file_name)); return Asset::GetUploadUrl($file_path); }