Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ body:
id: versions
attributes:
label: Versions
placeholder: 'Procore Connect 2.0.3, WordPress 7.0, PHP 8.3'
placeholder: 'Connect for Procore 2.0.3, WordPress 7.0, PHP 8.3'
validations:
required: true

Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ body:
- type: textarea
id: proposal
attributes:
label: What would you like Procore Connect to do?
label: What would you like Connect for Procore to do?
validations:
required: true

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/plugin-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,17 @@ jobs:
# check runs against what users actually install — not the dev tree.
- name: Stage the distributable
run: |
mkdir -p build/procore-connect
mkdir -p build/connect-for-procore
rsync -a --exclude-from=.distignore \
--exclude='.git' --exclude='build' --exclude='vendor' \
./ build/procore-connect/
./ build/connect-for-procore/
echo "Staged files:"
find build/procore-connect -type f | sort
find build/connect-for-procore -type f | sort

- name: Run Plugin Check
uses: wordpress/plugin-check-action@v1
with:
build-dir: ./build/procore-connect
build-dir: ./build/connect-for-procore
# Target zero findings. Remove nothing from this list without a
# documented reason in the pull request.
categories: |
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
run: |
TAG="${{ github.event.inputs.tag || github.ref_name }}"
TAG_VERSION="${TAG#v}"
HEADER_VERSION=$(grep -oP '^\s*\*\s*Version:\s*\K[0-9.]+' procore-connect.php)
HEADER_VERSION=$(grep -oP '^\s*\*\s*Version:\s*\K[0-9.]+' connect-for-procore.php)
README_VERSION=$(grep -oP '^Stable tag:\s*\K[0-9.]+' readme.txt)

echo "tag=$TAG_VERSION header=$HEADER_VERSION readme=$README_VERSION"
Expand All @@ -56,24 +56,24 @@ jobs:

- name: Stage the distributable
run: |
mkdir -p build/procore-connect
mkdir -p build/connect-for-procore
rsync -a --exclude-from=.distignore \
--exclude='.git' --exclude='build' --exclude='vendor' \
./ build/procore-connect/
./ build/connect-for-procore/

- name: Create the ZIP
run: |
cd build
zip -r "../procore-connect-${{ github.event.inputs.tag || github.ref_name }}.zip" procore-connect
zip -r "../connect-for-procore-${{ github.event.inputs.tag || github.ref_name }}.zip" connect-for-procore
cd ..
unzip -l "procore-connect-${{ github.event.inputs.tag || github.ref_name }}.zip"
unzip -l "connect-for-procore-${{ github.event.inputs.tag || github.ref_name }}.zip"

- name: Publish the release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag || github.ref_name }}
name: Procore Connect ${{ github.event.inputs.tag || github.ref_name }}
name: Connect for Procore ${{ github.event.inputs.tag || github.ref_name }}
body_path: CHANGELOG.md
files: procore-connect-*.zip
files: connect-for-procore-*.zip
draft: false
generate_release_notes: true
Binary file modified .wordpress-org/banner-1544x500.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified .wordpress-org/banner-772x250.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 38 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,45 @@
# Changelog

All notable changes to Procore Connect are documented here.
All notable changes to Connect for Procore are documented here.

The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.0.0] — 2026-08-15

### Changed

- **Renamed to Connect for Procore.** WordPress.org guideline 17 forbids a plugin slug
or display name that *begins* with someone else's trademark, and "Procore" is a
registered trademark of Procore Technologies, Inc. "Procore Connect" would have been
rejected on review. The new name follows the format the guideline itself prescribes
for integrations built by non-employees.

Worth stating plainly: Plugin Check passes this either way. Its trademark test
compares against a hardcoded list of well-known brands, and "procore" is not on it,
so the automated result was a false negative. The rule is enforced by a human
reviewer.

What changed: the plugin slug, directory, main file, display name, text domain and
the WordPress.org banner and icon. **You must reactivate the plugin once**, because
WordPress identifies a plugin by its directory and now sees a different one.

What deliberately did *not* change, so that existing sites keep working: every option
name, the `procore_connect_` hook prefix, the `/wp-json/procore-connect/v1/` REST
namespace, the `yourtheme/procore-connect/` template override directory, the
`procore-connect` CSS classes, the block name and the `wp procore-connect` CLI
command. Your settings, template overrides and custom CSS all survive the rename
untouched.

### Fixed

- **The REST proxy sent a malformed HTTP header.** The cache-status header was named
`X-Procore Connect-Cached` — a field name containing a space, which RFC 7230 does not
permit. It is now `X-Connect-For-Procore-Cached`. Introduced by an earlier blanket
rename and found while auditing this one.
- **The User-Agent contained a space inside its product token.** `Procore Connect/2.0.6`
is not a valid product token; it is now `ConnectForProcore/3.0.0`.

