<?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相关推荐

  1. 联动加入redmine的wik

    <? php error_reporting(E_ERROR); date_default_timezone_set('Asia/Shanghai'); $red_server = " ...

  2. 织梦联动添加三级分类后无法添加二级分类的解决方案

    织梦官方提供的联动类别不能添加二级联动.在dedecmsV5.7中添加一二级分类没有出现任何错误,但是,当添加三级分类后,再次添加一级二级分类就出现错误,一级二级分类分别变成二级三级了. 这个是一个小 ...

  3. Redmine+Apache+SVN+Postfix完整配置指南

    2019独角兽企业重金招聘Python工程师标准>>> Redmine+Apache+SVN+Postfix完整配置指南 Edition Author State Date Desc ...

  4. Redmine详细部署文档

    下载: wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz wget http://www.redmine.org/ ...

  5. redmine mysql 配置_Redmine部署

    系统环境(最小化安装): LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distribu ...

  6. Ubuntu 20.04 redmine+MySQL+Apache+开机自启+邮箱通知+快速完整安装教程(最新)看这一篇就够啦

    目录 1.安装必要的插件: 2.clone下载 redmine 3.配置redmine数据库和用户: 4.配置数据库连接 4.1 要将redmine源码中 config/database.yml.ex ...

  7. mysql省市级联pid_sql全国 省市 联动级联

    sql版的省市级联动 无 /*添加省份表数据*/INSERT INTO Province(Pcode,Pname,NationCode) VALUES(110000,'北京市',100000)INSE ...

  8. 使用 RecyclerView 做点餐列表联动页面

    使用 RecyclerView 做点餐列表联动页面 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近刚换了工作,来到一家做了11年餐饮软件管理的公司,开发平板端点餐安卓端原生app.因为之前 ...

  9. 资产管理运维一体化 构建设备运维标准库高效处理现场服务任务

    资产管理系统的实施之所以大大提高企业管理水平,不仅是在于管理的信息化.智能化,还在于企业经济效益上的提高.那么高效安全的数字化设备运维管理必是重中之重,通过高效处理现场服务任务,可以保障企业安全的生产 ...

最新文章

  1. 理解注意力机制的好文二
  2. Redis的配置文件
  3. java字节数_Java各种类型占用的字节数
  4. SAP CRM Fiori应用My Lead的常见问题和解答
  5. 前端学习(1966)vue之电商管理系统电商系统之获取参数列表
  6. Notes of the scrum meeting(2013/10/23)
  7. C++:new[]和delete[]一定要配对使用吗?
  8. 牛刀:开发商不差钱不等于房价不暴跌 (转载)
  9. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...
  10. JDC job obend
  11. ML_集成学习与Boosting模型
  12. android intent 视频,Android通过发送Intent播放本地视频和网络视频
  13. 六款Mac电脑上值得推荐的看图工具,欢迎收藏!
  14. 计算机硬件清理步骤,联想笔记本电脑清理灰尘详细步骤
  15. 工具使用,PS隐藏技能—对称绘画
  16. 求二次方程的根 b^2-4ac的三种可能
  17. osEye.Net:离别是为了将来的重逢
  18. 百度红包架构分析与推测
  19. 牛市来了,我却被矿机收割了
  20. 计算机一级office软件,计算机一级office

热门文章

  1. 最新WordPress网址导航主题模板+自适应手机端
  2. 【报告分享】2021年上半年直播电商行业洞察-易观智库(附下载)
  3. H3CSE园区-AAA、RADIUS和TACACS+
  4. bgcolor和background-color;bgColor和backgroundColor
  5. 如何完成符合ISO 26262要求的基于模型设计(MBD)的测试
  6. proe齿轮渐近线曲线方程
  7. 乡镇人口数据查询渠道
  8. ap sat_先学托福还是先学SAT?先SAT还是先AP?是该好好想想
  9. ICEM 二维非结构网格添加边界层
  10. Python 全栈工程师必备面试题 300 道(2020 版)