/**
 * 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;
}
Example #2
0
/**
* 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 '';
}
Example #3
0
/**
 * 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;
}
Example #5
0
/**
 * 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 '';
}
Example #6
0
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;
}