## [2.0.6] — 2026-08-09

### Fixed
Expand Down Expand Up @@ -160,12 +195,12 @@ every install was non-functional regardless of configuration.

### ⚠️ Action required when upgrading

- **The plugin is now called Procore Connect**, with the slug `procore-connect`. The
- **The plugin is now called Connect for Procore**, with the slug `procore-connect`. The
previous name contained "wp", which wordpress.org disallows in both a plugin name and
a slug, making the directory listing impossible. The GitHub repository stays at
`ibuilder/ProcoreWP`.
- The main plugin file was renamed from `index.php` to `procore-connect.php`. WordPress
treats this as a different plugin, so **Procore Connect must be activated once** after
treats this as a different plugin, so **Connect for Procore must be activated once** after
updating. Settings are imported automatically by the upgrade routine.
- Because 1.x never obtained a token, any stored token is discarded. **Re-run
Procore → Connection → Test connection** after upgrading.
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Contributing to Procore Connect
# Contributing to Connect for Procore

Thanks for helping. This document covers how to get set up and what the review will look
for.
Expand All @@ -7,7 +7,7 @@ for.

```bash
git clone https://github.com/ibuilder/ProcoreWP.git
cd Procore Connect
cd Connect for Procore
composer install
```

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Procore Connect
# Connect for Procore

