Răsfoiți Sursa

Merge branch 'master' of github.com:boonex/dolphin

Alex Trofimov 12 ani în urmă
părinte
comite
86868a6850

+ 18 - 5
inc/classes/BxDolCmts.php

@@ -844,14 +844,27 @@ class BxDolCmts extends BxDol implements iBxDolReplaceable
 
     protected function _prepareTextForOutput ($s)
     {
-        $sHttp = '';
+    	bx_import('BxDolTemplate');
+    	$oTemplate = BxDolTemplate::getInstance();
+
         $sPattern = "/((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*\.)+(aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|[a-z]{2})|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&]*)?)?(#[a-z][a-z0-9_]*)?/";
-        $aMatches = array();
-        if(preg_match($sPattern, $s, $aMatches) && empty($aMatches[1]))
-            $sHttp = 'http://';
+        $bAddNofollow = $this->_oQuery->getParam('sys_add_nofollow') == 'on';
 
         $s = bx_process_output($s, BX_DATA_HTML);
-        $s = preg_replace($sPattern, '<a href="' . $sHttp . '$0" target="_blank">$0</a>', $s);
+        $s = preg_replace_callback($sPattern, function($aMatches) use($oTemplate, $bAddNofollow) {
+        	$aLinkAttrs = array(
+        		array('key' => 'target', 'value' => '_blank')
+        	);
+	        if($bAddNofollow && strncmp(BX_DOL_URL_ROOT, $aMatches[0], strlen(BX_DOL_URL_ROOT)) != 0)
+	        	$aLinkAttrs[] = array('key' => 'rel', 'value' => 'nofollow');
+
+        	return $oTemplate->parsePageByName('bx_a.html', array(
+        		'href' => (empty($aMatches[1]) ? 'http://' : '') . $aMatches[0],
+        		'title' => $aMatches[0],
+        		'bx_repeat:attrs' => $aLinkAttrs,
+        		'content' => $aMatches[0],
+        	));
+        }, $s);
 
         return $s;
     }

+ 1 - 0
modules/boonex/organizations/install/langs/en.xml

@@ -142,6 +142,7 @@
     <string name="_bx_orgs_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
     <string name="_bx_orgs_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>
     <string name="_bx_orgs_grid_action_title_adm_set_acl_level"><![CDATA[Set Membership]]></string>
+    <string name="_bx_orgs_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
 	<string name="_bx_orgs_grid_action_err_delete"><![CDATA[Cannot delete the selected organization(s).]]></string>
 
     <string name="_bx_orgs_txt_account_pending"><![CDATA[This profile is pending approval, please wait until it is activated.]]></string>

+ 12 - 12
modules/boonex/organizations/install/sql/enable.sql

@@ -305,15 +305,15 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('bx_organizations_common', 'last_online', '_bx_orgs_grid_column_title_adm_last_online', '30%', 1, '25', '', 3),
 ('bx_organizations_common', 'actions', '', '20%', 0, '', '', 4);
 
-INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
-('bx_organizations_administration', 'bulk', 'set_acl_level', '_bx_orgs_grid_action_title_adm_set_acl_level', '', 0, 1),
-('bx_organizations_administration', 'bulk', 'delete', '_bx_orgs_grid_action_title_adm_delete', '', 1, 2),
-('bx_organizations_administration', 'bulk', 'delete_with_content', '_bx_orgs_grid_action_title_adm_delete_with_content', '', 1, 3),
-('bx_organizations_administration', 'single', 'set_acl_level', '', 'certificate', 0, 1),
-('bx_organizations_administration', 'single', 'delete', '', 'remove', 1, 2),
-('bx_organizations_administration', 'single', 'settings', '', 'cog', 0, 3),
-('bx_organizations_moderation', 'single', 'settings', '', 'cog', 0, 1),
-('bx_organizations_common', 'bulk', 'delete', '_bx_orgs_grid_action_title_adm_delete', '', 1, 2),
-('bx_organizations_common', 'bulk', 'delete_with_content', '_bx_orgs_grid_action_title_adm_delete_with_content', '', 1, 3),
-('bx_organizations_common', 'single', 'delete', '', 'remove', 1, 2),
-('bx_organizations_common', 'single', 'settings', '', 'cog', 0, 3);
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_organizations_administration', 'bulk', 'set_acl_level', '_bx_orgs_grid_action_title_adm_set_acl_level', '', 0, 0, 1),
+('bx_organizations_administration', 'bulk', 'delete', '_bx_orgs_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_organizations_administration', 'bulk', 'delete_with_content', '_bx_orgs_grid_action_title_adm_delete_with_content', '', 0, 1, 3),
+('bx_organizations_administration', 'single', 'set_acl_level', '_bx_orgs_grid_action_title_adm_set_acl_level', 'certificate', 1, 0, 1),
+('bx_organizations_administration', 'single', 'delete', '_bx_orgs_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_organizations_administration', 'single', 'settings', '_bx_orgs_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+('bx_organizations_moderation', 'single', 'settings', '_bx_orgs_grid_action_title_adm_more_actions', 'cog', 1, 0, 1),
+('bx_organizations_common', 'bulk', 'delete', '_bx_orgs_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_organizations_common', 'bulk', 'delete_with_content', '_bx_orgs_grid_action_title_adm_delete_with_content', '', 0, 1, 3),
+('bx_organizations_common', 'single', 'delete', '_bx_orgs_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_organizations_common', 'single', 'settings', '_bx_orgs_grid_action_title_adm_more_actions', 'cog', 1, 0, 3);

+ 1 - 0
modules/boonex/persons/install/langs/en.xml

@@ -142,6 +142,7 @@
     <string name="_bx_persons_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
     <string name="_bx_persons_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>
     <string name="_bx_persons_grid_action_title_adm_set_acl_level"><![CDATA[Set Membership]]></string>
+    <string name="_bx_persons_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
     <string name="_bx_persons_grid_action_err_delete"><![CDATA[Cannot delete the selected person(s).]]></string>
 
     <string name="_bx_persons_txt_account_pending"><![CDATA[This profile is pending approval, please wait until it is activated.]]></string>

+ 12 - 12
modules/boonex/persons/install/sql/enable.sql

@@ -307,15 +307,15 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('bx_persons_common', 'last_online', '_bx_persons_grid_column_title_adm_last_online', '30%', 1, '25', '', 3),
 ('bx_persons_common', 'actions', '', '20%', 0, '', '', 4);
 
-INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
-('bx_persons_administration', 'bulk', 'set_acl_level', '_bx_persons_grid_action_title_adm_set_acl_level', '', 0, 1),
-('bx_persons_administration', 'bulk', 'delete', '_bx_persons_grid_action_title_adm_delete', '', 1, 2),
-('bx_persons_administration', 'bulk', 'delete_with_content', '_bx_persons_grid_action_title_adm_delete_with_content', '', 1, 3),
-('bx_persons_administration', 'single', 'set_acl_level', '', 'certificate', 0, 1),
-('bx_persons_administration', 'single', 'delete', '', 'remove', 1, 2),
-('bx_persons_administration', 'single', 'settings', '', 'cog', 0, 3),
-('bx_persons_moderation', 'single', 'settings', '', 'cog', 0, 1),
-('bx_persons_common', 'bulk', 'delete', '_bx_persons_grid_action_title_adm_delete', '', 1, 2),
-('bx_persons_common', 'bulk', 'delete_with_content', '_bx_persons_grid_action_title_adm_delete_with_content', '', 1, 3),
-('bx_persons_common', 'single', 'delete', '', 'remove', 1, 2),
-('bx_persons_common', 'single', 'settings', '', 'cog', 0, 3);
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_persons_administration', 'bulk', 'set_acl_level', '_bx_persons_grid_action_title_adm_set_acl_level', '', 0, 0, 1),
+('bx_persons_administration', 'bulk', 'delete', '_bx_persons_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_persons_administration', 'bulk', 'delete_with_content', '_bx_persons_grid_action_title_adm_delete_with_content', '', 0, 1, 3),
+('bx_persons_administration', 'single', 'set_acl_level', '_bx_persons_grid_action_title_adm_set_acl_level', 'certificate', 1, 0, 1),
+('bx_persons_administration', 'single', 'delete', '_bx_persons_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_persons_administration', 'single', 'settings', '_bx_persons_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+('bx_persons_moderation', 'single', 'settings', '_bx_persons_grid_action_title_adm_more_actions', 'cog', 1, 0, 1),
+('bx_persons_common', 'bulk', 'delete', '_bx_persons_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_persons_common', 'bulk', 'delete_with_content', '_bx_persons_grid_action_title_adm_delete_with_content', '', 0, 1, 3),
+('bx_persons_common', 'single', 'delete', '_bx_persons_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_persons_common', 'single', 'settings', '_bx_persons_grid_action_title_adm_more_actions', 'cog', 1, 0, 3);

+ 3 - 0
modules/boonex/posts/install/langs/en.xml

@@ -120,8 +120,11 @@
     <string name="_bx_posts_grid_column_title_adm_title"><![CDATA[Title]]></string>
     <string name="_bx_posts_grid_column_title_adm_added"><![CDATA[Added]]></string>
     <string name="_bx_posts_grid_column_title_adm_author"><![CDATA[Author]]></string>
+    <string name="_bx_posts_grid_action_title_adm_edit"><![CDATA[Edit]]></string>
     <string name="_bx_posts_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
+    <string name="_bx_posts_grid_action_title_adm_more_actions"><![CDATA[More Actions]]></string>
     <string name="_bx_posts_grid_action_err_delete"><![CDATA[Cannot delete the selected post(s).]]></string>
+    
 
     <string name="_bx_posts_txt_sample_single"><![CDATA[post]]></string>
     <string name="_bx_posts_txt_sample_comment_single"><![CDATA[post's comment]]></string>

+ 11 - 11
modules/boonex/posts/install/sql/enable.sql

@@ -317,14 +317,14 @@ INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable
 ('bx_posts_common', 'added', '_bx_posts_grid_column_title_adm_added', '30%', 1, '25', '', 4),
 ('bx_posts_common', 'actions', '', '20%', 0, '', '', 5);
 
-INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
-('bx_posts_administration', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 1, 2),
-('bx_posts_administration', 'single', 'edit', '', 'pencil', 0, 1),
-('bx_posts_administration', 'single', 'delete', '', 'remove', 1, 2),
-('bx_posts_administration', 'single', 'settings', '', 'cog', 0, 3),
-('bx_posts_moderation', 'single', 'edit', '', 'pencil', 0, 1),
-('bx_posts_moderation', 'single', 'settings', '', 'cog', 0, 2),
-('bx_posts_common', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 1, 2),
-('bx_posts_common', 'single', 'edit', '', 'pencil', 0, 1),
-('bx_posts_common', 'single', 'delete', '', 'remove', 1, 2),
-('bx_posts_common', 'single', 'settings', '', 'cog', 0, 3);
+INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
+('bx_posts_administration', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_posts_administration', 'single', 'edit', '_bx_posts_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
+('bx_posts_administration', 'single', 'delete', '_bx_posts_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_posts_administration', 'single', 'settings', '_bx_posts_grid_action_title_adm_more_actions', 'cog', 1, 0, 3),
+('bx_posts_moderation', 'single', 'edit', '_bx_posts_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
+('bx_posts_moderation', 'single', 'settings', '_bx_posts_grid_action_title_adm_more_actions', 'cog', 1, 0, 2),
+('bx_posts_common', 'bulk', 'delete', '_bx_posts_grid_action_title_adm_delete', '', 0, 1, 2),
+('bx_posts_common', 'single', 'edit', '_bx_posts_grid_action_title_adm_edit', 'pencil', 1, 0, 1),
+('bx_posts_common', 'single', 'delete', '_bx_posts_grid_action_title_adm_delete', 'remove', 1, 1, 2),
+('bx_posts_common', 'single', 'settings', '_bx_posts_grid_action_title_adm_more_actions', 'cog', 1, 0, 3);

+ 41 - 10
modules/boonex/timeline/classes/BxTimelineTemplate.php

@@ -419,13 +419,22 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $sJsObject = $this->_oConfig->getJsObject('post');
         $sLinkIdPrefix = $this->_oConfig->getHtmlIds('post', 'attach_link_item');
 
+        $aLinkAttrs = array();
+        if($this->_oDb->getParam('sys_add_nofollow') == 'on' && strncmp(BX_DOL_URL_ROOT, $aLink['url'], strlen(BX_DOL_URL_ROOT)) != 0)
+        	$aLinkAttrs[] = array('key' => 'rel', 'value' => 'nofollow');
+        
         return $this->parsePageByName('attach_link_item.html', array(
             'html_id' => $sLinkIdPrefix . $aLink['id'],
             'style_prefix' => $sStylePrefix,
             'js_object' => $sJsObject,
             'id' => $aLink['id'],
             'url' => $aLink['url'],
-            'title' => $aLink['title'],
+        	'link' => $this->parsePageByName('bx_a.html', array(
+        		'href' => $aLink['url'],
+        		'title' => $aLink['title'],
+        		'bx_repeat:attrs' => $aLinkAttrs,
+        		'content' => $aLink['title'],
+        	)),
         ));
     }
 
@@ -608,13 +617,23 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $sTextMore = $this->_prepareTextForOutput($sTextMore);
 
         //--- Process Links ---//
+		$bAddNofollow = $this->_oDb->getParam('sys_add_nofollow') == 'on';
+
         $aTmplVarsLinks = array();
         if(!empty($aContent['links']))
-            foreach($aContent['links'] as $aLink)
+            foreach($aContent['links'] as $aLink) {
+            	$aLinkAttrs = array();
+		        if($bAddNofollow && strncmp(BX_DOL_URL_ROOT, $aLink['url'], strlen(BX_DOL_URL_ROOT)) != 0)
+       				$aLinkAttrs[] = array('key' => 'rel', 'value' => 'nofollow');
+
                 $aTmplVarsLinks[] = array(
                     'style_prefix' => $sStylePrefix,
-                    'url' => $aLink['url'],
-                    'title' => $aLink['title'],
+                	'link' => $this->parsePageByName('bx_a.html', array(
+		        		'href' => $aLink['url'],
+		        		'title' => $aLink['title'],
+		        		'bx_repeat:attrs' => $aLinkAttrs,
+		        		'content' => $aLink['title'],
+		        	)),
                     'bx_if:show_text' => array(
                         'condition' => !empty($aLink['text']),
                         'content' => array(
@@ -623,6 +642,7 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
                         )
                     )
                 );
+            }
 
         //--- Process Photos ---//
         $aTmplVarsImages = array();
@@ -865,15 +885,26 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
 
     protected function _prepareTextForOutput($s)
     {
-        $sHttp = '';
-        $sPattern = $this->_oConfig->getPregPattern('url');
+    	$oTemplate = &$this;
 
-        $aMatches = array();
-        if(preg_match($sPattern, $s, $aMatches) && empty($aMatches[1]))
-            $sHttp = 'http://';
+        $sPattern = $this->_oConfig->getPregPattern('url');
+        $bAddNofollow = $this->_oDb->getParam('sys_add_nofollow') == 'on';
 
         $s = bx_process_output($s, BX_DATA_TEXT_MULTILINE);
-        $s = preg_replace($sPattern, '<a href="' . $sHttp . '$0" target="_blank">$0</a>', $s);
+        $s = preg_replace_callback($sPattern, function($aMatches) use($oTemplate, $bAddNofollow) {
+        	$aLinkAttrs = array(
+        		array('key' => 'target', 'value' => '_blank')
+        	);
+	        if($bAddNofollow && strncmp(BX_DOL_URL_ROOT, $aMatches[0], strlen(BX_DOL_URL_ROOT)) != 0)
+	        	$aLinkAttrs[] = array('key' => 'rel', 'value' => 'nofollow');
+
+        	return $oTemplate->parsePageByName('bx_a.html', array(
+        		'href' => (empty($aMatches[1]) ? 'http://' : '') . $aMatches[0],
+        		'title' => $aMatches[0],
+        		'bx_repeat:attrs' => $aLinkAttrs,
+        		'content' => $aMatches[0],
+        	));
+        }, $s);
 
         return $s;
     }

+ 1 - 1
modules/boonex/timeline/js/post.js

@@ -108,7 +108,7 @@ BxTimelinePost.prototype.afterFormAttachLinkSubmit = function (oForm, oData)
 
 	if(oData && oData.form != undefined && oData.form_id != undefined) {
 		$('#' + oData.form_id).replaceWith(oData.form);
-		this.initFormPost(oData.form_id);
+		this.initFormAttachLink(oData.form_id);
 
 		return;
 	}

+ 1 - 3
modules/boonex/timeline/template/attach_link_item.html

@@ -1,7 +1,5 @@
 <div id="__html_id__" class="__style_prefix__-al-item bx-def-margin-sec-top">
-	<div class="__style_prefix__-ali-title">
-		<a href="__url__" rel="nofollow">__title__</a>
-	</div>
+	<div class="__style_prefix__-ali-title">__link__</div>
 	<div class="__style_prefix__-ali-url bx-def-font-grayed">__url__</div>
 	<div class="__style_prefix__-ali-actions bx-def-margin-sec-top">
 		<a class="bx-btn bx-btn-small" href="javascript:void(0)" onclick="javascript:__js_object__.deleteAttachLink(this, __id__)"><bx_text:_Delete /></a>

+ 1 - 3
modules/boonex/timeline/template/type_post.html

@@ -12,9 +12,7 @@
 	<div class="__style_prefix__-item-links bx-def-margin-top">
 		<bx_repeat:links>
 	   		<div class="__style_prefix__-item-link bx-def-margin-top-auto bx-def-padding-sec bx-def-border">
-	   			<div class="__style_prefix__-il-title">
-	   				<a href="__url__" rel="nofollow">__title__</a>
-	   			</div>
+	   			<div class="__style_prefix__-il-title">__link__</div>
 	   			<bx_if:show_text>
 	   				<div class="__style_prefix__-il-text bx-def-font-small bx-def-font-grayed">__text__</div>
 	   			</bx_if:show_text>