This package is considered feature-complete, and is now in security-only maintenance mode

Related tags

Miscellaneous soap
Overview

laminas-soap

This package is considered feature-complete, and is now in security-only maintenance mode, following a decision by the Technical Steering Committee. If you have a security issue, please follow our security reporting guidelines. If you wish to take on the role of maintainer, please nominate yourself

If you need an actively developed SOAP client, we recommend phpro/soap-client.

Build Status

Laminas\Soap is a component to manage the SOAP protocol in order to design client or server PHP application.

Comments
  • PHP 8

    PHP 8

    | Q | A |-------------- | ------ | Documentation | no | Bugfix | no | BC Break | no | New Feature | yes | RFC | no | QA | no

    Description

    Hi, this PR adds support for PHP 8 (the package already works in PHP 8 when installed with --ignore-platform-req=php).

    Dependencies have all been upgraded to support PHP ^7.3 || ~8.0.0.

    I'm not sure about the change for libxml_disable_entity_loader. The function is deprecated but still works in PHP 8 so I suppose disabling the warning is ok for now?

    see #28

    Enhancement 
    opened by Mopolo 9
  • Soap\Server::handle() never returns

    Soap\Server::handle() never returns

    Hi There,

    I'm having a problem when using Soap\Server() but I'm not 100% sure if this is a framework bug or if I'm not using the API correctly (as the documentation is a little sparse on the matter)

    If I construct Soap\Server() with WSDL generated from Soap\AutoDiscover->generate(), a very strange thing happens. Upon calling Server->handle(), the framework will bail immediately and prints the following (regardless of ::setReturnResponse) :

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Body>
            <SOAP-ENV:Fault>
                <faultcode>SOAP-ENV:Server</faultcode>
                <faultstring>SoapServer::SoapServer(): Invalid parameters</faultstring>
            </SOAP-ENV:Fault>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

    In addition, anything outputted previously will appear inside a "detail" element appended to the "Fault" element.

    What could be causing this?

    I look forward to your thoughts. Thanks in advance.

    PS I notice there are no bugs here, should I be making this bug somewhere else?


    Originally posted by @feamsr00 at https://github.com/zendframework/zend-soap/issues/6

    opened by weierophinney 6
  • Apply up to PHP 7.4 syntax

    Apply up to PHP 7.4 syntax

    Signed-off-by: Abdul Malik Ikhsan [email protected]

    | Q | A |-------------- | ------ | QA | yes

    Description

    Since this components require php 7.4, we can apply up to php 7.4 syntax.

    Enhancement 
    opened by samsonasik 4
  • Soap: Autodiscover encodes service URI twice

    Soap: Autodiscover encodes service URI twice

    This issue has been moved from the zendframework repository as part of the bug migration program as outlined here - http://framework.zend.com/blog/2016-04-11-issue-closures.html


    Original Issue: https://api.github.com/repos/zendframework/zendframework/issues/7541 User: @LastDragon-ru Created On: 2015-05-20T09:06:27Z Updated At: 2015-11-06T21:40:25Z

    <?php
    class TestService {
        /**
         * @return string
         */
        public function test() {
            return __METHOD__;
        }
    }
    
    $wsdl         = './service.xml';
    $wsdlUri      = 'http://127.0.0.1/soap/server.php?a=a&b=b';
    $autodiscover = new \Zend\Soap\AutoDiscover();
    
    $autodiscover->setUri($wsdlUri);
    $autodiscover->setClass('TestService');
    
    $autodiscover->dump($wsdl);
    

    WSDL:

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://127.0.0.1/soap/server.php?a=a&amp;b=b" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" name="TestService" targetNamespace="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b">
        <types>
            <xsd:schema targetNamespace="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b" />
        </types>
        <portType name="TestServicePort">
            <operation name="test">
                <documentation>test</documentation>
                <input message="tns:testIn" />
                <output message="tns:testOut" />
            </operation>
        </portType>
        <binding name="TestServiceBinding" type="tns:TestServicePort">
            <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
            <operation name="test">
                <soap:operation soapAction="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b#test" />
                <input>
                    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b" />
                </input>
                <output>
                    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b" />
                </output>
            </operation>
        </binding>
        <service name="TestServiceService">
            <port name="TestServicePort" binding="tns:TestServiceBinding">
                <soap:address location="http://127.0.0.1/soap/server.php?a=a&amp;amp;b=b" />
            </port>
        </service>
        <message name="testIn" />
        <message name="testOut">
            <part name="return" type="xsd:string" />
        </message>
    </definitions>
    

    WSDL file contains &amp; instead of & in attributes (non critical) and soap:address@location (critical)



    Originally posted by @GeeH at https://github.com/zendframework/zend-soap/issues/25

    opened by weierophinney 4
  • Added methods for custom target namespace

    Added methods for custom target namespace

    I need set custom target namespace

    • https://github.com/zendframework/zend-soap/issues/24

    Originally posted by @Sufir at https://github.com/zendframework/zend-soap/pull/34

    Awaiting Maintainer Response Enhancement Documentation Needed 
    opened by weierophinney 4
  • DocumentLiteralWrapper return Unknown error

    DocumentLiteralWrapper return Unknown error

    I try to wrap zend-soap server response to DocumentLiteral

    My code:

    
    $options = array('uri' => 'http://localhost/server', 'soap_version' => SOAP_1_2);               
    $soap = new \Zend\Soap\Server(null, $options);
    $service = new \App\Services\SOAPVendorAPI();
    $soap->setObject(new \Zend\Soap\Server\DocumentLiteralWrapper($service));
    $response = $soap->handle();
    
    

    as a response I receive

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP-ENV:Body>
          <SOAP-ENV:Fault>
             <faultcode>Receiver</faultcode>
             <faultstring>Unknown error</faultstring>
          </SOAP-ENV:Fault>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    

    When I tried to debug this issue based on $soap->setReturnResponse(true); the response was:

    SoapFault exception: [Receiver] Unknown error in /var/www/vendor/zendframework/zend-soap/src/Server.php:1182 Stack trace: #0 /var/www/vendor/zendframework/zend-soap/src/Server.php(996): Zend\Soap\Server->fault(Object(Zend\Soap\Exception\UnexpectedValueException)) #1 /var/www/app/Http/Controllers/SoapController.php(52): Zend\Soap\Server->handle() #2 [internal function]: App\Http\Controllers\SoapController->server(Object(Illuminate\Http\Request)) #3 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array) #4 /var/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('server', Array) #5 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\SoapController), 'server') #6 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController() #7 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\Routing\Route->run() #8 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) #9 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #10 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure)) #11 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(76): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #12 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) #13 /var/www/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #14 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #15 /var/www/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #16 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) #17 /var/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #18 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) #19 /var/www/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #20 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) #21 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #22 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #23 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request)) #24 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route)) #25 /var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #26 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #27 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request)) #28 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #29 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure)) #30 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #31 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure)) #32 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #33 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure)) #34 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #35 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) #36 /var/www/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #37 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure)) #38 /var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) #39 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure)) #40 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #41 /var/www/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #42 {main}

    Unfortunately $soap->setObject($service) ; working correcttly (without DocumentLiteralWrapper`


    Originally posted by @dmarczydlo at https://github.com/zendframework/zend-soap/issues/63

    opened by weierophinney 4
  • PHP 8.0 support

    PHP 8.0 support

    Feature Request

    | Q | A |------------ | ------ | New Feature | yes

    Summary

    To be prepared for the december release of PHP 8.0, this repository has some additional TODOs to be tested against the new major version.

    In order to make this repository compatible, one has to follow these steps:

    • [ ] Modify composer.json to provide support for PHP 8.0 by adding the constraint ~8.0.0
    • [ ] Modify composer.json to drop support for PHP less than 7.3
    • [ ] Modify composer.json to implement phpunit 9.3 which supports PHP 7.3+
    • [ ] Modify .travis.yml to ignore platform requirements when installing composer dependencies (simply add --ignore-platform-reqs to COMPOSER_ARGS env variable)
    • [ ] Modify .travis.yml to add PHP 8.0 to the matrix (NOTE: Do not allow failures as PHP 8.0 has a feature freeze since 2020-08-04!)
    • [ ] Modify source code in case there are incompatibilities with PHP 8.0
    Enhancement Help Wanted hacktoberfest-accepted 
    opened by boesing 3
  • Binary data with MTOM

    Binary data with MTOM

    With Zend Soap is possible to send binary data with MTOM format?


    Originally posted by @lucnap at https://github.com/zendframework/zend-soap/issues/54

    Question 
    opened by weierophinney 3
  • Possibility to turn off warnings (as they are redundant due to Exceptions being thrown)

    Possibility to turn off warnings (as they are redundant due to Exceptions being thrown)

    I'm wondering whether it would make sense to be able to turn off warnings coming from SoapClient as I would assume that most people are relying on Exceptions for error-handling?

    For example, we use it like this:

    <?php
    try {
        $client = new \Zend\Soap\Client('https://example.org/?wsdl', [
            'soap_version' => SOAP_1_1,
            'location'     => 'https://example.org/'
        ]);
        $client->myCommand([
            'arg' => 'value'
        ]);
    } catch (SoapFault $exception) {
        // Error handling code
    }
    

    Occasionally if there's a communication error with the remote endpoint a PHP warning will be logged like this:

    [Tue Jun 19 02:14:31 2018] [error] [client x.x.x.x] PHP Warning: SoapClient::__doRequest(): SSL: Connection reset by peer in /xx/vendor/zendframework/zend-soap/src/Client.php on line 1039

    At the same time a SoapFaul exception is thrown which is what we use for error-handling so the warning just clogs up our error logs unnecessarily as we're already handling the situation properly.

    We're using version 2.7.0 meaning this line points to https://github.com/zendframework/zend-soap/blob/release-2.7.0/src/Client.php#L1032 where SoapClient::__doRequest is called.

    I notice that the PHP manual doesn't actually mention that __doRequest can emit warnings, that might in itself be a glitch to file a bug report for regarding the ext-soap documentation?

    Anyhow, even if it would be documented we would still need to silence the warnings in zend-soap if they are not wanted.

    Would it make sense to switch to return @call_user_func() or introduce a toggle that disables PHP warnings in zend-soap?

    Many thanks!


    Originally posted by @njandreasson at https://github.com/zendframework/zend-soap/issues/55

    opened by weierophinney 3
  • Implement `vimeo/psalm` checks in CI as per #35

    Implement `vimeo/psalm` checks in CI as per #35

    | Q | A |-------------- | ------ | Documentation | no | Bugfix | no | BC Break | no | New Feature | no | RFC | no | QA | yes

    Fixes #35 Adds vimeo/psalm to CI, preventing potential regressions in automatic upgrades and minor CI changes

    Bug Enhancement 
    opened by Ocramius 2
  • Sipport ci in travis on GIthub Actions

    Sipport ci in travis on GIthub Actions

    Feature Request

    | Q | A |------------ | ------ | New Feature | yes | RFC | yes/no | BC Break | yes/no

    Summary

    Now main ci run in travis and only docs- build run on Github Actions. Do you have plans to migrate travis ci plan to Github Actions or replace travis on GA ?

    opened by Smolevich 2
Releases(2.11.1)
Owner
Laminas Project
Laminas components and MVC.
Laminas Project
A Symfony Feature Flag Bundle which easily allows you to configure and use your favorite feature flag provider.

Metro Markets FF Metro Markets FF is a Feature Flag Symfony Bundle. It easily allows you to configure and use your favorite feature flag provider. Ins

METRO Markets 14 May 23, 2022
Nextcloud AIO stands for Nextcloud All In One and provides easy deployment and maintenance with most features included in this one Nextcloud instance.

Nextcloud All In One Beta This is beta software and not production ready. But feel free to use it at your own risk! We expect there to be rough edges

Nextcloud 1.1k Jan 4, 2023
PHP Japanese string helper functions for converting Japanese strings from full-width to half-width and reverse. Laravel Rule for validation Japanese string only full-width or only half-width.

Japanese String Helpers PHP Japanese string helper functions for converting Japanese strings from full-width to half-width and reverse. Laravel Rule f

Deha 54 Mar 22, 2022
This is a community-based project designed in the view of R.V.R & J.C College of Engineering hostel mess maintenance.

Hostel-Maintenance-System Introduction This is a community-based project designed in the view of R.V.R & J.C College of Engineering hostel mess mainte

 Datta Sai Mallipeddi 1 Oct 23, 2021
[READ-ONLY] CakePHP Utility classes such as Inflector, Text, Hash, Security and Xml. This repo is a split of the main code that can be found in https://github.com/cakephp/cakephp

CakePHP Utility Classes This library provides a range of utility classes that are used throughout the CakePHP framework What's in the toolbox? Hash A

CakePHP 112 Feb 15, 2022
Exploiting and fixing security vulnerabilities of an old version of E-Class. Project implemented as part of the class YS13 Cyber-Security.

Open eClass 2.3 Development of XSS, CSRF, SQLi, RFI attacks/defences of an older,vulnerable version of eclass. Project implemented as part of the clas

Aristi_Papastavrou 11 Apr 23, 2022
This package makes it easy to add early access mode to your existing application.

This package makes it easy to add early access mode to your existing application. This is useful for when you want to launch a product and need to gat

Neo 174 Nov 26, 2022
A Laravel Wrapper for the Binance API. Now easily connect and consume the Binance Public & Private API in your Laravel apps without any hassle.

This package provides a Laravel Wrapper for the Binance API and allows you to easily communicate with it. Important Note This package is in early deve

Moinuddin S. Khaja 7 Dec 7, 2022
Dubbox now means Dubbo eXtensions, and it adds features like RESTful remoting, Kyro/FST serialization, etc to the Dubbo service framework.

Dubbox now means Dubbo eXtensions. If you know java, javax and dubbo, you know what dubbox is :) Dubbox adds features like RESTful remoting, Kyro/FST

当当 4.9k Dec 27, 2022
PracticeCore at the time created for DarkneesNetwork, and now i publish

Practice PracticeCore for PocketMine-MP 4.0.0 Description This is a beta version, It is very likely a drop in TPS or performance and clearly errors an

Claudio T. 4 Jul 24, 2022
Adds a compact "easy-sort" mode to Repeater and Repeater Matrix, making those fields easier to sort when there are a large number of items.

Repeater Easy Sort Adds a compact "easy-sort" mode to Repeater and Repeater Matrix, making those fields easier to sort when there are a large number o

Robin Sallis 3 Oct 10, 2021
All PHP functions, rewritten to throw exceptions instead of returning false, now for php8

A set of core PHP functions rewritten to throw exceptions instead of returning false when an error is encountered.

TheCodingMachine 106 Nov 21, 2022
now you can save MentionedMessage in UI

General now you can save MentionedMessage in UI Example: You Chat Hi @MulqiGaming @Friends it will be save Message later to MulqiGaming and Friends Co

MulqiGaming64 3 Aug 9, 2022
A now playing screen for the Raspberry Pi using the Last.fm API.

raspberry-pi-now-playing A now playing screen for the Raspberry Pi using the Last.fm API. This project is detailed, with photos of how I used it with

null 44 Dec 17, 2022
Helper script to aid upgrading magento 2 websites by detecting overrides. Now supports third party module detections

ampersand-magento2-upgrade-patch-helper Helper scripts to aid upgrading magento 2 websites, or when upgrading a magento module This tool looks for fil

Ampersand 242 Dec 18, 2022
A game-mode for Minecraft: Bedrock Edition

HardCoreFactions This is an unpaid commission that was only released for educational purposes, consider using it as a reference rather than having it

Doge 3 Sep 8, 2021
A new plugin like EconomyAPI but with a different mode

A new plugin like EconomyAPI but with a different mode

null 1 Dec 13, 2021
Textpattern-for-Panic-Coda - A Textpattern CMS mode for Panic Coda

Textpattern elements for Panic Coda 2 Handy elements for use with Panic Coda 2 on a Mac when authoring files for the Textpattern CMS. This repository

Phil Wareham 8 Jun 26, 2017
Text-mode interface for git

Tig: text-mode interface for Git What is Tig? Tig is an ncurses-based text-mode interface for git. It functions mainly as a Git repository browser, bu

Jonas Fonseca 11.4k Dec 30, 2022