[![Plugin Check](https://github.com/ibuilder/ProcoreWP/actions/workflows/plugin-check.yml/badge.svg)](https://github.com/ibuilder/ProcoreWP/actions/workflows/plugin-check.yml)
[![Coding Standards](https://github.com/ibuilder/ProcoreWP/actions/workflows/phpcs.yml/badge.svg)](https://github.com/ibuilder/ProcoreWP/actions/workflows/phpcs.yml)
Expand All @@ -15,7 +15,7 @@ Publish live [Procore](https://www.procore.com/) construction project data on a

Renders Procore data on the front end of a WordPress site: project directories, project detail panels, team lists, drawings, specifications, RFIs, submittals, punch lists, observations, daily logs, change orders, schedule milestones, company vendors and offices.

Everything is **read-only**. Procore Connect never writes to Procore.
Everything is **read-only**. Connect for Procore never writes to Procore.

```
[procore_project_list company_id="4242" limit="10"]
Expand Down Expand Up @@ -131,7 +131,7 @@ wp procore-connect reset-token
Copy any file from `templates/` into `yourtheme/procore-connect/` and edit it there. Overrides survive plugin updates — unlike 1.x, which told you to edit CSS inside the plugin directory and lost your work on every release.

```
wp-content/plugins/procore-connect/templates/collection.php
wp-content/plugins/connect-for-procore/templates/collection.php
→ wp-content/themes/your-theme/procore-connect/collection.php
```

Expand Down Expand Up @@ -167,18 +167,18 @@ Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Security r

Settings are imported automatically, all shortcode names are unchanged, and the legacy `id` attribute still works.

Two things need your attention. The main plugin file was renamed from `index.php` to `procore-connect.php`, which WordPress sees as a different plugin, so **activate Procore Connect once after updating**. And because 1.x never successfully authenticated, **re-run the connection test** before assuming a blank shortcode is a bug.
Two things need your attention. The main plugin file was renamed from `index.php` to `connect-for-procore.php`, which WordPress sees as a different plugin, so **activate Connect for Procore once after updating**. And because 1.x never successfully authenticated, **re-run the connection test** before assuming a blank shortcode is a bug.

Full detail: [the upgrade guide](https://ibuilder.github.io/ProcoreWP/upgrading/).

## Third-party service

Procore Connect contacts Procore to retrieve the data you ask it to display: `login.procore.com` for authentication and `api.procore.com` for data, or the sandbox or regional hosts you configure. It sends your Client ID and Client Secret during authentication, plus the company and project identifiers you configure. No visitor data is sent to Procore.
Connect for Procore contacts Procore to retrieve the data you ask it to display: `login.procore.com` for authentication and `api.procore.com` for data, or the sandbox or regional hosts you configure. It sends your Client ID and Client Secret during authentication, plus the company and project identifiers you configure. No visitor data is sent to Procore.

[Procore terms](https://www.procore.com/legal/termsofservice) · [Procore privacy policy](https://www.procore.com/legal/privacy) · [Procore API docs](https://developers.procore.com/documentation/introduction)

## License

GPL-2.0-or-later. See [LICENSE](LICENSE).

Procore Connect is not affiliated with, endorsed by, or sponsored by Procore Technologies, Inc. "Procore" is a trademark of Procore Technologies, Inc.
Connect for Procore is not affiliated with, endorsed by, or sponsored by Procore Technologies, Inc. "Procore" is a trademark of Procore Technologies, Inc.
2 changes: 1 addition & 1 deletion assets/css/admin.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Procore Connect admin styles.
* Connect for Procore admin styles.
*/

.procore-connect-admin .nav-tab-wrapper {
Expand Down
2 changes: 1 addition & 1 deletion assets/css/procore-connect.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Procore Connect front-end styles.
* Connect for Procore front-end styles.
*
* Do not edit this file: it is replaced on every plugin update. To restyle the
* output, either add rules under Procore -> Display -> Custom CSS, or copy a
Expand Down
2 changes: 1 addition & 1 deletion assets/js/admin.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Procore Connect admin behaviour.
* Connect for Procore admin behaviour.
*
* Plain ES5 with no build step, so the shipped file is the source file.
*
Expand Down
2 changes: 1 addition & 1 deletion blocks/procore/block.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"icon": "building",
"description": "Display data from Procore. Pick what to show, then set the project or company it applies to.",
"keywords": [ "procore", "construction", "project", "rfi", "submittal" ],
"textdomain": "procore-connect",
"textdomain": "connect-for-procore",
"supports": {
"html": false,
"align": [ "wide", "full" ],
Expand Down
50 changes: 25 additions & 25 deletions blocks/procore/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Procore Connect block editor integration.
* Connect for Procore block editor integration.
*
* Hand-written ES5 against the global `wp.*` runtime, with no build step, so
* the file that ships is the file that was authored.
Expand Down Expand Up @@ -34,24 +34,24 @@
* Everything else remains reachable through the equivalent shortcode.
*/
var CONTROLS = [
{ key: 'project_id', label: __( 'Project ID', 'procore-connect' ), type: 'number' },
{ key: 'company_id', label: __( 'Company ID', 'procore-connect' ), type: 'number' },
{ key: 'endpoint', label: __( 'Endpoint', 'procore-connect' ), type: 'text' },
{ key: 'field', label: __( 'Field', 'procore-connect' ), type: 'text' },
{ key: 'label', label: __( 'Label', 'procore-connect' ), type: 'text' },
{ key: 'title', label: __( 'Heading', 'procore-connect' ), type: 'text' },
{ key: 'limit', label: __( 'Maximum rows', 'procore-connect' ), type: 'number' },
{ key: 'status', label: __( 'Filter by status', 'procore-connect' ), type: 'text' },
{ key: 'orderby', label: __( 'Sort by field', 'procore-connect' ), type: 'text' },
{ key: 'order', label: __( 'Sort direction', 'procore-connect' ), type: 'select', options: [
{ label: __( 'Ascending', 'procore-connect' ), value: 'asc' },
{ label: __( 'Descending', 'procore-connect' ), value: 'desc' },
{ key: 'project_id', label: __( 'Project ID', 'connect-for-procore' ), type: 'number' },
{ key: 'company_id', label: __( 'Company ID', 'connect-for-procore' ), type: 'number' },
{ key: 'endpoint', label: __( 'Endpoint', 'connect-for-procore' ), type: 'text' },
{ key: 'field', label: __( 'Field', 'connect-for-procore' ), type: 'text' },
{ key: 'label', label: __( 'Label', 'connect-for-procore' ), type: 'text' },
{ key: 'title', label: __( 'Heading', 'connect-for-procore' ), type: 'text' },
{ key: 'limit', label: __( 'Maximum rows', 'connect-for-procore' ), type: 'number' },
{ key: 'status', label: __( 'Filter by status', 'connect-for-procore' ), type: 'text' },
{ key: 'orderby', label: __( 'Sort by field', 'connect-for-procore' ), type: 'text' },
{ key: 'order', label: __( 'Sort direction', 'connect-for-procore' ), type: 'select', options: [
{ label: __( 'Ascending', 'connect-for-procore' ), value: 'asc' },
{ label: __( 'Descending', 'connect-for-procore' ), value: 'desc' },
] },
{ key: 'columns', label: __( 'Columns', 'procore-connect' ), type: 'text' },
{ key: 'width', label: __( 'Image width', 'procore-connect' ), type: 'number' },
{ key: 'show_email', label: __( 'Show email addresses', 'procore-connect' ), type: 'toggle' },
{ key: 'all', label: __( 'Fetch every page', 'procore-connect' ), type: 'toggle' },
{ key: 'class', label: __( 'Extra CSS classes', 'procore-connect' ), type: 'text' },
{ key: 'columns', label: __( 'Columns', 'connect-for-procore' ), type: 'text' },
{ key: 'width', label: __( 'Image width', 'connect-for-procore' ), type: 'number' },
{ key: 'show_email', label: __( 'Show email addresses', 'connect-for-procore' ), type: 'toggle' },
{ key: 'all', label: __( 'Fetch every page', 'connect-for-procore' ), type: 'toggle' },
{ key: 'class', label: __( 'Extra CSS classes', 'connect-for-procore' ), type: 'text' },
];

/**
Expand Down Expand Up @@ -122,7 +122,7 @@
key: control.key,
label: control.label,
value: value,
options: [ { label: __( 'Default', 'procore-connect' ), value: '' } ].concat( control.options ),
options: [ { label: __( 'Default', 'connect-for-procore' ), value: '' } ].concat( control.options ),
onChange: function ( next ) {
update( control.key, next );
},
Expand Down Expand Up @@ -155,9 +155,9 @@
{},
el(
PanelBody,
{ title: __( 'Procore data', 'procore-connect' ), initialOpen: true },
{ title: __( 'Procore data', 'connect-for-procore' ), initialOpen: true },
el( SelectControl, {
label: __( 'Show', 'procore-connect' ),
label: __( 'Show', 'connect-for-procore' ),
value: attributes.shortcode,
options: variations.map( function ( item ) {
return { label: item.title, value: item.shortcode };
Expand All @@ -171,7 +171,7 @@
),
el(
PanelBody,
{ title: __( 'Options', 'procore-connect' ), initialOpen: true },
{ title: __( 'Options', 'connect-for-procore' ), initialOpen: true },
buildControls( attributes, setAttributes )
)
);
Expand All @@ -183,14 +183,14 @@
EmptyResponsePlaceholder: function () {
return el(
Placeholder,
{ icon: 'building', label: __( 'Procore', 'procore-connect' ) },
__( 'Nothing to display yet. Check the project and company IDs in the block settings.', 'procore-connect' )
{ icon: 'building', label: __( 'Procore', 'connect-for-procore' ) },
__( 'Nothing to display yet. Check the project and company IDs in the block settings.', 'connect-for-procore' )
);
},
} )
: el(
Placeholder,
{ icon: 'building', label: __( 'Procore', 'procore-connect' ) },
{ icon: 'building', label: __( 'Procore', 'connect-for-procore' ) },
variation ? variation.title : attributes.shortcode
);

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "ibuilder/procore-connect",
"name": "ibuilder/connect-for-procore",
"description": "Connect WordPress to the Procore construction management platform and display project data with shortcodes, blocks and a REST proxy.",
"type": "wordpress-plugin",
"license": "GPL-2.0-or-later",
Expand Down
10 changes: 5 additions & 5 deletions procore-connect.php → connect-for-procore.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<?php
/**
* Plugin Name: Procore Connect
* Plugin Name: Connect for Procore
* Plugin URI: https://github.com/ibuilder/ProcoreWP
* Description: Connect WordPress to the Procore construction management platform. Display projects, teams, drawings, RFIs and more with shortcodes, blocks and a cached REST proxy.
* Version: 2.0.6
* Version: 3.0.0
* Requires at least: 6.5
* Requires PHP: 7.4
* Author: ibuilder
* Author URI: https://github.com/ibuilder
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: procore-connect
* Text Domain: connect-for-procore
* Domain Path: /languages
*
* @package ProcoreConnect
Expand All @@ -22,7 +22,7 @@

defined( 'ABSPATH' ) || exit;

const VERSION = '2.0.6';
const VERSION = '3.0.0';

define( 'PROCORE_CONNECT_VERSION', VERSION );
define( 'PROCORE_CONNECT_FILE', __FILE__ );
Expand All @@ -31,7 +31,7 @@
define( 'PROCORE_CONNECT_BASENAME', plugin_basename( __FILE__ ) );

/**
* PSR-4 autoloader for the Procore Connect namespace.
* PSR-4 autoloader for the Connect for Procore namespace.
*
* Avoids a Composer dependency at runtime so the distributed plugin ships
* without a vendor directory.
Expand Down
4 changes: 2 additions & 2 deletions docs/_config.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
title: Procore Connect
title: Connect for Procore
description: Publish live Procore construction project data on a WordPress site.
remote_theme: just-the-docs/just-the-docs

Expand Down Expand Up @@ -26,7 +26,7 @@ nav_external_links:
hide_icon: false

footer_content: >-
Procore Connect is licensed GPL-2.0-or-later. It is not affiliated with, endorsed by, or
Connect for Procore is licensed GPL-2.0-or-later. It is not affiliated with, endorsed by, or
sponsored by Procore Technologies, Inc.

back_to_top: true
Expand Down
Loading
Loading