%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/activities/bitrix/socnetblogpostactivity/ |
Current File : /home/bitrix/www/bitrix/activities/bitrix/socnetblogpostactivity/socnetblogpostactivity.php |
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); class CBPSocnetBlogPostActivity extends CBPActivity { public function __construct($name) { parent::__construct($name); $this->arProperties = array( 'Title' => '', 'OwnerId' => '', 'UsersTo' => '', 'PostTitle' => '', 'PostMessage' => '', 'PostSite' => '', ); } public function Execute() { global $DB; if (!CModule::IncludeModule("socialnetwork") || !CModule::IncludeModule("blog")) return CBPActivityExecutionStatus::Closed; $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $siteId = $this->PostSite ? $this->PostSite : SITE_ID; $ownerId = CBPHelper::ExtractUsers($this->OwnerId, $documentId, true); if (empty($ownerId)) { $this->WriteToTrackingService(GetMessage('SNBPA_EMPTY_OWNER'), 0, CBPTrackingType::Error); return CBPActivityExecutionStatus::Closed; } $pathToPost = COption::GetOptionString("socialnetwork", "userblogpost_page", false, $siteId); $pathToSmile = COption::GetOptionString("socialnetwork", "smile_page", false, $siteId); $blogGroupID = COption::GetOptionString("socialnetwork", "userbloggroup_id", false, $siteId); $blog = CBlog::GetByOwnerID($ownerId); if (!$blog) $blog = $this->createBlog($ownerId, $blogGroupID, $siteId); $micro = 'N'; $title = trim($this->PostTitle); if (!$title) { $micro = 'Y'; $title = trim(preg_replace( array("/\n+/is".BX_UTF_PCRE_MODIFIER, '/\s+/is'.BX_UTF_PCRE_MODIFIER), " ", blogTextParser::killAllTags($this->PostMessage) )); } $socnetRights = $this->getSocnetRights($this->UsersTo); if (empty($socnetRights)) { $this->WriteToTrackingService(GetMessage('SNBPA_EMPTY_USERS'), 0, CBPTrackingType::Error); return CBPActivityExecutionStatus::Closed; } try { $postFields = array( 'TITLE' => $title, 'DETAIL_TEXT' => HTMLToTxt(nl2br($this->PostMessage), '', array(), 0), 'DETAIL_TEXT_TYPE' => 'text', '=DATE_PUBLISH' => $DB->CurrentTimeFunction(), 'PUBLISH_STATUS' => BLOG_PUBLISH_STATUS_PUBLISH, 'CATEGORY_ID' => '', 'PATH' => CComponentEngine::MakePathFromTemplate($pathToPost, array("post_id" => "#post_id#", "user_id" => $ownerId)), 'URL' => $blog['URL'], 'PERMS_POST' => array(), 'PERMS_COMMENT' => array(), 'MICRO' => $micro, 'SOCNET_RIGHTS' => $socnetRights, '=DATE_CREATE' => $DB->CurrentTimeFunction(), 'AUTHOR_ID' => $ownerId, 'BLOG_ID' => $blog['ID'], "HAS_IMAGES" => "N", "HAS_TAGS" => "N", "HAS_PROPS" => "N", "HAS_SOCNET_ALL" => "N", "SEARCH_GROUP_ID" => $blogGroupID ); if(!empty($postFields["SOCNET_RIGHTS"]) && count($postFields["SOCNET_RIGHTS"]) == 1 && in_array("UA", $postFields["SOCNET_RIGHTS"])) $postFields['HAS_SOCNET_ALL'] = 'Y'; $newId = CBlogPost::add($postFields); $postFields["ID"] = $newId; $arParamsNotify = Array( "bSoNet" => true, "UserID" => $ownerId, "allowVideo" => COption::GetOptionString("blog","allow_video", "Y"), "PATH_TO_SMILE" => $pathToSmile, "PATH_TO_POST" => $pathToPost, "user_id" => $ownerId, "NAME_TEMPLATE" => CSite::GetNameFormat(false), "SITE_ID" => $siteId ); CBlogPost::Notify($postFields, $blog, $arParamsNotify); BXClearCache(true, \Bitrix\Socialnetwork\ComponentHelper::getBlogPostCacheDir(array( 'TYPE' => 'posts_last', 'SITE_ID' => $siteId ))); $arFieldsIM = Array( "TYPE" => "POST", "TITLE" => $postFields["TITLE"], "URL" => CComponentEngine::MakePathFromTemplate($pathToPost, array("post_id" => $newId, "user_id" => $ownerId)), "ID" => $newId, "FROM_USER_ID" => $ownerId, "TO_USER_ID" => array(), "TO_SOCNET_RIGHTS" => $postFields["SOCNET_RIGHTS"], "TO_SOCNET_RIGHTS_OLD" => array() ); CBlogPost::NotifyIm($arFieldsIM); } catch (Exception $e) { $this->WriteToTrackingService($e->getMessage()); } return CBPActivityExecutionStatus::Closed; } private function getSocnetRights($users) { $users = (array) $users; $result = array(); $toExtract = array(); foreach ($users as $user) { $user = (string) $user; if (strpos($user, 'user_') === 0) { $result[] = 'U'.substr($user, strlen('user_')); } elseif (strpos($user, 'group_') === 0) { $code = strtoupper(substr($user, strlen('group_'))); if (preg_match('#^(DR[0-9]+|SG[0-9]+)$#', $code)) { $result[] = $code; } elseif (preg_match('#^SG([0-9]+)_K$#', $code, $matches)) { $result[] = 'SG'.$matches[1]; } else $toExtract[] = $user; } else $toExtract[] = $user; } if ($toExtract) { $extracted = CBPHelper::ExtractUsers($toExtract, $this->GetDocumentId()); if (is_array($extracted)) { foreach($extracted as $u) $result[] = 'U'.$u; } } return array_unique($result); } private function createBlog($userId, $blogGroupId, $siteId) { global $DB; $arFields = array( "=DATE_UPDATE" => $DB->CurrentTimeFunction(), "GROUP_ID" => $blogGroupId, "ACTIVE" => "Y", "ENABLE_COMMENTS" => "Y", "ENABLE_IMG_VERIF" => "Y", "EMAIL_NOTIFY" => "Y", "ENABLE_RSS" => "Y", "ALLOW_HTML" => "N", "ENABLE_TRACKBACK" => "N", "SEARCH_INDEX" => "Y", "USE_SOCNET" => "Y", "=DATE_CREATE" => $DB->CurrentTimeFunction(), "PERMS_POST" => Array( 1 => "I", 2 => "I" ), "PERMS_COMMENT" => Array( 1 => "P", 2 => "P" ), ); $bRights = false; $rsUser = CUser::GetByID($userId); $arUser = $rsUser->Fetch(); if(strlen($arUser["NAME"]."".$arUser["LAST_NAME"]) <= 0) { $arFields["NAME"] = GetMessage("SNBPA_BLOG_NAME")." ".$arUser["LOGIN"]; } else { $arFields["NAME"] = GetMessage("SNBPA_BLOG_NAME")." ".$arUser["NAME"]." ".$arUser["LAST_NAME"]; } $arFields["URL"] = str_replace(" ", "_", $arUser["LOGIN"])."-blog-".$siteId; $arFields["OWNER_ID"] = $userId; $urlCheck = preg_replace("/[^a-zA-Z0-9_-]/is", "", $arFields["URL"]); if ($urlCheck != $arFields["URL"]) { $arFields["URL"] = "u".$userId."-blog-".$siteId; } if(CBlog::GetByUrl($arFields["URL"])) { $uind = 0; do { $uind++; $arFields["URL"] = $arFields["URL"].$uind; } while (CBlog::GetByUrl($arFields["URL"])); } $featureOperationPerms = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_USER, $arFields["OWNER_ID"], "blog", "view_post"); if ($featureOperationPerms == SONET_RELATIONS_TYPE_ALL) { $bRights = true; } $blogID = CBlog::Add($arFields); BXClearCache(true, "/blog/form/blog/"); if ($bRights) { CBlog::AddSocnetRead($blogID); } return CBlog::GetByID($blogID, $blogGroupId); } public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null) { $arErrors = array(); if (!array_key_exists("PostMessage", $arTestProperties) || strlen($arTestProperties["PostMessage"]) <= 0) $arErrors[] = array("code" => "NotExist", "parameter" => "GroupName", "message" => GetMessage("SNBPA_EMPTY_POST_MESSAGE")); if (!array_key_exists("OwnerId", $arTestProperties) || count($arTestProperties["OwnerId"]) <= 0) $arErrors[] = array("code" => "NotExist", "parameter" => "OwnerId", "message" => GetMessage("SNBPA_EMPTY_OWNER")); $ownerId = array_key_exists("OwnerId", $arTestProperties) ? $arTestProperties["OwnerId"] : null; if ($user && $ownerId !== $user->getBizprocId() && !$user->isAdmin()) { $arErrors[] = array("code" => "NotExist", "parameter" => "OwnerId", "message" => GetMessage("SNBPA_EMPTY_OWNER")); } if (!array_key_exists("UsersTo", $arTestProperties) || count($arTestProperties["UsersTo"]) <= 0) $arErrors[] = array("code" => "NotExist", "parameter" => "UsersTo", "message" => GetMessage("SNBPA_EMPTY_USERS")); return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user)); } public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "") { $sites = array(); $b = $o = ''; $sitesIterator = CSite::GetList($b, $o, Array('ACTIVE' => 'Y')); while ($site = $sitesIterator->fetch()) { $sites[$site['LID']] = $site['NAME']; } $dialog = new \Bitrix\Bizproc\Activity\PropertiesDialog(__FILE__, array( 'documentType' => $documentType, 'activityName' => $activityName, 'workflowTemplate' => $arWorkflowTemplate, 'workflowParameters' => $arWorkflowParameters, 'workflowVariables' => $arWorkflowVariables, 'currentValues' => $arCurrentValues )); $user = new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser); $dialog->setMap(array( 'OwnerId' => array( 'Name' => GetMessage("SNBPA_OWNER_ID"), 'FieldName' => 'owner_id', 'Type' => 'user', 'Required' => true, 'Default' => $user->getBizprocId() ), 'UsersTo' => array( 'Name' => GetMessage("SNBPA_USERS_TO"), 'FieldName' => 'users_to', 'Type' => 'user', 'Required' => true, 'Default' => 'author' ), 'PostTitle' => array( 'Name' => GetMessage("SNBPA_POST_TITLE"), 'FieldName' => 'post_title', 'Type' => 'string' ), 'PostMessage' => array( 'Name' => GetMessage("SNBPA_POST_MESSAGE"), 'FieldName' => 'post_message', 'Type' => 'text', 'Required' => true ), 'PostSite' => array( 'Name' => GetMessage("SNBPA_POST_SITE"), 'FieldName' => 'post_site', 'Type' => 'select', 'Options' => $sites ) )); $dialog->setRuntimeData(array( 'user' => $user )); return $dialog; } public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors) { $arErrors = array(); $arMap = array( "owner_id" => "OwnerId", "users_to" => "UsersTo", "post_title" => "PostTitle", "post_message" => "PostMessage", 'post_site' => "PostSite", ); $arProperties = array(); foreach ($arMap as $key => $value) { if ($key == "owner_id" || $key == "users_to") continue; $arProperties[$value] = $arCurrentValues[$key]; } if (strlen($arProperties["PostSite"]) <= 0) $arProperties["PostSite"] = $arCurrentValues["post_site_x"]; $user = new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser); if ($user->isAdmin()) { $arProperties["OwnerId"] = CBPHelper::UsersStringToArray($arCurrentValues["owner_id"], $documentType, $arErrors); if (count($arErrors) > 0) return false; } else { $arProperties["OwnerId"] = $user->getBizprocId(); } $arProperties["UsersTo"] = CBPHelper::UsersStringToArray($arCurrentValues["users_to"], $documentType, $arErrors); if (count($arErrors) > 0) return false; $arErrors = self::ValidateProperties($arProperties, new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser)); if (count($arErrors) > 0) return false; $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName); $arCurrentActivity["Properties"] = $arProperties; return true; } }