{"id":31847247,"url":"https://github.com/opencontentcoop/oceditorialstuff","last_synced_at":"2026-01-20T17:57:25.753Z","repository":{"id":57032172,"uuid":"52287128","full_name":"OpencontentCoop/oceditorialstuff","owner":"OpencontentCoop","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-11T07:14:55.000Z","size":331,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-11T12:12:39.157Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpencontentCoop.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-02-22T16:25:03.000Z","updated_at":"2025-09-11T07:14:48.000Z","dependencies_parsed_at":"2025-05-30T16:54:56.546Z","dependency_job_id":null,"html_url":"https://github.com/OpencontentCoop/oceditorialstuff","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/OpencontentCoop/oceditorialstuff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpencontentCoop%2Foceditorialstuff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpencontentCoop%2Foceditorialstuff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpencontentCoop%2Foceditorialstuff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpencontentCoop%2Foceditorialstuff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpencontentCoop","download_url":"https://codeload.github.com/OpencontentCoop/oceditorialstuff/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpencontentCoop%2Foceditorialstuff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279010942,"owners_count":26084837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-12T09:42:39.736Z","updated_at":"2025-10-12T09:42:42.050Z","avatar_url":"https://github.com/OpencontentCoop.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# OpenContent Editorial Stuff\n\n## Introduzione\nL'estensione **OpenContent Editorial Stuff** serve ad esporre alla redazione web una dashboard di pubblicazione orientata al workflow. Permette di configurare più dashboard ciascuna orientata a una classe di contenuto.\n\nDi default l'estensione permette:\n\n * l'asseganzione di stati, \n * un motore di ricerca filtrabile per stati, \n * l'accesso alla modifica dei contenuti, \n * l'inserimento *smart and mobile* dei file media, \n * l'invio di mail collaborative a uno o più utenti con il contentuto dell'oggetto\n * l'invio di tweet o feed Facebook (se NGPush è stata correttamente configurata)\n * la visualizzazione della cronologia delle modifiche\n * la visualizzazione di commenti interni\n\n## Requisiti\n * eZPublish Legacy versione \u003e 4.7\n * Estensione OCBootstrap\n * Estensione OCSearchTools\n * Estensione OCOperatorsCollection\n * Estensione NGPush (opzionale)\n \n## Installazione\n\n * Clonare l'estensione nella cartella `\u003cez_legacy_root\u003e/extension`\n * Importare nel database la tabella schema.sql\n * Rigenerare autoloads e svuotare cache ini e templates\n * Customizzare il file `editorialstuff.ini` in un suo override \n \n## Utilizzo e customizzazione\n\n### Configurazione di una dashboard\n\nCiascuna dashboard corrisponde a una configurazione presente nel file `editorialstuff.ini`.\n\nLe dashboard attive sono quelle presenti in `AvailableFactories/Identifiers` ciascuna raggiungibile dal percorso `http://\u003cyour_domain\u003e/editorialstuff/dashboard/\u003cidentifier\u003e`.\n\nDi default l'estensione viene rilasciata con un dashboard **demo**, raggiungibile da `http://\u003cyour_domain\u003e/editorialstuff/dashboard/demo`, le cui impostazioni sono definite nel blocco `demo` (esattemente come l'identifier).\n\n\n\t[demo]\t\n\tClassIdentifier=folder\n\tCreationRepositoryNode=2\n\tCreationButtonText=Crea nuova cartella\n\tRepositoryNodes[]\n\tRepositoryNodes[]=1\n\tAttributeIdentifiers[]\n\tAttributeIdentifiers[images]=images\n\tAttributeIdentifiers[videos]=video\n\tAttributeIdentifiers[audios]=audio\n\tAttributeIdentifiers[tags]=argomento\n\tStateGroup=test\n\tStates[draft]=Bozza\n\tStates[published]=Pubblicato\n\t#ClassName=YourCustomPHPClass\n\n - in `ClassIdentifier`va definito l'identificatore della classe in cui oggetti saranno visualizzati e gestiti in dashboard\n - in `CreationRepositoryNode` va specificato il nodo parent ove vengono creati nuovi oggetti attraverso il bottone presente in dashbaord \n - in `CreationButtonText`va definita l'etichetta del bottone di cui al punto precedente\n - in `RepositoryNodes` vanno definiti i nodi parent da cui fecciare gli oggetti in dashboard\n - in `AttributeIdentifiers` vanno mappati gli attributi della classe: images, videos e audios devono essere attributi di tipo ***Relazioni Oggetti (eZObjectRelationList)***, tags di tipo ***eZTags***. Sono opzionali, se non vengono specificati alcune funzionalità non saranno disponibili\n - in `StateGroup`e in `States`vanno specificati il gruppo e gli stati (identificatore=\u003enome) che la dashboard prenderà in considerazione (se non sono presenti nel sistema, l'estensione provvederà a crearli)\n\n### Utilizzare le Actions\n\nL'estensione fornisce di default due azioni `AddLocation` e `RemoveLocation`.\n\n    [AvailableActions]\n    Actions[]\n    Actions[]=AddLocation\n    Actions[]=RemoveLocation\n\n    [AddLocation]\n    ClassName=OCEditorialStuffActionHandler\n    MethodName=addLocation\n\n    [RemoveLocation]\n    ClassName=OCEditorialStuffActionHandler\n    MethodName=removeLocation\n\nNel gruppo di configurazione della singola dashboard è possibile specificare che azione compiere al passaggio da uno stato all'altro.\n\n\t[demo]\n\t...\n\tActions[]\n    Actions[draft-published]=AddLocation;43;5\n    Actions[published-draft]=RemoveLocation;43;5\n\nNell'esempio di configurazione appena descritto, l'estensione al passaggio di un oggetto da stato draft a stato published provvederà a eseguire la funzione `OCEditorialStuffActionHandler::addLocation` passandole come parametri gli id 43 3 5 oltre che il contenuto corrente (OCEditorialStuffPost)\nViceversa al passaggio da stato published a stato draft utilizzerà la funzione opposta `OCEditorialStuffActionHandler::removeLocation`\n\nPer aggiungere azioni è sufficiente elencarne il titolo nella configurazione `AvailableActions` e specificarne in un blocco ad hoc la classe e il metodo da invocare.\nIl metodo invocato si aspetta come primo paramtero il contenuto corrente (OCEditorialStuffPost) e come secondo parametro l'array dei valori specificati nel file di configurazione.\nNell'esempio su descritto il metodo php invocato è:\n\n\n    // $addLocationIds = array( 43, 5 );\n    public static function addLocation( OCEditorialStuffPost $post, $addLocationIds )\n    {\n        $object = $post-\u003egetObject();\n        if ( $object instanceof eZContentObject )\n        {\n            eZContentOperationCollection::addAssignment(\n                $object-\u003eattribute( 'main_node_id' ),\n                $object-\u003eattribute( 'id' ),\n                $addLocationIds\n            );\n        }\n        else\n        {\n            eZDebug::writeError( \"Object not found\", __METHOD__ );\n        }\n    }\n\n### Customizzazione dell'intera classe PHP responsabile dei cambiamenti\n\n\t[demo]\n\t...\n\tClassName=YourCustomPHPClass\n\nInfine nel parametro opzionale `ClassName` è possibile specificare la classe PHP che si occuperà di gestire ciascun singolo post. Se il parametro non è specificato verrà utilizzata la classe `OCEditorialStuffPostDefaultFactory`\n\nDefinire una classe custom serve a customizzare ciò che avviene al passaggio di stato: la classe deve infatti estendere la classe astratta `OCEditorialStuffPostFactory` e perciò implemetare il metodo `onChangeState`, ad esempio:\n\t\n\tclass MyCustomEditorialStuffPostFactory extends OCEditorialStuffPostFactory\n\t{\n\t\t// se lo stato dell'oggetto viene cambiato da 'foo' a 'bar' \n\t\t// all'oggetto viene aggiunta una collocazione in Media\n\n\t\tpublic function onChangeState( \n\t\t\tOCEditorialStuffPost $post, \n\t\t\teZContentObjectState $beforeState, \n\t\t\teZContentObjectState $afterState \n\t\t)\n\t\t{\n\t\t\t$currentObject = $post-\u003egetObject();\n\t\t\tif ( $beforeState-\u003eattribute( 'identifier' ) == 'foo' \n\t\t\t\t \u0026\u0026 $afterState-\u003eattribute( 'identifier' ) == 'bar' )\n\t\t\t{\n\t\t\t\tOCEditorialStuffHistory::addHistoryToObjectId( $post-\u003eid(), 'My custom history item', array( 'name' =\u003e 'My custom history item parameter' ) );\n\t\t\t}\t\n\t\t}\n\t}\n(Da notare che l'oggetto OCEditorialStuffPost $post incapsula un eZContentObject.)\n\n### Attivazione della chat interna\n\nPer attivare i commenti interni è necessario creare un attributo di tipo ***Commenti (ezcomComments)*** nella classe specificata: l'attributo ***deve*** avere come identificatore `internal_comment`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencontentcoop%2Foceditorialstuff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencontentcoop%2Foceditorialstuff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencontentcoop%2Foceditorialstuff/lists"}