/** * 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 {sprite} function plugin * * Type: function<br> * Name: sprite<br> * Purpose: 将"中间页"显示在on-the-fly的dynamic div中, 包含用于显示/隐藏的脚本过程, 在保持原"大页面“原状的情况下, 加载需要操作的用户界面(由link的href指定), 实现及流程类似于Smarty plugin: Confirm * @link * @author XU Jian <*****@*****.**> * @param array * @param Smarty * */ function smarty_function_sprite($params, &$smarty) { $link = $params['link']; if (!isset($link)) { $smarty->trigger_error('Smarty plugin sprite error: parameter "link" expected.'); } $width = $params['width']; if (!isset($width) || $width == '') { $width = '400'; } $height = $params['height']; if (!isset($height) || $height == '') { $height = '300'; } $oncomplete = $params['oncomplete']; if (!isset($oncomplete) || $oncomplete == '') { $oncomplete = 'function(){ return;}'; } else { if (strchr($oncomplete, '(') || strchr($oncomplete, 'return')) { $oncomplete = 'function(){' . $oncomplete . '}'; } } $onload = $params['onload']; $onunload = $params['onunload']; $onabort = $params['onabort']; $onerror = $params['onerror']; $onrequirevalidate = $params['onrequirevalidate']; $title = $params['title']; $mask = $params['mask']; $script = Template::RequireJs('/lib/jquery/jquery.form.js'); $script .= "\n"; $script .= '<script type="text/javascript">'; $script .= '$(\'' . $link . '\').sprite('; $script .= '{title: "' . $title . '" '; $script .= ', oncomplete: ' . $oncomplete; if (isset($mask)) { $script .= ', mask: ' . $mask; } if (isset($onload)) { $script .= ', onload: ' . $onload; } if (isset($onunload)) { $script .= ', onunload: ' . $onunload; } if (isset($onrequirevalidate)) { $script .= ', onrequirevalidate: ' . $onrequirevalidate; } if (isset($onabort)) { $script .= ', onabort: function(r){' . $onabort . '}'; } if (isset($onerror)) { $script .= ', onerror: function(r){' . $onerror . '}'; } $script .= '});'; $script .= '</script>'; $script .= "\n"; Template::ScriptHolder('', $script); return ''; }
/** * Smarty {vaidate} function plugin * * Type: function<br> * Name: validate<br> * Purpose: validate a form input field with pattern, includes required, range, regex, custom * @link * @author 许健 <*****@*****.**> * @param array * @param Smarty * history: 2008-11-3 许健 created 2008-11-3 许健 实现required 2008-11-5 许健 实现regex */ function smarty_function_validate($params, &$smarty) { $js_data = $params; $field = $params['field']; if (!isset($field)) { $smarty->trigger_error('Smarty plugin validte error: parameter "field" expected.'); } $type = $params['type']; if (!isset($type) || $type == '') { $js_data['type'] = 'required'; } $version = $params['version']; if (!isset($version) || $version == '') { $version = '0'; } unset($js_data['version']); if ($type == 'regexp') { $js_data['type'] = 'regex'; } if (!in_array($type, array('required', 'regex', 'custom'))) { $smarty->trigger_error('Smarty plugin validte error: parameter "type" invalid or not supported.'); } // data表示多种意义, 正则表达式内容, 比较字符串, 范围表达式 $method = $params['method']; if (!isset($method) || $method == '') { $js_data['method'] = 'default'; } $onfail = $params['onfail']; // attribute : lazy, 表示是否等到form开始submit才检查 $lazy = $params['lazy']; if (!isset($lazy) || $lazy == '') { $lazy = 'true'; } if (in_array($lazy, array('no', '0'))) { $lazy = 'false'; } else { $lazy = 'true'; } $js_data['lazy'] = $lazy; // 处理field, 用于给定field是form element name的情况 if (substr($field, 0, 1) != '.' && substr($field, 0, 1) != '#') { $field = ":input[name='{$field}']"; } // 实现了经Script Holder处理的优化方案 if ($version == '1') { $script = Template::RequireJs('/core/js/jquery/validate/jquery.validate.js') . Template::RequireJs('/core/js/jquery/bt/jquery.bt.js'); } else { $script = Template::RequireJs('/scripts/jquery.validate.js'); } $html .= '$(function(){'; $html .= '$("' . $field . '").validate('; $html .= json_encode($js_data); $html .= ');});'; Template::AddJsCode($html); 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 {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 ''; }
function smarty_function_comments($params, &$smarty) { $app = $params['app']; if (!isset($app)) { $smarty->trigger_error('Smarty plugin comments error: parameter "app" expected.'); } // 可使用不同于统一的查询地址 // 计划经济时代产物 计划弃用 $query = $params['query']; if (!isset($query)) { $query = "/ajax/comments.php"; } $topic = $params['topic']; if (!isset($topic)) { $smarty->trigger_error('Smarty plugin comments error: parameter "topic_key" expected.'); } $p = isset($params['p']) ? $params['p'] : 1; $pagesize = $params['pagesize']; if (!isset($pagesize)) { $pagesize = COMMENT_DEFAULT_PAGESIZE; } $pageable = $params['pageable']; if (!isset($pageable)) { $pageable = 1; } $sort = isset($params['sort']) ? $params['sort'] : 'asc'; if ($sort != 'desc') { $sort = 'asc'; } $async = $params['async']; if (!isset($async)) { $async = true; } $useemotions = $params['useemotions']; if (!isset($useemotions)) { $useemotions = 'yes'; } if ($useemotions != 'no' && $useemotions != '0') { $useemotions = 'yes'; } $useforward = $params['useforward']; if (!isset($useforward)) { $useforward = 'yes'; } if ($useforward != 'no' && $useforward != '0') { $useforward = 'yes'; } if (isset($params['showseq']) && $params['showseq']) { $showseq = true; } $usearrow = isset($params['usearrow']) ? $params['usearrow'] : 'l'; $userid = $params['userid']; $options = array('app' => $app, 'topic' => $topic, 'query' => $query, 'sort' => $sort, 'p' => $p, 'pagesize' => $pagesize, 'pageable' => $pageable, 'useemotions' => $useemotions, 'showseq' => $showseq, 'touserid' => $params['owner'], 'useforward' => $useforward, 'usearrow' => $usearrow); $html = Template::Render('comments/default.tpl', $options); if ($params['noscript'] == 1) { $script .= <<<EOF \t\t\t<script type="text/javascript"> \t\t\twindow.ENVOBJ.requireComments = window.ENVOBJ.requireComments || []; \t\t\twindow.ENVOBJ.requireComments.push({'selector':'#comments-{$app}-{$topic}','async': {$async}}); \t\t\t</script> EOF; } else { $script = Template::RequireJs('/lib/jquery/jquery.form.js'); $script .= Template::RequireJs('/core/js/jquery/commentupon/jquery.commentupon.js'); if (!$options['issub']) { $script .= '<script type="text/javascript">'; $script .= '$("#comments-' . $app . '-' . $topic . '").commentupon({async: ' . $async . '});'; $script .= '</script>'; } } Template::ScriptHolder('', $script); return $html; }
function smarty_function_statuscomments($params, &$smarty) { if (isset($params['options'])) { $params += $params['options']; } $app = $params['app']; if (!isset($app)) { $smarty->trigger_error('Smarty plugin statuscomments error: parameter "app" expected.'); } $topic = $params['topic_key']; if (!isset($topic)) { $smarty->trigger_error('Smarty plugin statuscomments error: parameter "topic_key" expected.'); } $model = $params['model']; if (!isset($model)) { $model = Comments::MODEL_ASYNC_ONLOAD; } $pagesize = $params['pagesize']; if (!isset($pagesize)) { $pagesize = COMMENT_DEFAULT_PAGESIZE; } $maxlen = $params['maxlen']; if (!isset($maxlen)) { $maxlen = Comments::DEFAULT_MAX_LEN; } $orderby = $params['orderby']; if (!isset($orderby)) { $orderby = 'asc'; } $postable = $params['postable']; if (!isset($postable)) { $postable = true; } $pageable = $params['pageable']; if (!isset($pageable)) { $pageable = true; } $topic_owner_id = $params['topic_owner_id']; $hintable = $params['hintable']; if (!isset($hintable)) { $hintable = true; } $abstract = $params['abstract']; if (!isset($abstract)) { $abstract = ''; } $delable = $params['delable']; if (!isset($delable)) { $delable = ''; } $options = array('app' => $app, 'topic' => $topic, 'model' => $model, 'pagesize' => $pagesize, 'orderby' => $orderby, 'issub' => $params['issub'], 'maxlen' => $maxlen, 'postable' => $postable, 'pageable' => $pageable, 'hintable' => $hintable, 'abstract' => $abstract, 'delable' => $delable); if (isset($topic_owner_id)) { $options['topic_owner_id'] = $topic_owner_id; } $subapp = Comments::getSubCommentSetting($app); if (isset($subapp)) { $subcomment = $subapp; if (!isset($subcomment['pagesize'])) { $subcomment['pagesize'] = COMMENT_DEFAULT_PAGESIZE; } if (!isset($subcomment['orderby'])) { $subcomment['orderby'] = 'asc'; } if (!isset($subcomment['maxlen'])) { $subcomment['maxlen'] = Comments::DEFAULT_MAX_LEN; } $subcomment['model'] = Comments::MODEL_ASYNC; $subcomment['issub'] = true; $subcomment['userid'] = $userid; $subcomment['postable'] = $postable; $options['subcomment'] = $subcomment; } Template::AddCss(array('/css/pages/comment.css')); $html = '<div id="comments_' . $app . '_' . $topic . '" '; // 检查是否为子评论 if ($params['issub']) { $html .= ' style="display:none" class="commentlist replies" '; } else { $html .= ' class="commentlist"'; } $html .= '>'; $templatehtml = Template::Render('statuscomment/comments.tpl', $options); $html .= $templatehtml; $html .= '</div>'; $has_sub = isset($subapp); $script = Template::RequireJs('/lib/jquery/jquery.form.js'); $script .= Template::RequireJs('/scripts/jquery.comments.js'); $params_str = '{'; $params_str .= '"model":' . $model; $params_str .= ',"maxlen":' . $options['maxlen']; $params_str .= '}'; if (!$options['issub']) { $script .= '<script type="text/javascript">'; $script .= '$("#comments_' . $app . '_' . $topic . '" ).comments( ' . $params_str . ');'; $script .= '</script>'; } Template::ScriptHolder('', $script); return $html; }