当前位置: 首页>>代码示例>>PHP>>正文


PHP StringUtil::findIn方法代码示例

本文整理汇总了PHP中StringUtil::findIn方法的典型用法代码示例。如果您正苦于以下问题:PHP StringUtil::findIn方法的具体用法?PHP StringUtil::findIn怎么用?PHP StringUtil::findIn使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在StringUtil的用法示例。


在下文中一共展示了StringUtil::findIn方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: hasView

 public static function hasView($feedid, $uid)
 {
     $feed = Feed::model()->get($feedid);
     $feedUser = User::model()->fetchByUid($feed["uid"]);
     $user = User::model()->fetchByUid($uid);
     if ($feed && $feed["view"] !== WbConst::SELF_VIEW_SCOPE) {
         $fuDeptIds = StringUtil::filterStr($feedUser["alldeptid"] . "," . $feedUser["alldowndeptid"]);
         $deptIds = StringUtil::filterStr($user["alldeptid"] . "," . $user["allupdeptid"]);
         if ($feed["view"] == WbConst::ALL_VIEW_SCOPE) {
             return true;
         } elseif ($feed["view"] == WbConst::SELFDEPT_VIEW_SCOPE) {
             if (StringUtil::findIn($fuDeptIds, $deptIds)) {
                 return true;
             }
         } else {
             if (StringUtil::findIn($feed["userid"], $uid)) {
                 return true;
             }
             if (StringUtil::findIn($feed["positionid"], $user["allposid"])) {
                 return true;
             }
             if (StringUtil::findIn($fuDeptIds, $deptIds)) {
                 return true;
             }
         }
     }
     return false;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:28,代码来源:WbfeedUtil.php

示例2: actionIndex

 public function actionIndex()
 {
     $type = EnvUtil::getRequest("type");
     $catid = EnvUtil::getRequest("catid");
     $childCatIds = "";
     if (!empty($catid)) {
         if ($catid == "-1") {
             $type = "nosign";
         } elseif ($catid == "-2") {
             $type = "sign";
         } else {
             $childCatIds = OfficialdocCategory::model()->fetchCatidByPid($catid, true);
         }
     }
     if (EnvUtil::getRequest("search")) {
         $this->search();
     }
     $uid = Ibos::app()->user->uid;
     $docIdArr = OfficialdocReader::model()->fetchDocidsByUid($uid);
     $this->_condition = OfficialdocUtil::joinListCondition($type, $docIdArr, $childCatIds, $this->_condition);
     $datas = Officialdoc::model()->fetchAllAndPage($this->_condition);
     if (isset($datas["datas"])) {
         foreach ($datas["datas"] as $k => $v) {
             $datas["datas"][$k]["content"] = mb_substr(strip_tags($v["content"]), 0, 15, 'utf-8');
         }
     }
     $officialDocList = ICOfficialdoc::getListDatas($datas["datas"]);
     $dashboardConfig = Yii::app()->setting->get("setting/docconfig");
     $params = array("pages" => $datas["pages"], "datas" => $officialDocList, "isApprover" => StringUtil::findIn($uid, $dashboardConfig["docapprover"]));
     $this->ajaxReturn($params, "JSONP");
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:31,代码来源:DocsController.php

示例3: loadTodo

 private function loadTodo($num = 4)
 {
     $uid = Ibos::app()->user->uid;
     $fields = array("frp.runid", "frp.processid", "frp.flowprocess", "ft.type", "frp.flag", "ft.flowid", "fr.name as runName", "fr.beginuser", "fr.focususer");
     $condition = array("and", "fr.delflag = 0", "frp.childrun = 0", sprintf("frp.uid = %d", $uid));
     $condition[] = array("in", "frp.flag", array(1, 2));
     $sort = "frp.createtime DESC";
     $group = "frp.id";
     $runProcess = Ibos::app()->db->createCommand()->select($fields)->from("{{flow_run_process}} frp")->leftJoin("{{flow_run}} fr", "frp.runid = fr.runid")->leftJoin("{{flow_type}} ft", "fr.flowid = ft.flowid")->where($condition)->order($sort)->group($group)->offset(0)->limit($num)->queryAll();
     $allProcess = FlowProcess::model()->fetchAllProcessSortByFlowId();
     foreach ($runProcess as &$run) {
         $run["user"] = User::model()->fetchByUid($run["beginuser"]);
         if ($run["type"] == 1) {
             if (isset($allProcess[$run["flowid"]][$run["flowprocess"]]["name"])) {
                 $run["stepname"] = $allProcess[$run["flowid"]][$run["flowprocess"]]["name"];
             } else {
                 $run["stepname"] = Ibos::lang("Process steps already deleted", "workflow.default");
             }
         } else {
             $run["stepname"] = Ibos::lang("Step", "", array("{step}" => $run["processid"]));
         }
         $run["focus"] = StringUtil::findIn($uid, $run["focususer"]);
         $param = array("runid" => $run["runid"], "flowid" => $run["flowid"], "processid" => $run["processid"], "flowprocess" => $run["flowprocess"]);
         $run["key"] = WfCommonUtil::param($param);
     }
     return $runProcess;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:27,代码来源:WorkflowApi.php

示例4: fetchPermission

 public function fetchPermission($uid, $flowId, $type = array(0, 1, 2, 3))
 {
     $user = User::model()->fetchByUid($uid);
     $condition = sprintf("FIND_IN_SET(type,'%s') AND flowid = %d", implode(",", $type), $flowId);
     $per = false;
     $result = Ibos::app()->db->createCommand()->select("*")->from($this->tableName())->where($condition)->queryAll();
     foreach ($result as $rs) {
         if ($rs["deptid"] == "alldept" || StringUtil::findIn($user["uid"], $rs["uid"]) || StringUtil::findIn($user["alldeptid"], $rs["deptid"]) || StringUtil::findIn($user["allposid"], $rs["positionid"])) {
             $per = $rs["type"];
         }
     }
     return $per !== false ? intval($per) : false;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:13,代码来源:FlowPermission.php

示例5: getAllItemName

 public static function getAllItemName($structure, $exceptType = array(), $exceptTitle = "")
 {
     $temp = array();
     foreach ($structure as $config) {
         if (!in_array($config["data-type"], $exceptType) && $config["data-type"] !== "label") {
             $temp[] = $config["data-title"];
         }
     }
     if (!StringUtil::findIn($exceptTitle, "[A@]")) {
         $temp[] = "[A@]";
     }
     if (!StringUtil::findIn($exceptTitle, "[B@]")) {
         $temp[] = "[B@]";
     }
     $allItemName = str_replace(array("+", "#"), array("+", "#"), $temp);
     return $allItemName;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:17,代码来源:WfFormUtil.php

示例6: checkProcessCirculatingByFlowId

 public function checkProcessCirculatingByFlowId($flowId)
 {
     $processInfo = $errorInfo = array();
     $tempId = $errorStr = "";
     $maxProcessId = 0;
     $criteria = array("select" => "processid,name,processto", "condition" => "flowid = " . intval($flowId), "order" => "processid");
     $steps = $this->fetchAll($criteria);
     foreach ($steps as $step) {
         $temp = array();
         $temp["id"] = $step["processid"];
         $temp["name"] = $step["name"];
         $temp["to"] = $step["processto"];
         if ($maxProcessId < $step["processid"]) {
             $maxProcessId = $step["processid"];
         }
         array_push($processInfo, $temp);
         $tempId .= $step["processid"] . ",";
     }
     foreach ($processInfo as $process) {
         $id = $process["id"];
         $name = $process["name"];
         $to = $process["to"];
         if (empty($to)) {
             if ($maxProcessId !== $id) {
                 $nextId = $id + 1;
                 if (StringUtil::findIn($tempId, $nextId)) {
                     continue;
                 }
                 $errorStr .= "{$nextId}";
             }
         } else {
             $processArr = explode(",", $to);
             foreach ($processArr as $toStep) {
                 if (!StringUtil::findIn($tempId, $toStep)) {
                     $errorStr .= $toStep . ",";
                 }
             }
         }
         $errorInfo[$id]["name"] = $name;
         $errorInfo[$id]["error"] = trim($errorStr, ",");
         $errorStr = "";
     }
     return $errorInfo;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:44,代码来源:FlowProcess.php

示例7: getFixedPrcs

 public static function getFixedPrcs($flowId, $runId)
 {
     $return = $temp = array();
     foreach (FlowRunProcess::model()->fetchAllByRunID($runId) as $rp) {
         $fp = $rp["flowprocess"];
         $temp[$fp]["flag"] = $rp["flag"];
         if ($rp["childrun"] !== "0") {
             $temp[$fp]["flag"] = "7";
         }
     }
     $process = WfCommonUtil::loadProcessCache($flowId);
     arsort($process);
     $isEnd = false;
     foreach ($process as $processId => $val) {
         if (isset($temp[$processId])) {
             $val = $val + $temp[$processId];
             $val["type"] = self::$typeMapping[$val["flag"]];
             if (StringUtil::findIn($val["processto"], 0)) {
                 if ($val["type"] == "finish") {
                     $isEnd = true;
                 }
             }
         } else {
             $val["flag"] = 1;
             $val["childrun"] = 0;
             $val["type"] = "inactive";
             if ($processId == 0 && $isEnd) {
                 $val["type"] = "finish";
             }
         }
         $val["to"] = $val["processto"];
         $val["left"] = intval($val["setleft"]);
         $val["top"] = intval($val["settop"]);
         $val["processid"] = intval($val["processid"]);
         $return[] = $val;
     }
     return $return;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:38,代码来源:WfPreviewUtil.php

示例8: setOtherInfo

 private function setOtherInfo(&$run)
 {
     if ($this->type !== "done") {
         $run["focus"] = StringUtil::findIn($this->uid, $run["focususer"]);
     } elseif (!empty($run["endtime"])) {
         $usedTime = $run["endtime"] - $run["begintime"];
         $run["usedtime"] = WfCommonUtil::getTime($usedTime);
     }
     $param = array("runid" => $run["runid"], "flowid" => $run["flowid"], "processid" => $run["processid"], "flowprocess" => $run["flowprocess"]);
     $run["key"] = WfCommonUtil::param($param);
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:11,代码来源:IWWfListView.php

示例9: isEnabledInFreeItem

 protected function isEnabledInFreeItem(ICFlowType $flow, ICFlowRunProcess $rp)
 {
     return $flow->isFree() && $rp->freeitem == "" || StringUtil::findIn($rp->freeitem, "[A@]");
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:4,代码来源:FormController.php

示例10: checkShowPurview

 public static function checkShowPurview($uid, $author)
 {
     $flag = false;
     if ($uid == $author) {
         return true;
     }
     $subUidArr = UserUtil::getAllSubs($uid, "", true);
     if (StringUtil::findIn($author, implode(",", $subUidArr))) {
         $flag = true;
     }
     return $flag;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:12,代码来源:DiaryUtil.php

示例11: compareIds

 public static function compareIds($userIds, $flowIds, $type)
 {
     $access = false;
     if ($type == "u" || $type == "p") {
         $access = StringUtil::findIn($userIds, $flowIds);
     } elseif ($type == "d") {
         static $parentDeptId = "";
         if ($flowIds == "alldept") {
             return true;
         }
         if (empty($parentDeptId)) {
             $parentDeptId = Department::model()->queryDept($userIds);
         }
         $access = StringUtil::findIn($userIds, $flowIds) || StringUtil::findIn($parentDeptId, $flowIds);
     }
     return $access;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:17,代码来源:WfNewUtil.php

示例12: getExportData


//.........这里部分代码省略.........
                             if ($my_array[$array_count_title - 1] == "") {
                                 $array_count_title--;
                             }
                             for ($i = 0; $i < $array_count_title; $i++) {
                                 $item_value .= "<td>" . $my_array[$i] . "</td>\n";
                             }
                             $item_value .= "</tr>\n";
                             $my_array = explode("\r\n", $lv_value);
                             $array_count = sizeof($my_array);
                             if ($my_array[$array_count - 1] == "") {
                                 $array_count--;
                             }
                             $sum_data = array();
                             for ($i = 0; $i < $array_count; $i++) {
                                 $item_value .= "<tr>\n";
                                 $tr_data = $my_array[$i];
                                 $my_array1 = explode("`", $tr_data);
                                 for ($j = 0; $j < $array_count_title; $j++) {
                                     if ($lv_sum_array[$j] == 1) {
                                         $sum_data[$j] += $my_array1[$j];
                                     }
                                     $td_data = $my_array1[$j];
                                     if ($td_data == "") {
                                         $td_data = "&nbsp;";
                                     }
                                     $item_value .= "<td>" . $td_data . "</td>\n";
                                 }
                                 $item_value .= "</tr>\n";
                             }
                             if ($sumflag == 1 && 0 < $array_count) {
                                 $item_value .= "<tr style='font-weight:bold;'>\n";
                                 for ($j = 0; $j < $array_count_title; $j++) {
                                     if ($sum_data[$j] == "") {
                                         $sumvalue = "&nbsp;";
                                     } else {
                                         $sumvalue = "合计:" . $sum_data[$j];
                                     }
                                     $item_value .= "<td align=right>" . $sumvalue . "</td>\n";
                                 }
                                 $item_value .= "</tr>\n";
                             }
                             $item_value .= "</table>\n";
                             break;
                         default:
                             $value = isset($itemData[$itemID]) ? $itemData[$itemID] : "";
                             break;
                     }
                 }
                 $title = $item["data-title"];
             } else {
                 switch ($field) {
                     case "runid":
                         $value = $row["runid"];
                         $title = $lang["Flow no"];
                         break;
                     case "runname":
                         $value = $row["runName"];
                         $title = $lang["Flow subject/num"];
                         break;
                     case "runstatus":
                         if ($param["flowconditions"]["flowstatus"] == "all") {
                             if ($row["endtime"] == 0) {
                                 $status = "<span class=\"red\">{$lang["Perform"]}</span>";
                             } else {
                                 $status = $lang["Has ended"];
                             }
                         } elseif ($param["flowconditions"]["flowstatus"] == "0") {
                             $status = "<span class=\"red\">{$lang["Perform"]}</span>";
                         } else {
                             $status = $lang["Has ended"];
                         }
                         $value = $status;
                         $title = $lang["Flow status"];
                         break;
                     case "rundate":
                         $value = date("Y-m-d", $row["begintime"]);
                         $title = $lang["Flow begin date"];
                         break;
                     case "runtime":
                         $value = ConvertUtil::formatDate($row["begintime"]);
                         $title = $lang["Flow begin time"];
                         break;
                     default:
                         break;
                 }
             }
             if (StringUtil::findIn($param["sumfields"], $field)) {
                 $sum[] = $key;
             }
             $data[$index][$key] = $value;
             if ($index == 0) {
                 if (strcmp($param["groupbyfields"]["field"], $field) == 0) {
                     $group = $key;
                 }
                 $titles[$key] = $title;
             }
         }
     }
     return array("title" => $titles, "data" => $data, "sum" => $sum, "group" => $group, "sum_data" => isset($sum_data) ? $sum_data : array());
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:101,代码来源:WfQueryUtil.php

示例13: actionShow

 public function actionShow()
 {
     $id = is_null($_GET["id"]) ? 0 : intval($_GET["id"]);
     if ($id) {
         $data = array();
         $email = Email::model()->fetchById($id, $this->archiveId);
         if (!$email) {
             $this->error(Ibos::lang("Parameters error", "error"), $this->createUrl("list/index"));
         }
         $isReceiver = $email["toid"] == $this->uid || $email["fromid"] == $this->uid || StringUtil::findIn($email["copytoids"], $this->uid) || StringUtil::findIn($email["toids"], $this->uid);
         if (!$isReceiver) {
             $this->error(Ibos::lang("View access invalid"), $this->createUrl("list/index"));
         }
         if (EnvUtil::getRequest("op") == "showframe") {
             echo $email["content"];
             exit;
         }
         if (($email["toid"] == $this->uid || StringUtil::findIn($email["toids"], $this->uid)) && $email["isread"] == 0) {
             Email::model()->setRead($id, $this->uid);
         }
         $email["dateTime"] = ConvertUtil::formatDate($email["sendtime"]);
         if ($this->uid == $email["fromid"]) {
             $email["fromName"] = Ibos::lang("Me");
         } elseif (!empty($email["fromid"])) {
             $email["fromName"] = User::model()->fetchRealnameByUid($email["fromid"]);
         } else {
             $email["fromName"] = $email["fromwebmail"];
         }
         $allIds = StringUtil::filterStr($email["toids"] . "," . $email["copytoids"]);
         $copyToId = explode(",", $email["copytoids"]);
         $toId = explode(",", $email["toids"]);
         $allUsers = $copyToUsers = $toUsers = array();
         foreach (explode(",", $allIds) as $key => $uid) {
             if (!empty($uid)) {
                 $tempUid = strpos($uid, "@");
                 if (!$tempUid) {
                     if ($this->uid == $uid) {
                         $name = Ibos::lang("Self");
                     } else {
                         $name = User::model()->fetchRealnameByUid($uid);
                     }
                 } else {
                     $name = $uid;
                 }
                 if (in_array($uid, $copyToId)) {
                     $copyToUsers[$key] = $allUsers[$key] = $name;
                 } elseif (in_array($uid, $toId)) {
                     $allUsers[$key] = $toUsers[$uid] = $name;
                 } else {
                     $allUsers[$key] = $name;
                 }
             }
         }
         if (!empty($email["towebmail"])) {
             $towebmails = explode(";", $email["towebmail"]);
             while (!empty($towebmails)) {
                 $toUsers[] = $allUsers[] = array_pop($towebmails);
             }
             $toUsers = array_unique($toUsers);
             $allUsers = array_unique($allUsers);
         }
         $data["allUsers"] = $allUsers;
         $data["toUsers"] = $toUsers;
         $data["copyToUsers"] = $copyToUsers;
         $data["isSecretUser"] = StringUtil::findIn($this->uid, $email["secrettoids"]);
         !empty($email["attachmentid"]) && ($data["attach"] = AttachUtil::getAttach($email["attachmentid"]));
         $data["next"] = Email::model()->fetchNext($id, $this->uid, $email["fid"], $this->archiveId);
         $data["prev"] = Email::model()->fetchPrev($id, $this->uid, $email["fid"], $this->archiveId);
         $data["email"] = $email;
         $data["weekDay"] = DateTimeUtil::getWeekDay($email["sendtime"]);
         $this->setPageTitle(Ibos::lang("Show email"));
         $this->setPageState("breadCrumbs", array(array("name" => Ibos::lang("Personal Office")), array("name" => Ibos::lang("Email center"), "url" => $this->createUrl("list/index")), array("name" => Ibos::lang("Show email"))));
         $this->render("show", $data);
     } else {
         $this->error(Ibos::lang("Parameters error"), $this->createUrl("list/index"));
     }
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:77,代码来源:ContentController.php

示例14: autoProcessor


//.........这里部分代码省略.........
                 break;
             case "sys_manager1":
                 $main = Ibos::app()->user->deptid;
                 $deptCache = DepartmentUtil::loadDepartment();
                 $managerID = $deptCache[$main]["manager"];
                 if ($managerID != 0) {
                     $autoValue = User::model()->fetchRealnameByUid($managerID);
                 }
                 break;
             case "sys_manager2":
                 $main = Ibos::app()->user->deptid;
                 $deptCache = DepartmentUtil::loadDepartment();
                 $upid = $deptCache[$main]["upid"];
                 if ($upid != 0) {
                     if ($deptCache[$upid]["manager"] != 0) {
                         $autoValue = User::model()->fetchRealnameByUid($deptCache[$upid]["manager"]);
                     }
                 }
                 break;
             case "sys_manager3":
                 $main = Ibos::app()->user->deptid;
                 $deptCache = DepartmentUtil::loadDepartment();
                 $dept_str = Department::model()->queryDept($main);
                 $temp = explode(",", $dept_str);
                 $count = count($temp);
                 $dept = $temp[$count - 2];
                 if ($deptCache[$dept]["manager"] != 0) {
                     $autoValue = User::model()->fetchRealnameByUid($deptCache[$dept]["manager"]);
                 }
                 break;
             default:
                 break;
         }
         if ($value == "" && !$readOnly || $this->flow->isFixed() && $readOnly && StringUtil::findIn($this->process->processitemauto, $item["data-title"]) && $this->rp->opflag) {
             $eleout = "\t\t\t\t<input type=\"text\" style=\"width:{$width} px;\" name=\"data_{$item["itemid"]}\" value=\"{$autoValue}\" title=\"{$item["data-title"]}\" />";
         } else {
             $eleout = "\t\t\t\t<input type=\"text\" style=\"width:{$width} px;\" name=\"data_{$item["itemid"]}\" value=\"{$value}\" title=\"{$item["data-title"]}\" />";
         }
         $hidden = isset($item["data-hide"]) ? $item["data-hide"] : "0";
         if ($hidden == "1") {
             $eleout = str_ireplace("type=\"text\"", "type=\"hidden\"", $eleout);
         }
         if (!$readOnly) {
             if ($this->inApp && $this->flow->isFixed() && StringUtil::findIn($this->process->processitemauto, $item["data-title"])) {
                 $readOnly = true;
             } else {
                 $eleout = str_ireplace("<input", "<input data-orig-value=\"{$autoValue}\" data-focus=\"restore\"", $eleout);
             }
         }
         if ($readOnly) {
             $this->setCommonReadOnly($item, $eleout, "input");
         }
     } else {
         $autoValue = "<option value=\"\"";
         if ($value == "") {
             $autoValue .= " selected";
         }
         $autoValue .= "></option>\n";
         switch ($field) {
             case "sys_list_dept":
                 $cache = DepartmentUtil::loadDepartment();
                 $str = StringUtil::getTree($cache, "<option value='\$deptid' \$selected>\$spacer\$deptname</option>", $value);
                 $autoValue .= $str;
                 break;
             case "sys_list_user":
                 foreach (UserUtil::loadUser() as $user) {
开发者ID:AxelPanda,项目名称:ibos,代码行数:67,代码来源:ICViewProcessor.php

示例15: parseMarcroAttach

 protected function parseMarcroAttach($runID, $attachmentID, $showImg = true)
 {
     $attachDir = Ibos::app()->setting->get("setting/attachdir");
     $attach = AttachmentN::model()->fetch("rid:" . $runID, $attachmentID);
     if ($attach["isimage"] && $showImg) {
         $imgAttr = FileUtil::imageSize($attachDir . $attach["attachment"]);
         $attachLink = "<img src=\"{$attachDir}" . $attach["attachment"] . "\" {$imgAttr['3']} alt=\"{$attach["filename"]}\">";
         return $attachLink;
     }
     if ($this->flow->isFixed() && (StringUtil::findIn($this->process->attachpriv, "4") || !$this->process->attachpriv)) {
         $down = 1;
     } else {
         $down = 0;
     }
     if ($down) {
         $attachstr = AttachUtil::getAttachStr($attachmentID);
         $url = Ibos::app()->urlManager->createUrl("main/attach/download", array("id" => $attachstr));
         $link = "<a target=\"_blank\" class=\"xi2\" href=\"{$url}\">{$attach["filename"]}</a>";
     } else {
         $link = "<a class=\"xi2\" href=\"#\">{$attach["filename"]}</a>";
     }
     $type = StringUtil::getFileExt($attach["attach"]);
     $path = AttachUtil::attachType($type);
     $attachLink = "<span><img src=\"{$path}\">{$link}</span>";
     return $attachLink;
 }
开发者ID:AxelPanda,项目名称:ibos,代码行数:26,代码来源:ICFlowFormViewer.php


注:本文中的StringUtil::findIn方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。