联动添加redmine的wik
<?php
error_reporting(E_ERROR);
date_default_timezone_set('Asia/Shanghai');
$red_server = "http://redmine.meilishuo.com/projects";
$project_name = "opupdate";
$wiki_name = "故障纪录";
$url = $red_server . "/$project_name/wiki/wiki.json";
create_wiki($url, "故障记录-" . date('Y-m'), $wiki_name, $message);
function create_wiki( $url, $title, $wiki_name, $message) {
$level = preg_split('/\//', $title);
for ( $i = 0; $i <= count($level); $i++) {
$suffix = ".json";
if ( $i == 0 ) {
$url = preg_replace('/wiki.*/i', "wiki/$wiki_name", $url);
}
if ( ! strstr($url, $suffix)) {
$url .= $suffix;
}
$page = get_page_content($url, "GET", "");
$org = json_decode( $page["content"] );
$org_content = $org->{'wiki_page'}->{'text'};
if ( 0 == $i ) {
$check_str = $wiki_name;
$parent = "Wiki";
} else {
$parent = $i == 1 ? $wiki_name : $level[($i-1)];
$check_str = $level[$i];
}
$check_result = strstr($org->{'wiki_page'}->{'text'}, $check_str);
if ( ! $check_result && 0 == $i ) {
$new_content = "h1. $check_str\r\n\r\nh2. [[$level[$i]]]";
} elseif ( count($level) == $i ) {
$new_content = "h3. " . strftime("%Y-%m-%d %H:%M:%S") . " : \r\n\r\n$message";
} elseif ( ! $check_result ) {
$last = $level[($i-1)];
$new_content = "h1. $last\r\n\r\nh2. [[$level[$i]]]";
}
$org_content .= "\r\n\r\n$new_content ";
$org->{'wiki_page'}->{'text'} = $org_content;
$org->{'wiki_page'}->{'parent_title'} = $parent;
$new = json_encode($org);
if ( isset($new_content) ) {
$response = get_page_content($url, "PUT", $new);
if ( 200 == $response['http_code']) {
print_r("Wiki : $url updated.\n$new\n");
} elseif ( 201 == $response['http_code']) {
print_r("Wiki : $url created.\n");
} else {
print_r("Failed to update wiki : $url\t" . $response['http_code'] . "\n");
}
}
$url = preg_replace('/wiki.*/i', "wiki/$level[$i]", $url);
}
}
$page = get_page_content($url, "GET", "");
$org = json_decode( $page["content"] );
if ( ! strstr($org->{'wiki_page'}->{'text'}, $wiki_name) ) {
$org_content = $org->{'wiki_page'}->{'text'};
$new_content = "* [[$wiki_name]]";
$org_content .= "\r\n\r\n$new_content ";
$org->{'wiki_page'}->{'text'} = $org_content;
$new = json_encode($org);
$response = get_page_content($url, "PUT", $new);
if ( 201 == $response['http_code']) {
printf("Wiki : $wiki_name created.\n");
}
}
function get_page_content( $url, $func, $curl_data ) {
$header = array(
"X-Redmine-API-Key: 5b01xxxxxxxddddddddddddddddddd",
"Content-Type: application/json"
);
$options = array(
CURLOPT_HTTPHEADER => $header,
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "Release Shell", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 10, // timeout on connect
CURLOPT_TIMEOUT => 10, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_CUSTOMREQUEST => $func,
CURLOPT_VERBOSE => 0, //
CURLOPT_POSTFIELDS => $curl_data // this are my post vars
);
if ( "POST" == $func ) {
$post_opt = array(
CURLOPT_POST => 1, // i am sending post data
);
$options = array_merge($options, $post_opt);
}
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch) ;
$header = curl_getinfo($ch);
curl_close($ch);
$header['content'] = $content;
$header['errmsg'] = $errmsg;
return $header;
}
联动添加redmine的wik相关推荐
- 联动加入redmine的wik
<? php error_reporting(E_ERROR); date_default_timezone_set('Asia/Shanghai'); $red_server = " ...
- 织梦联动添加三级分类后无法添加二级分类的解决方案
织梦官方提供的联动类别不能添加二级联动.在dedecmsV5.7中添加一二级分类没有出现任何错误,但是,当添加三级分类后,再次添加一级二级分类就出现错误,一级二级分类分别变成二级三级了. 这个是一个小 ...
- Redmine+Apache+SVN+Postfix完整配置指南
2019独角兽企业重金招聘Python工程师标准>>> Redmine+Apache+SVN+Postfix完整配置指南 Edition Author State Date Desc ...
- Redmine详细部署文档
下载: wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz wget http://www.redmine.org/ ...
- redmine mysql 配置_Redmine部署
系统环境(最小化安装): LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distribu ...
- Ubuntu 20.04 redmine+MySQL+Apache+开机自启+邮箱通知+快速完整安装教程(最新)看这一篇就够啦
目录 1.安装必要的插件: 2.clone下载 redmine 3.配置redmine数据库和用户: 4.配置数据库连接 4.1 要将redmine源码中 config/database.yml.ex ...
- mysql省市级联pid_sql全国 省市 联动级联
sql版的省市级联动 无 /*添加省份表数据*/INSERT INTO Province(Pcode,Pname,NationCode) VALUES(110000,'北京市',100000)INSE ...
- 使用 RecyclerView 做点餐列表联动页面
使用 RecyclerView 做点餐列表联动页面 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近刚换了工作,来到一家做了11年餐饮软件管理的公司,开发平板端点餐安卓端原生app.因为之前 ...
- 资产管理运维一体化 构建设备运维标准库高效处理现场服务任务
资产管理系统的实施之所以大大提高企业管理水平,不仅是在于管理的信息化.智能化,还在于企业经济效益上的提高.那么高效安全的数字化设备运维管理必是重中之重,通过高效处理现场服务任务,可以保障企业安全的生产 ...
最新文章
- 理解注意力机制的好文二
- Redis的配置文件
- java字节数_Java各种类型占用的字节数
- SAP CRM Fiori应用My Lead的常见问题和解答
- 前端学习(1966)vue之电商管理系统电商系统之获取参数列表
- Notes of the scrum meeting(2013/10/23)
- C++:new[]和delete[]一定要配对使用吗?
- 牛刀:开发商不差钱不等于房价不暴跌 (转载)
- keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...
- JDC job obend
- ML_集成学习与Boosting模型
- android intent 视频,Android通过发送Intent播放本地视频和网络视频
- 六款Mac电脑上值得推荐的看图工具,欢迎收藏!
- 计算机硬件清理步骤,联想笔记本电脑清理灰尘详细步骤
- 工具使用,PS隐藏技能—对称绘画
- 求二次方程的根 b^2-4ac的三种可能
- osEye.Net:离别是为了将来的重逢
- 百度红包架构分析与推测
- 牛市来了,我却被矿机收割了
- 计算机一级office软件,计算机一级office
热门文章
- 最新WordPress网址导航主题模板+自适应手机端
- 【报告分享】2021年上半年直播电商行业洞察-易观智库(附下载)
- H3CSE园区-AAA、RADIUS和TACACS+
- bgcolor和background-color;bgColor和backgroundColor
- 如何完成符合ISO 26262要求的基于模型设计(MBD)的测试
- proe齿轮渐近线曲线方程
- 乡镇人口数据查询渠道
- ap sat_先学托福还是先学SAT?先SAT还是先AP?是该好好想想
- ICEM 二维非结构网格添加边界层
- Python 全栈工程师必备面试题 300 道(2020 版)