From a01367a161fd12c4ab6799c7859c4cba2135dcd4 Mon Sep 17 00:00:00 2001 From: Marc Michalsky Date: Wed, 6 Oct 2021 15:14:32 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20make=20TwingleCampaings=20clonable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TwingleCampaings can be cloned. Cloned campaigns will generate a new cid and url. --- CRM/TwingleCampaign/BAO/TwingleCampaign.php | 31 ++++++++++---------- api/v3/TwingleCampaign/Create.php | 7 +++++ l10n/de_DE/LC_MESSAGES/de_DE.mo | Bin 21914 -> 22243 bytes l10n/de_DE/LC_MESSAGES/de_DE.po | 21 +++++++++++-- l10n/pot/twinglecampaign.pot | 12 ++++++++ twinglecampaign.php | 13 ++++++++ 6 files changed, 66 insertions(+), 18 deletions(-) diff --git a/CRM/TwingleCampaign/BAO/TwingleCampaign.php b/CRM/TwingleCampaign/BAO/TwingleCampaign.php index 1e773c2..2cbc865 100644 --- a/CRM/TwingleCampaign/BAO/TwingleCampaign.php +++ b/CRM/TwingleCampaign/BAO/TwingleCampaign.php @@ -32,15 +32,30 @@ class CRM_TwingleCampaign_BAO_TwingleCampaign { $this->id = $values['id'] ?? NULL; $this->values['campaign_type_id'] = 'twingle_campaign'; + // If there is already an ID for this TwingleProject, get its values from + // the database if ($this->id != NULL) { $this->fetch($this->id); } + + // Update the campaign values $this->update($values); + // Get the parent TwingleProject + // (it doesn't matter how many levels above in the campaign tree it is) $this->getParentProject(); - if (!isset($this->values['cid'])) { + + // If this is a new TwingleCampaign or if it is a cloned TwingleCampaign, + // calculate a cid + if ( + !isset($this->values['cid']) || + (isset($values['clone']) && $values['clone']) + ) { $this->createCid(); } + + // Create an url from the parent TwingleProject url and the cid of this + // TwingleCampaign $this->createUrl(); } @@ -351,20 +366,6 @@ class CRM_TwingleCampaign_BAO_TwingleCampaign { } } - /** - * ## Clone this TwingleProject - * - * This method removes the id from this instance and in the next step it - * creates the clone as a new TwingleCampaign with the same values to - * Twingle. - * - * @throws \CiviCRM_API3_Exception - */ - public - function clone() { - // TODO: implement cloning - } - /** * ## Get ID * diff --git a/api/v3/TwingleCampaign/Create.php b/api/v3/TwingleCampaign/Create.php index d4d9db8..e42c00a 100644 --- a/api/v3/TwingleCampaign/Create.php +++ b/api/v3/TwingleCampaign/Create.php @@ -40,6 +40,13 @@ function _civicrm_api3_twingle_campaign_Create_spec(array &$spec) { 'api.required' => 1, 'description' => E::ts('Optional parent id for this Campaign'), ]; + $spec['clone'] = [ + 'name' => 'clone', + 'title' => E::ts('Clone'), + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'api.required' => 0, + 'description' => E::ts('Set this value to true if this campaign is about to be cloned to recreate cid'), + ]; } diff --git a/l10n/de_DE/LC_MESSAGES/de_DE.mo b/l10n/de_DE/LC_MESSAGES/de_DE.mo index b69812f675d2a02221adb4e10593c4952663004a..7a64892cd08c3b980950268790513f050bc27c62 100644 GIT binary patch delta 6170 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 F`#W^rzcl~= delta 5886 zcmZA533yId0><$ZNysWfh^-{{AQF*SVy{Gl*dn%AgNQu{V*gY-l+Z!6igq%HovMbR zGq$2t%goRkYiUQ&T4!igOKJb_caLX0bD!s(-#Pc*@1Aqda${Pw-DA~O57*VwUhfzV ze-C3S<0KzrGAW-brL)G2C}+%Y9EoXo8k4bJs4=hpE;<7(;y& zR>Kb*UFMKIQDiM%!I(ze5P`lp0E=TL(l;~Cp3lKx>aU~vnuh^cfS$M$b^mVb0qZgA zX}2z8E>bALjn_~=yp8^NA4Bj7^3o=#qA`J33(H_Emc%6FrA==vjalf0bFnAR$GLa~ z^&*2SIoC7MllILR3hKak)EiAjy~#rB3TpwX!JVl44&gBT5+kt*^CvTKD&}DW40wfM z$L6S^-+*fGIJ#6gL!k~{M9o>TDozIiaW?gen1m~_9bU8NYgKj5uScD~kNSN~m@(C{ zC3<5zs+~;K3uIvg&JHs!_t0+QL?R~+qHgpKcX}F#8nS5A95+FYOp>)H(q}WoUY~UZaC{R*nR?_Cr$XC-Pl4aK1rUp&TQd(;nSphjS>t>>W^ z^;M`{l8+kd%~%U}pq_IM)uC%vubRd%OQsg8W3KiT+ED0@YH%5L$786Gsle0Jz*yAK z=Ac&leAEc!+wjHm7kKs_fIH8NGv7aQAp8&n5+ zqw7@)nH1=(*@EifS@g%ts4v=gs1bUC8uDUHwC?l4WDG(z*dNu6k9{3I(M|EsaykiEcW20?78-uA&Lzf!Lr65gwisE%w#4SiK^Qp1U;j&{aKOhHZAoR*Bg3X3?Ai|=7~ ztickNQ&8u>u=P}0(fJLik@*?fp{7(DXR2DG8tjPWF$J|7Mq^prf*tS>YKr~Zx}0qm z!jji&Z-v@!iKrn@vyMcK#8i8I83s|`i2ZR7YHft@IaR|ot*uatu{Vyv)mR68I9VGT zx+rLS^hFKP5Y&idqB@jq>(i0nnt50akE0glT~vcU3C^2`qvk#WHI-4Q`&uA7*z`fQ zmy3D<*K!JaKmqCp`)&OMYAB0PKe&S$ksr|uJrkWd_CdXQ1JoO}#wwVJm2n>GIqQ(w zGFwq2b_dh6|C89Y9-W&v_`G^PFNQQqTXNuvUAN!R7cNPFQGT} zB5aDcP%l_5$vGc|1GWF-C}?pkN6q~fWI>yQs5gF!>VO|BN7u`thO{1X$-IWzPD@a0 zWG#l_K70kQphoy9`eH~&=U+-yuqy4FP88JB(O4TNpoVm%J--Fjk&jRf9Yl@H8B~Lh zum%Qoa{lcXi&{JVP}_P4>dnVvIhO%ot*|-q7U_Ms0R9C2^@+k zI2!f91NQs{)MES=^_&~1H++U+7(%OB^>L`(GXgagTTw4~vHyRzrrZIj@mvUJ)H-|Slgi1L>JT=>4n-ogHdZ|IO;iB7=&|B_bovWeEF!Z z{jbB1D+Nx`y;aonl0*;qt3B_2kY2!T|7!A z+q!s2rjp^RaNH&FM6Y~`=ndmZ0XS@VC63?MP&T@p@0$VH;#G1=iRx&OIjR#JYSj3)=l zZ{#}?N;1h6a*L#pWuydC7lk^$C5b9^J6WEPTqGMDH`BEIAZ=}(pr9bx1i@gl3p zZc<3*6K@*v#I@uR*-u)M@}w`(vBrVFT@AyAW=$S5ENooik#bMG3XfDe5mb1&-d?Z5 z9nnRef#WhKr)OqFre>s%jStKFG&U $campaign_id, 'clone' => true] + ); + CRM_Utils_System::setUFMessage(E::ts('TwingleCampaign was cloned.')); + } catch (CiviCRM_API3_Exception $e) { + Civi::log()->error( + 'twinglecampaign_postSave_callback ' . $e->getMessage() + ); + } + } } // If a TwingleProject is getting saved