Skip to content

Cfm 29 transmogrify plugin #347

Open
wants to merge 48 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
5d6b7f2
Transmogrify plugin
Ioannis Oct 3, 2025
49cd74d
Fixes
Ioannis Oct 3, 2025
8ed6f5c
Improvements.Fixed org identities transmogrify.
Ioannis Oct 10, 2025
d55abb7
OrgIdentities eligibility to transmogrify
Ioannis Oct 11, 2025
a622745
Update Readme.md
Ioannis Oct 11, 2025
7c47b5b
Fix groups transmogrify according to AR-G-9
Ioannis Oct 12, 2025
a5aeb26
fix group members insert throwing exception
Ioannis Oct 14, 2025
a6a1cda
MVEA for person and orgidentity.
Ioannis Oct 14, 2025
e91e921
Fix mveas
Ioannis Oct 14, 2025
792a047
Job history records+servers
Ioannis Oct 16, 2025
873d203
Servers transmogrify
Ioannis Oct 16, 2025
e0be427
Fix command line printer and verbosity
Ioannis Oct 17, 2025
becdb1c
Fix verbosity print
Ioannis Oct 17, 2025
0025011
cleaning
Ioannis Oct 18, 2025
9b5ad89
Put warn counting in cache.Load the plugin in the Application.php.
Ioannis Oct 21, 2025
b561e32
message templates
Ioannis Nov 11, 2025
7e34876
Notifications table
Ioannis Nov 11, 2025
9976032
transmogrify petitions
Ioannis Nov 12, 2025
ab24424
Add support to skip certain tables during transmogrification
Ioannis Nov 15, 2025
590755c
petition status mapper
Ioannis Nov 16, 2025
ee63bd5
Fix login identifier mapping issues.Added enrollment flow transmogrif…
Ioannis Nov 18, 2025
8c86e6e
Historic Petition Viewer initial commit
Ioannis Nov 18, 2025
c5a970d
Sync historic metadata to the plugin's tables
Ioannis Nov 18, 2025
e59030b
HistoricPetitionViewer and Transmogrification adjucstments
Ioannis Nov 19, 2025
25f482d
Add HistoricPetitionViewer cakephp load dependency
Ioannis Nov 19, 2025
3d43e84
Fix person status mapping
Ioannis Nov 20, 2025
5078b1b
Pipelines. Login identifier importing fix/improve. Person status mapper.
Ioannis Nov 20, 2025
a714edf
OrgIdentitySources to ExternalIdentitySources
Ioannis Nov 22, 2025
22ae2ac
External Identity Source Records
Ioannis Nov 24, 2025
a714402
orcid sources
Ioannis Nov 25, 2025
465f150
EnvSources transmogrification. Improve MVA mappers.
Ioannis Nov 26, 2025
314e666
ApiSources
Ioannis Nov 27, 2025
2fa8366
SqlSource,FileSource. Mapper and cache engine improvements.
Ioannis Nov 28, 2025
f0a5296
Authenticators wrappers
Ioannis Nov 29, 2025
761660a
SshKeyAuthenticators
Ioannis Nov 30, 2025
b7a14fd
PasswordAuthenticator
Ioannis Nov 30, 2025
4f21f4d
Fix external identity sources status/sync_mode transmogrification
Ioannis Dec 19, 2025
ba363c6
add autoload requirements
Ioannis Dec 19, 2025
d421f02
Comment out pause statement
Ioannis Dec 19, 2025
c15dffc
Remove obsolete code. Database command will sync the transmogrificati…
Ioannis Jan 15, 2026
599abf2
Add population_hide/CoSettings column
Ioannis Jan 15, 2026
a6cbc9d
Moved services from core to plugin
Ioannis Feb 1, 2026
9f8ac5c
Styling for Historic Petition attributes (CFM-29)
arlen Jan 13, 2026
cb4010c
Fix autoload-static conflict
Ioannis Feb 3, 2026
f9e7f63
Transmogrify IdentifierAssignments
Ioannis Feb 18, 2026
c208519
Improve transmogrification process of selected tables
Ioannis Feb 19, 2026
54bce43
Add uuid to all models that support it
Ioannis Feb 21, 2026
23e64e1
Drop non unique indexes on data loading
Ioannis Feb 27, 2026
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
13 changes: 12 additions & 1 deletion app/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@
"SqlConnector\\": "availableplugins/SqlConnector/src/",
"SshKeyAuthenticator\\": "plugins/SshKeyAuthenticator/src/",
"CoreJob\\": "plugins/CoreJob/src/",
"TermsAgreer\\": "plugins/TermsAgreer/src/"
"TermsAgreer\\": "plugins/TermsAgreer/src/",
"Transmogrify\\": "plugins/Transmogrify/src/",
"HistoricPetitionViewer\\": "plugins/HistoricPetitionViewer/src/"
}
},
"autoload-dev": {
Expand All @@ -70,7 +72,16 @@
"SqlConnector\\Test\\": "availableplugins/SqlConnector/tests/",
"SshKeyAuthenticator\\Test\\": "plugins/SshKeyAuthenticator/tests/",
"CoreJob\\Test\\": "plugins/CoreJob/tests/",
<<<<<<< HEAD
<<<<<<< HEAD
"TermsAgreer\\Test\\": "plugins/TermsAgreer/tests/"
=======
"Transmogrify\\": "plugins/Transmogrify/src/"
>>>>>>> 8a653bfc (Transmogrify plugin)
=======
"Transmogrify\\": "plugins/Transmogrify/src/",
"HistoricPetitionViewer\\": "plugins/HistoricPetitionViewer/src/"
>>>>>>> 90386017 (Historic Petition Viewer initial commit)
}
},
"scripts": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,13 +341,12 @@ protected function selectSequences(
* Perform parameter substitution on an identifier format to generate the base
* string used in identifier assignment.
*
* @since COmanage Registry v5.0.0
* @param EntityInterface $entity Entity to assign Identifier for
* @param string $format Identifier assignment format
* @param PermittedCharactersEnum $permitted Acceptable characters for substituted parameters
* @param boolean $transliterate Whether to apply transliteration in constructing the identifier base
* @param EntityInterface $entity Entity to assign Identifier for
* @param string $format Identifier assignment format
* @param string $permitted Acceptable characters for substituted parameters
* @param boolean $transliterate Whether to apply transliteration in constructing the identifier base
* @return string Identifier with paramaters substituted
* @throws RuntimeException
* @since COmanage Registry v5.0.0
*/

protected function substituteParameters(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<?php
declare(strict_types=1);

namespace HistoricPetitionViewer;

use Cake\Console\CommandCollection;
use Cake\Core\BasePlugin;
use Cake\Core\ContainerInterface;
use Cake\Core\PluginApplicationInterface;
use Cake\Http\MiddlewareQueue;
use Cake\Routing\RouteBuilder;

/**
* Plugin for CoreEnroller
*/
class HistoricPetitionViewerPlugin extends BasePlugin
{
/**
* Load all the plugin configuration and bootstrap logic.
*
* The host application is provided as an argument. This allows you to load
* additional plugin dependencies, or attach events.
*
* @param \Cake\Core\PluginApplicationInterface $app The host application
* @return void
*/
public function bootstrap(PluginApplicationInterface $app): void
{
}

/**
* Add routes for the plugin.
*
* If your plugin has many routes and you would like to isolate them into a separate file,
* you can create `$plugin/config/routes.php` and delete this method.
*
* @param \Cake\Routing\RouteBuilder $routes The route builder to update.
* @return void
*/
public function routes(RouteBuilder $routes): void
{
$routes->plugin(
'HistoricPetitionViewer',
['path' => '/historic-petition-viewer'],
function (RouteBuilder $builder) {
// Your snippet goes here, using $builder instead of $routes
$builder->setRouteClass(DashedRoute::class);

// Add your plugin routes here if needed, then:
$builder->fallbacks(DashedRoute::class);
}
);
parent::routes($routes);
}

/**
* Add middleware for the plugin.
*
* @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to update.
* @return \Cake\Http\MiddlewareQueue
*/
public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
{
// Add your middlewares here

return $middlewareQueue;
}

/**
* Add commands for the plugin.
*
* @param \Cake\Console\CommandCollection $commands The command collection to update.
* @return \Cake\Console\CommandCollection
*/
public function console(CommandCollection $commands): CommandCollection
{
// Add your commands here

$commands = parent::console($commands);

return $commands;
}

/**
* Register application container services.
*
* @param \Cake\Core\ContainerInterface $container The Container to update.
* @return void
* @link https://book.cakephp.org/4/en/development/dependency-injection.html#dependency-injection
*/
public function services(ContainerInterface $container): void
{
// Add your services here
}
}
87 changes: 87 additions & 0 deletions app/plugins/HistoricPetitionViewer/config/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"name": "Historic Petition Viewer",
"version": "1.0.0",
"description": "",
"types": {},
"schema": {
"tables": {
"petition_hist_attrs": {
"comment": "Transmogrified from cm_co_petition_attributes",
"columns": {
"id": { "type": "integer", "autoincrement": true, "primarykey": true },
"petition_id": { "type": "integer", "foreignkey": { "table": "petitions", "column": "id" } },
"historic_petition_viewer_id": {
"type": "integer",
"foreignkey": { "table": "historic_petition_viewers", "column": "id" },
"notnull": false
},

"attribute": { "type": "string", "size": 128 },
"value": { "type": "text" },
"created": { "type": "datetime" },
"modified": { "type": "datetime" },
"petition_hist_attr_id": { "type": "integer", "foreignkey": { "table": "petition_hist_attrs", "column": "id" } },
"revision": { "type": "integer" },
"deleted": { "type": "boolean" },
"actor_identifier": { "type": "string", "size": 256 }
},
"indexes": {
"petition_hist_attrs_i1": { "columns": [ "petition_id" ] },
"petition_hist_attrs_i2": { "columns": [ "attribute" ] },
"petition_hist_attrs_i3": { "columns": [ "petition_hist_attr_id" ] }
},
"timestamps": false,
"changelog": false
},
"petition_meta_hist_recs": {
"comment": "Transmogrified from cm_co_petitions fields that no longer map to petitions",
"columns": {
"id": { "type": "integer", "autoincrement": true, "primarykey": true },
"petition_id": { "type": "integer", "foreignkey": { "table": "petitions", "column": "id" } },
"enrollment_flow_id": { "type": "integer", "foreignkey": { "table": "enrollment_flows", "column": "id" }},
"historic_petition_viewer_id": {
"type": "integer",
"foreignkey": { "table": "historic_petition_viewers", "column": "id" },
"notnull": false
},

"enrollee_org_identity_id": { "type": "integer" },
"archived_org_identity_id": { "type": "integer" },
"enrollee_person_role_id": { "type": "integer" },
"sponsor_person_id": { "type": "integer" },
"approver_person_id": { "type": "integer" },
"co_invite_id": { "type": "integer" },
"vetting_request_id": { "type": "integer" },

"enrollee_token": { "type": "string", "size": 48 },
"petitioner_token": { "type": "string", "size": 48 },
"return_url": { "type": "string", "size": 512 },
"approver_comment": { "type": "string", "size": 256 },

"created": { "type": "datetime" },
"modified": { "type": "datetime" },
"petition_meta_hist_rec_id": { "type": "integer", "foreignkey": { "table": "petition_meta_hist_recs", "column": "id" } },
"revision": { "type": "integer" },
"deleted": { "type": "boolean" },
"actor_identifier": { "type": "string", "size": 256 }
},
"indexes": {
"petition_meta_hist_recs_i1": { "columns": [ "petition_id" ] },
"petition_meta_hist_recs_i2": { "columns": [ "petition_meta_hist_rec_id" ] }
},
"timestamps": false,
"changelog": false
},
"historic_petition_viewers": {
"comment": "Enrollment Flow Step for historic petition data",
"columns": {
"id": { "type": "integer", "autoincrement": true, "primarykey": true },
"enrollment_flow_step_id": { "type": "integer", "foreignkey": { "table": "enrollment_flow_steps", "column": "id" } }
},
"indexes": {
"historic_petition_step_links_i1": { "columns": [ "enrollment_flow_step_id" ] }
}
}
}
}
}
39 changes: 39 additions & 0 deletions app/plugins/HistoricPetitionViewer/config/routes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

/**
* Historic Petition Viewer plugin specific routes.
*
* Portions licensed to the University Corporation for Advanced Internet
* Development, Inc. ("UCAID") under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* UCAID licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @link https://www.internet2.edu/comanage COmanage Project
* @package registry-plugins
* @since COmanage Registry v5.2.0
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/

declare(strict_types=1);

use Cake\Routing\Route\DashedRoute;

$routes->plugin(
'HistoricPetitionViewer',
['path' => '/historic-petition-viewer/'],
function ($routes) {
$routes->setRouteClass(DashedRoute::class);
}
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# COmanage Registry Localizations (historic_petition_viewer domain)
#
# Portions licensed to the University Corporation for Advanced Internet
# Development, Inc. ("UCAID") under one or more contributor license agreements.
# See the NOTICE file distributed with this work for additional information
# regarding copyright ownership.
#
# UCAID licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at:
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# @link https://www.internet2.edu/comanage COmanage Project
# @package registry-plugins
# @since COmanage Registry v5.2.0
# @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)


msgid "attributes"
msgstr "Attributes"

msgid "attributes.none"
msgstr "No historic attributes recorded for this petition."

msgid "historic.petition"
msgstr "Historic Petition #{0}"

msgid "metadata"
msgstr "Metadata"

msgid "metadata.none"
msgstr "No historic metadata recorded for this petition."
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);

namespace HistoricPetitionViewer\Controller;

use App\Controller\AppController as BaseController;

class AppController extends BaseController
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
/**
* COmanage Registry Historic Petition Viewers Controller
*
* Portions licensed to the University Corporation for Advanced Internet
* Development, Inc. ("UCAID") under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* UCAID licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @link https://www.internet2.edu/comanage COmanage Project
* @package registry-plugins
* @since COmanage Registry v5.2.0
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/

declare(strict_types=1);

namespace HistoricPetitionViewer\Controller;

use App\Controller\StandardPluginController;

class HistoricPetitionViewersController extends StandardPluginController {
protected array $paginate = [
'order' => [
'HistoricPetitionViewers.id' => 'asc'
]
];
}
Loading