From 7cca29b458322b32065433dda2cd4e727e8e78ed Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 3 Sep 2024 13:19:48 +0200 Subject: [PATCH 01/15] Back to 1.5-dev --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index f58beb4..d715ec8 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - 2024-09-03 - 1.5-beta1 - beta + + 1.5-dev + dev 5.58 From 64d6b48813338c1f210d1d9cc9adbd51aeb3afe2 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Wed, 11 Sep 2024 12:59:22 +0200 Subject: [PATCH 02/15] Fix DAO/BAO namespaces and definitions --- .../Twingle}/BAO/TwingleProduct.php | 24 +++++++------------ .../Shop => CRM/Twingle}/BAO/TwingleShop.php | 23 +++++++----------- .../Twingle}/DAO/TwingleProduct.php | 18 +++++++------- .../Shop => CRM/Twingle}/DAO/TwingleShop.php | 12 ++++------ info.xml | 11 +++++---- twingle.civix.php | 22 ----------------- .../CRM/Twingle/TwingleProduct.entityType.php | 2 +- xml/schema/CRM/Twingle/TwingleProduct.xml | 2 +- .../CRM/Twingle/TwingleShop.entityType.php | 2 +- xml/schema/CRM/Twingle/TwingleShop.xml | 2 +- 10 files changed, 41 insertions(+), 77 deletions(-) rename {Civi/Twingle/Shop => CRM/Twingle}/BAO/TwingleProduct.php (96%) rename {Civi/Twingle/Shop => CRM/Twingle}/BAO/TwingleShop.php (95%) rename {Civi/Twingle/Shop => CRM/Twingle}/DAO/TwingleProduct.php (94%) rename {Civi/Twingle/Shop => CRM/Twingle}/DAO/TwingleShop.php (96%) diff --git a/Civi/Twingle/Shop/BAO/TwingleProduct.php b/CRM/Twingle/BAO/TwingleProduct.php similarity index 96% rename from Civi/Twingle/Shop/BAO/TwingleProduct.php rename to CRM/Twingle/BAO/TwingleProduct.php index 62f37c3..f696807 100644 --- a/Civi/Twingle/Shop/BAO/TwingleProduct.php +++ b/CRM/Twingle/BAO/TwingleProduct.php @@ -1,16 +1,10 @@ [$external_id, 'String']]); if ($dao->fetch()) { $product = new self(); @@ -456,7 +450,7 @@ class TwingleProduct extends TwingleProductDAO { // Try to lookup object in database try { - $dao = TwingleShopDAO::executeQuery("SELECT * FROM civicrm_twingle_product WHERE external_id = %1", + $dao = CRM_Twingle_BAO_TwingleShop::executeQuery("SELECT * FROM civicrm_twingle_product WHERE external_id = %1", [1 => [$this->external_id, 'String']]); if ($dao->fetch()) { $this->copyValues(array_merge($dao->toArray(), $this->getAttributes())); @@ -514,7 +508,7 @@ class TwingleProduct extends TwingleProductDAO { /** * Delete TwingleProduct along with associated PriceField and PriceFieldValue. * - * @override \Civi\Twingle\Shop\DAO\TwingleProduct::delete + * @override \CRM_Twingle_DAO_TwingleProduct::delete * @throws \CRM_Core_Exception * @throws \Civi\Twingle\Shop\Exceptions\ProductException */ @@ -570,7 +564,7 @@ class TwingleProduct extends TwingleProductDAO { /** * Compare two products * - * @param TwingleProduct $product_to_compare_with + * @param CRM_Twingle_BAO_TwingleProduct $product_to_compare_with * Product from database * * @return bool @@ -592,7 +586,7 @@ class TwingleProduct extends TwingleProductDAO { */ public function getFinancialTypeId(): ?int { if (!empty($this->price_field_id)) { - $price_set = \Civi\Api4\PriceField::get() + $price_set = PriceField::get() ->addSelect('financial_type_id') ->addWhere('id', '=', $this->price_field_id) ->execute() @@ -610,7 +604,7 @@ class TwingleProduct extends TwingleProductDAO { */ public function getPriceFieldValueId() { if (!empty($this->price_field_id)) { - $price_field_value = \Civi\Api4\PriceFieldValue::get() + $price_field_value = PriceFieldValue::get() ->addSelect('id') ->addWhere('price_field_id', '=', $this->price_field_id) ->execute() diff --git a/Civi/Twingle/Shop/BAO/TwingleShop.php b/CRM/Twingle/BAO/TwingleShop.php similarity index 95% rename from Civi/Twingle/Shop/BAO/TwingleShop.php rename to CRM/Twingle/BAO/TwingleShop.php index c27853c..dd49596 100644 --- a/Civi/Twingle/Shop/BAO/TwingleShop.php +++ b/CRM/Twingle/BAO/TwingleShop.php @@ -1,15 +1,10 @@ \CRM_Utils_Type::T_INT, @@ -64,14 +59,14 @@ class TwingleShop extends TwingleShopDAO { * @param string $project_identifier * Twingle project identifier * - * @return TwingleShop + * @return CRM_Twingle_BAO_TwingleShop * * @throws ShopException * @throws \Civi\Twingle\Shop\Exceptions\ApiCallError * @throws \CRM_Core_Exception */ public static function findByProjectIdentifier(string $project_identifier) { - $shop = new TwingleShop(); + $shop = new CRM_Twingle_BAO_TwingleShop(); $shop->get('project_identifier', $project_identifier); if (!$shop->id) { $shop->fetchDataFromTwingle($project_identifier); @@ -147,7 +142,7 @@ class TwingleShop extends TwingleShopDAO { // Try to lookup object in database try { - $dao = TwingleShopDAO::executeQuery("SELECT * FROM civicrm_twingle_shop WHERE project_identifier = %1", + $dao = self::executeQuery("SELECT * FROM civicrm_twingle_shop WHERE project_identifier = %1", [1 => [$this->project_identifier, 'String']]); if ($dao->fetch()) { $this->load($dao->toArray()); @@ -259,7 +254,7 @@ class TwingleShop extends TwingleShopDAO { }, []); foreach ($products_from_db as $product) { - /* @var TwingleProductBAO $product */ + /* @var CRM_Twingle_BAO_TwingleProduct $product */ // Find orphaned products which are in the database but not in Twingle $found = array_key_exists($product->external_id, $products_from_twingle); @@ -286,8 +281,8 @@ class TwingleShop extends TwingleShopDAO { foreach ($products_from_twingle as $product_from_twingle) { $found = array_key_exists($product_from_twingle['id'], $products); if (!$found) { - $product = new TwingleProduct(); - $product->load(TwingleProduct::renameTwingleAttrs($product_from_twingle)); + $product = new CRM_Twingle_BAO_TwingleProduct(); + $product->load(CRM_Twingle_BAO_TwingleProduct::renameTwingleAttrs($product_from_twingle)); $product->twingle_shop_id = $this->id; $this->products[] = $product; } @@ -305,13 +300,13 @@ class TwingleShop extends TwingleShopDAO { public function getProducts() { $products = []; - $result = TwingleProductBAO::executeQuery( + $result = CRM_Twingle_BAO_TwingleProduct::executeQuery( "SELECT * FROM civicrm_twingle_product WHERE twingle_shop_id = %1", [1 => [$this->id, 'Integer']] ); while ($result->fetch()) { - $product = new TwingleProductBAO(); + $product = new CRM_Twingle_BAO_TwingleProduct(); $product->load($result->toArray()); $products[] = $product; } diff --git a/Civi/Twingle/Shop/DAO/TwingleProduct.php b/CRM/Twingle/DAO/TwingleProduct.php similarity index 94% rename from Civi/Twingle/Shop/DAO/TwingleProduct.php rename to CRM/Twingle/DAO/TwingleProduct.php index 9d4f075..3adeae7 100644 --- a/Civi/Twingle/Shop/DAO/TwingleProduct.php +++ b/CRM/Twingle/DAO/TwingleProduct.php @@ -1,7 +1,5 @@ 'civicrm_twingle_product.id', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -167,7 +165,7 @@ class TwingleProduct extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_product.external_id', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -189,7 +187,7 @@ class TwingleProduct extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_product.price_field_id', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, 'FKClassName' => 'CRM_Contact_DAO_Contact', 'add' => NULL, @@ -208,9 +206,9 @@ class TwingleProduct extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_product.twingle_shop_id', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, - 'FKClassName' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'FKClassName' => 'CRM_Twingle_DAO_TwingleShop', 'add' => NULL, ], 'created_at' => [ @@ -228,7 +226,7 @@ class TwingleProduct extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_product.created_at', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, 'add' => NULL, ], @@ -247,7 +245,7 @@ class TwingleProduct extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_product.updated_at', 'table_name' => 'civicrm_twingle_product', 'entity' => 'TwingleProduct', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'bao' => 'CRM_Twingle_DAO_TwingleProduct', 'localizable' => 0, 'add' => NULL, ], diff --git a/Civi/Twingle/Shop/DAO/TwingleShop.php b/CRM/Twingle/DAO/TwingleShop.php similarity index 96% rename from Civi/Twingle/Shop/DAO/TwingleShop.php rename to CRM/Twingle/DAO/TwingleShop.php index bef6db7..4b6e704 100644 --- a/Civi/Twingle/Shop/DAO/TwingleShop.php +++ b/CRM/Twingle/DAO/TwingleShop.php @@ -1,7 +1,5 @@ 'civicrm_twingle_shop.id', 'table_name' => 'civicrm_twingle_shop', 'entity' => 'TwingleShop', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'bao' => 'CRM_Twingle_DAO_TwingleShop', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -159,7 +157,7 @@ class TwingleShop extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_shop.project_identifier', 'table_name' => 'civicrm_twingle_shop', 'entity' => 'TwingleShop', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'bao' => 'CRM_Twingle_DAO_TwingleShop', 'localizable' => 0, 'html' => [ 'type' => 'Text', @@ -181,7 +179,7 @@ class TwingleShop extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_shop.numerical_project_id', 'table_name' => 'civicrm_twingle_shop', 'entity' => 'TwingleShop', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'bao' => 'CRM_Twingle_DAO_TwingleShop', 'localizable' => 0, 'html' => [ 'type' => 'Number', @@ -202,7 +200,7 @@ class TwingleShop extends \CRM_Core_DAO { 'where' => 'civicrm_twingle_shop.price_set_id', 'table_name' => 'civicrm_twingle_shop', 'entity' => 'TwingleShop', - 'bao' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'bao' => 'CRM_Twingle_DAO_TwingleShop', 'localizable' => 0, 'FKClassName' => 'CRM_Price_DAO_PriceSet', 'add' => NULL, diff --git a/info.xml b/info.xml index d715ec8..c019d80 100644 --- a/info.xml +++ b/info.xml @@ -20,7 +20,11 @@ 5.58 - + + + + + de.systopia.xcm @@ -32,10 +36,7 @@ menu-xml@1.0.0 mgd-php@1.0.0 smarty-v2@1.0.1 + entity-types-php@1.0.0 - - - - CRM_Twingle_Upgrader diff --git a/twingle.civix.php b/twingle.civix.php index 6d84d1c..c207adf 100644 --- a/twingle.civix.php +++ b/twingle.civix.php @@ -198,25 +198,3 @@ function _twingle_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) { } } } - -/** - * (Delegated) Implements hook_civicrm_entityTypes(). - * - * Find any *.entityType.php files, merge their content, and return. - * - * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes - */ -function _twingle_civix_civicrm_entityTypes(&$entityTypes) { - $entityTypes = array_merge($entityTypes, [ - 'Civi\Twingle\Shop\DAO\TwingleProduct' => [ - 'name' => 'TwingleProduct', - 'class' => 'Civi\Twingle\Shop\DAO\TwingleProduct', - 'table' => 'civicrm_twingle_product', - ], - 'Civi\Twingle\Shop\DAO\TwingleShop' => [ - 'name' => 'TwingleShop', - 'class' => 'Civi\Twingle\Shop\DAO\TwingleShop', - 'table' => 'civicrm_twingle_shop', - ], - ]); -} diff --git a/xml/schema/CRM/Twingle/TwingleProduct.entityType.php b/xml/schema/CRM/Twingle/TwingleProduct.entityType.php index 5b8879b..153d50b 100644 --- a/xml/schema/CRM/Twingle/TwingleProduct.entityType.php +++ b/xml/schema/CRM/Twingle/TwingleProduct.entityType.php @@ -4,7 +4,7 @@ return [ [ 'name' => 'TwingleProduct', - 'class' => 'Civi\Twingle\Shop\DAO\TwingleProduct', + 'class' => 'CRM_Twingle_DAO_TwingleProduct', 'table' => 'civicrm_twingle_product', ], ]; diff --git a/xml/schema/CRM/Twingle/TwingleProduct.xml b/xml/schema/CRM/Twingle/TwingleProduct.xml index 5787e69..4b6e48a 100644 --- a/xml/schema/CRM/Twingle/TwingleProduct.xml +++ b/xml/schema/CRM/Twingle/TwingleProduct.xml @@ -1,7 +1,7 @@ - CRM/Twingle/Shop + CRM/TwingleTwingleProductcivicrm_twingle_productThis table contains the Twingle Product data. diff --git a/xml/schema/CRM/Twingle/TwingleShop.entityType.php b/xml/schema/CRM/Twingle/TwingleShop.entityType.php index 34e6ce2..5fe53ea 100644 --- a/xml/schema/CRM/Twingle/TwingleShop.entityType.php +++ b/xml/schema/CRM/Twingle/TwingleShop.entityType.php @@ -4,7 +4,7 @@ return [ [ 'name' => 'TwingleShop', - 'class' => 'Civi\Twingle\Shop\DAO\TwingleShop', + 'class' => 'CRM_Twingle_DAO_TwingleShop', 'table' => 'civicrm_twingle_shop', ], ]; diff --git a/xml/schema/CRM/Twingle/TwingleShop.xml b/xml/schema/CRM/Twingle/TwingleShop.xml index 3d9d6ba..5b45a77 100644 --- a/xml/schema/CRM/Twingle/TwingleShop.xml +++ b/xml/schema/CRM/Twingle/TwingleShop.xml @@ -1,7 +1,7 @@
- CRM/Twingle/Shop + CRM/TwingleTwingleShopcivicrm_twingle_shopThis table contains the Twingle Shop data. Each Twingle Shop is linked to a corresponding Price Set. From 4ae20a1b04f283c900b0866003050f1ca9d06d6c Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Wed, 11 Sep 2024 13:19:54 +0200 Subject: [PATCH 03/15] Fix form template issues (help texts, undefined template variables, etc.) --- CRM/Twingle/Form/Settings.php | 40 ++++++++++++------------- templates/CRM/Twingle/Form/Profile.hlp | 4 +-- templates/CRM/Twingle/Form/Settings.hlp | 4 +++ templates/CRM/Twingle/Form/Settings.tpl | 20 ++++--------- 4 files changed, 32 insertions(+), 36 deletions(-) diff --git a/CRM/Twingle/Form/Settings.php b/CRM/Twingle/Form/Settings.php index a92535e..450b52a 100644 --- a/CRM/Twingle/Form/Settings.php +++ b/CRM/Twingle/Form/Settings.php @@ -29,16 +29,16 @@ class CRM_Twingle_Form_Settings extends CRM_Core_Form { * List of all settings options. */ public static $SETTINGS_LIST = [ - 'twingle_prefix', - 'twingle_use_sepa', - 'twingle_dont_use_reference', - 'twingle_protect_recurring', - 'twingle_protect_recurring_activity_type', - 'twingle_protect_recurring_activity_subject', - 'twingle_protect_recurring_activity_status', - 'twingle_protect_recurring_activity_assignee', - 'twingle_use_shop', - 'twingle_access_key', + 'twingle_prefix', + 'twingle_use_sepa', + 'twingle_dont_use_reference', + 'twingle_protect_recurring', + 'twingle_protect_recurring_activity_type', + 'twingle_protect_recurring_activity_subject', + 'twingle_protect_recurring_activity_status', + 'twingle_protect_recurring_activity_assignee', + 'twingle_use_shop', + 'twingle_access_key', ]; /** @@ -110,22 +110,22 @@ class CRM_Twingle_Form_Settings extends CRM_Core_Form { $this->add( 'checkbox', 'twingle_use_shop', - E::ts("Use Twingle Shop Integration") + E::ts('Use Twingle Shop Integration') ); $this->add( 'text', 'twingle_access_key', - E::ts("Twingle Access Key") + E::ts('Twingle Access Key') ); - $this->addButtons(array( - array ( - 'type' => 'submit', - 'name' => E::ts('Save'), - 'isDefault' => TRUE, - ) - )); + $this->addButtons([ + [ + 'type' => 'submit', + 'name' => E::ts('Save'), + 'isDefault' => TRUE, + ], + ]); // set defaults foreach (self::$SETTINGS_LIST as $setting) { @@ -164,7 +164,7 @@ class CRM_Twingle_Form_Settings extends CRM_Core_Form { CRM_Utils_Array::value('twingle_use_shop', $this->_submitValues) && !CRM_Utils_Array::value('twingle_access_key', $this->_submitValues, FALSE) ) { - $this->_errors['twingle_access_key'] = E::ts("An Access Key is required to enable Twingle Shop Integration"); + $this->_errors['twingle_access_key'] = E::ts('An Access Key is required to enable Twingle Shop Integration'); } return (0 == count($this->_errors)); diff --git a/templates/CRM/Twingle/Form/Profile.hlp b/templates/CRM/Twingle/Form/Profile.hlp index 8098450..5e1a401 100644 --- a/templates/CRM/Twingle/Form/Profile.hlp +++ b/templates/CRM/Twingle/Form/Profile.hlp @@ -91,7 +91,7 @@ {/htxt} {htxt id='id-shop_map_products'} -

{ts domain="de.systopia.twingle"}If this option is enabled, all Twingle Shop products corresponding to the specified project IDs will be retrieved from Twingle and mapped as price sets and price fields. Each Twingle Shop is mapped as a price set with its products as price fields.

-

This allows you to manually create contributions with the same line items for phone orders, for example, as would be the case for orders placed through the Twingle Shop.

+

{ts domain="de.systopia.twingle"}If this option is enabled, all Twingle Shop products corresponding to the specified project IDs will be retrieved from Twingle and mapped as price sets and price fields. Each Twingle Shop is mapped as a price set with its products as price fields.{/ts}

+

{ts domain="de.systopia.twingle"}This allows you to manually create contributions with the same line items for phone orders, for example, as would be the case for orders placed through the Twingle Shop.{/ts}

{/htxt} {/crmScope} diff --git a/templates/CRM/Twingle/Form/Settings.hlp b/templates/CRM/Twingle/Form/Settings.hlp index bfd00e2..fe0d483 100644 --- a/templates/CRM/Twingle/Form/Settings.hlp +++ b/templates/CRM/Twingle/Form/Settings.hlp @@ -31,3 +31,7 @@ {htxt id='id-twingle_use_shop'} {ts domain="de.systopia.twingle"}If you enable Twingle Shop integration, you can configure Twingle API profiles to include products ordered through Twingle Shop as line items in the created contribution.{/ts} {/htxt} + +{htxt id='id-twingle_access_key'} + {ts domain="de.systopia.twingle"}Enter your twingle API access key.{/ts} +{/htxt} diff --git a/templates/CRM/Twingle/Form/Settings.tpl b/templates/CRM/Twingle/Form/Settings.tpl index 906a91c..b13760a 100644 --- a/templates/CRM/Twingle/Form/Settings.tpl +++ b/templates/CRM/Twingle/Form/Settings.tpl @@ -89,24 +89,16 @@
- - + - - +
{$form.twingle_use_shop.label}   - {$form.twingle_use_shop.html} -
- - {$formElements.twingle_use_shop.description} - +
{$form.twingle_use_shop.label} + {help id="id-twingle_use_shop" title=$form.twingle_use_shop.label} {$form.twingle_use_shop.html}
{$form.twingle_access_key.label}   - {$form.twingle_access_key.html} -
- - {$formElements.twingle_access_key.description} - +
{$form.twingle_access_key.label} + {help id="id-twingle_access_key" title=$form.twingle_access_key.label} {$form.twingle_access_key.html}
From fa301676e389ee9d8ebf448f7f5e2ba85cd594eb Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Wed, 11 Sep 2024 13:30:39 +0200 Subject: [PATCH 04/15] Update translation template and fix incorrect use of ts() --- CRM/Twingle/BAO/TwingleProduct.php | 21 +- CRM/Twingle/BAO/TwingleShop.php | 18 +- CRM/Twingle/Form/Profile.php | 3 +- CRM/Twingle/Submission.php | 2 +- l10n/de.systopia.twingle.pot | 1092 +++++++++++++++++++++------- 5 files changed, 862 insertions(+), 274 deletions(-) diff --git a/CRM/Twingle/BAO/TwingleProduct.php b/CRM/Twingle/BAO/TwingleProduct.php index f696807..c782314 100644 --- a/CRM/Twingle/BAO/TwingleProduct.php +++ b/CRM/Twingle/BAO/TwingleProduct.php @@ -458,7 +458,7 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { } catch (\Civi\Core\Exception\DBQueryException $e) { throw new ProductException( - E::ts('Could not find TwingleProduct in database: ' . $e->getMessage()), + E::ts('Could not find TwingleProduct in database: %1', [1 => $e->getMessage()]), ShopException::ERROR_CODE_COULD_NOT_FIND_SHOP_IN_DB); } @@ -466,7 +466,8 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { $twingle_product_values = $this->getAttributes(); try { \CRM_Utils_Hook::pre($mode, 'TwingleProduct', $this->id, $twingle_product_values); - } catch (\Exception $e) { + } + catch (\Exception $e) { $tx->rollback(); throw $e; } @@ -481,14 +482,15 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { // Save object to database try { $this->save(); - } catch (\Exception $e) { + } + catch (\Exception $e) { $tx->rollback(); throw new ProductException( - E::ts('Could not save TwingleProduct to database: ' . $e->getMessage()), + E::ts('Could not save TwingleProduct to database: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_COULD_NOT_CREATE_PRODUCT); } $result = self::findById($this->id); - /* @var self $result */ + /** @var self $result */ $this->load($result->getAttributes()); // Register post-hook @@ -629,7 +631,7 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { } catch (CRM_Core_Exception $e) { throw new ProductException( - E::ts('An Error occurred while searching for the associated PriceFieldValue: ' . $e->getMessage()), + E::ts('An Error occurred while searching for the associated PriceFieldValue: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_PRICE_FIELD_VALUE_NOT_FOUND); } try { @@ -637,7 +639,7 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { } catch (CRM_Core_Exception $e) { throw new ProductException( - E::ts('Could not delete associated PriceFieldValue: ' . $e->getMessage()), + E::ts('Could not delete associated PriceFieldValue: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_COULD_NOT_DELETE_PRICE_FIELD_VALUE); } @@ -661,13 +663,14 @@ class CRM_Twingle_BAO_TwingleProduct extends CRM_Twingle_DAO_TwingleProduct { } catch (CRM_Core_Exception $e) { throw new ProductException( - E::ts('An Error occurred while searching for the associated PriceField: ' . $e->getMessage()), + E::ts('An Error occurred while searching for the associated PriceField: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_PRICE_FIELD_NOT_FOUND); } throw new ProductException( - E::ts('Could not delete associated PriceField: ' . $e->getMessage()), + E::ts('Could not delete associated PriceField: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_COULD_NOT_DELETE_PRICE_FIELD); } $this->price_field_id = NULL; } + } diff --git a/CRM/Twingle/BAO/TwingleShop.php b/CRM/Twingle/BAO/TwingleShop.php index dd49596..a4b006c 100644 --- a/CRM/Twingle/BAO/TwingleShop.php +++ b/CRM/Twingle/BAO/TwingleShop.php @@ -147,9 +147,10 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { if ($dao->fetch()) { $this->load($dao->toArray()); } - } catch (\Civi\Core\Exception\DBQueryException $e) { + } + catch (\Civi\Core\Exception\DBQueryException $e) { throw new ShopException( - E::ts('Could not find TwingleShop in database: ' . $e->getMessage()), + E::ts('Could not find TwingleShop in database: %1', [1 => $e->getMessage()]), ShopException::ERROR_CODE_COULD_NOT_FIND_SHOP_IN_DB); } @@ -191,7 +192,7 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { catch (\CRM_Core_Exception $e) { if ($e->getMessage() != 'Expected one PriceSet but found 0') { throw new ShopException( - E::ts('Could not find associated PriceSet: ' . $e->getMessage()), + E::ts('Could not find associated PriceSet: %1', [1 => $e->getMessage()]), ShopException::ERROR_CODE_PRICE_SET_NOT_FOUND); } else { @@ -207,7 +208,7 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { ['id' => $this->price_set_id]); } catch (\CRM_Core_Exception $e) { throw new ShopException( - E::ts('Could not delete associated PriceSet: ' . $e->getMessage()), + E::ts('Could not delete associated PriceSet: %1', [1 => $e->getMessage()]), ShopException::ERROR_CODE_COULD_NOT_DELETE_PRICE_SET); } @@ -451,9 +452,10 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { public function deleteProducts() { try { $products = $this->getProducts(); - } catch (\Civi\Core\Exception\DBQueryException $e) { + } + catch (\Civi\Core\Exception\DBQueryException $e) { throw new ProductException( - E::ts('Could not retrieve associated products: ' . $e->getMessage()), + E::ts('Could not retrieve associated products: %1', [1 => $e->getMessage()]), ProductException::ERROR_CODE_COULD_NOT_GET_PRODUCTS ); } @@ -464,8 +466,8 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { } catch (ProductException $e) { throw new ProductException( - E::ts('Could not delete associated products: ' . $e->getMessage()), - ProductException::ERROR_CODE_COULD_NOT_DELETE_PRICE_SET + E::ts('Could not delete associated products: %1', [1 => $e->getMessage()]), + ProductException::ERROR_CODE_COULD_NOT_DELETE_PRICE_SET, ); } } diff --git a/CRM/Twingle/Form/Profile.php b/CRM/Twingle/Form/Profile.php index 73022cd..76c9cb4 100644 --- a/CRM/Twingle/Form/Profile.php +++ b/CRM/Twingle/Form/Profile.php @@ -648,8 +648,7 @@ class CRM_Twingle_Form_Profile extends CRM_Core_Form { if (!isset($profile_data[$key]) && $required) { CRM_Core_Session::setStatus( E::ts( - 'The required configuration option "%1" has no value.' - . ' Saving the profile might set this option to a possibly unwanted default value.', + 'The required configuration option "%1" has no value. Saving the profile might set this option to a possibly unwanted default value.', [1 => $metadata['label'] ?? $key] ), E::ts('Error'), diff --git a/CRM/Twingle/Submission.php b/CRM/Twingle/Submission.php index 48c658a..2c3e85d 100644 --- a/CRM/Twingle/Submission.php +++ b/CRM/Twingle/Submission.php @@ -546,7 +546,7 @@ class CRM_Twingle_Submission { if (!empty($line_item['is_error'])) { $line_item_name = $line_item_data['name']; throw new CiviCRM_API3_Exception( - E::ts("Could not create line item for product '$line_item_name'"), + E::ts("Could not create line item for product '%1'", [1 => $line_item_name]), 'api_error' ); } diff --git a/l10n/de.systopia.twingle.pot b/l10n/de.systopia.twingle.pot index 439b9b5..2a38969 100644 --- a/l10n/de.systopia.twingle.pot +++ b/l10n/de.systopia.twingle.pot @@ -1,1016 +1,1600 @@ -#: ./CRM/Twingle/Config.php +#: CRM/Twingle/Config.php msgid "No" msgstr "" -#: ./CRM/Twingle/Config.php +#: CRM/Twingle/Config.php msgid "Raise Exception" msgstr "" -#: ./CRM/Twingle/Config.php +#: CRM/Twingle/Config.php msgid "Create Activity" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Profile with ID \"%1\" not found" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Delete Twingle API profile %1" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./templates/CRM/Twingle/Page/Profiles.tpl +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Page/Profiles.tpl msgid "Reset" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./templates/CRM/Twingle/Page/Profiles.tpl +#: CRM/Twingle/Form/Profile.php js/twingle_shop.js templates/CRM/Twingle/Page/Profiles.tpl msgid "Delete" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "The profile is invalid and cannot be copied." msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Error" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "The profile to be copied could not be found." msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "A database error has occurred. See the log for details." msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "New Twingle API profile" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Edit Twingle API profile %1" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "New Profile" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./templates/CRM/Twingle/Page/Profiles.tpl +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Page/Profiles.tpl msgid "Profile name" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Project IDs" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Contact Matcher (XCM) Profile" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Location type" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Location type for organisations" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Financial type" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Financial type (recurring)" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Gender option for submitted value \"male\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Gender option for submitted value \"female\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Gender option for submitted value \"other\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Prefix option for submitted value \"male\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Prefix option for submitted value \"female\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "Prefix option for submitted value \"other\"" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Record %1 as" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Record %1 donations with contribution status" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Profile.php +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Profile.php msgid "CiviSEPA creditor" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Use Double-Opt-In for newsletter" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Sign up for newsletter groups" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Sign up for postal mail groups" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Sign up for Donation receipt groups" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Default Campaign" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "- none -" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Set Campaign for" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Contribution" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Recurring Contribution" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Membership" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "SEPA Mandate" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Contacts (XCM)" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Create membership of type" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Create membership of type (recurring)" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "API Call for Membership Postprocessing" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "The API call must have the form 'Entity.Action'." msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Contribution source" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Required address components" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Street" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Postal Code" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./api/v3/TwingleDonation/Submit.php +#: CRM/Twingle/Form/Profile.php api/v3/TwingleDonation/Submit.php msgid "City" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./api/v3/TwingleDonation/Submit.php +#: CRM/Twingle/Form/Profile.php api/v3/TwingleDonation/Submit.php msgid "Country" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./templates/CRM/Twingle/Form/Profile.tpl +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl msgid "Custom field mapping" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Create contribution notes for" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./api/v3/TwingleDonation/Submit.php +#: CRM/Twingle/Form/Profile.php api/v3/TwingleDonation/Submit.php msgid "Purpose" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./api/v3/TwingleDonation/Submit.php +#: CRM/Twingle/Form/Profile.php api/v3/TwingleDonation/Submit.php msgid "Remarks" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Create contact notes for" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "User Extra Field" msgstr "" -#: ./CRM/Twingle/Form/Profile.php ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl +msgid "Enable Shop Integration" +msgstr "" + +#: CRM/Twingle/Form/Profile.php +msgid "Default Financial Type" +msgstr "" + +#: CRM/Twingle/Form/Profile.php +msgid "Financial Type for top up donations" +msgstr "" + +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl +msgid "Map Products as Price Fields" +msgstr "" + +#: CRM/Twingle/Form/Profile.php CRM/Twingle/Form/Settings.php msgid "Save" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "Warning" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php +msgid "The required configuration option \"%1\" has no value. Saving the profile might set this option to a possibly unwanted default value." +msgstr "" + +#: CRM/Twingle/Form/Profile.php msgid "No profile set." msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "<select profile>" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "none" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "CiviSEPA" msgstr "" -#: ./CRM/Twingle/Form/Profile.php +#: CRM/Twingle/Form/Profile.php msgid "No mailing lists available" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Twingle ID Prefix" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Use CiviSEPA" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Use CiviSEPA generated reference" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Protect Recurring Contributions" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Activity Type" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Subject" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Status" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php msgid "Assigned To" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php +msgid "Use Twingle Shop Integration" +msgstr "" + +#: CRM/Twingle/Form/Settings.php +msgid "Twingle Access Key" +msgstr "" + +#: CRM/Twingle/Form/Settings.php msgid "This is required for activity creation" msgstr "" -#: ./CRM/Twingle/Form/Settings.php +#: CRM/Twingle/Form/Settings.php +msgid "An Access Key is required to enable Twingle Shop Integration" +msgstr "" + +#: CRM/Twingle/Form/Settings.php msgid "-select-" msgstr "" -#: ./CRM/Twingle/Page/Profiles.php ./managed/Navigation__twingle_configuration.mgd.php +#: CRM/Twingle/Page/Profiles.php managed/Navigation__twingle_configuration.mgd.php msgid "Twingle API Profiles" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Unknown attribute %1." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Profile name cannot be empty." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Only alphanumeric characters, space and the underscore (_) are allowed for profile names." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "A profile with the name '%1' already exists." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Project ID(s) [%1] already used in profile '%2'." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Could not parse custom field mapping." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Custom field custom_%1 does not exist." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Custom field custom_%1 is not in a CustomGroup that extends one of the supported CiviCRM entities." msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Could not save/update profile: %1" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Could not reset default profile: %1" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Could not delete profile: %1" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Contribution Status" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Bank transfer" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Debit manual" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Debit automatic" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Credit card" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Mobile phone Germany" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "PayPal" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "SOFORT Überweisung" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Amazon Pay" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Apple Pay" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Google Pay" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Paydirekt" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Twint" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "iDEAL" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Postfinance" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Bancontact" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "Generic Payment Method" msgstr "" -#: ./CRM/Twingle/Profile.php +#: CRM/Twingle/Profile.php msgid "never" msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Invalid donation rhythm." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Payment method could not be matched to existing payment instrument." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Invalid date for parameter \"confirmed_at\"." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Invalid date for parameter \"user_birthdate\"." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Gender could not be matched to existing gender." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Invalid format for custom fields." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php +msgid "Invalid format for products." +msgstr "" + +#: CRM/Twingle/Submission.php msgid "campaign_id must be a numeric string. " msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Unknown country %1." msgstr "" -#: ./CRM/Twingle/Submission.php +#: CRM/Twingle/Submission.php msgid "Could not calculate SEPA cycle day from configuration." msgstr "" -#: ./CRM/Twingle/Tools.php +#: CRM/Twingle/Submission.php +msgid "Could not create line item for product '%1'" +msgstr "" + +#: CRM/Twingle/Submission.php +msgid "Could not create line item for donation" +msgstr "" + +#: CRM/Twingle/Tools.php msgid "This is a Twingle recurring contribution. It should be terminated through the Twingle interface, otherwise it will still be collected." msgstr "" -#: ./CRM/Twingle/Tools.php +#: CRM/Twingle/Tools.php msgid "Recurring contribution [%1] (Transaction ID '%2') was terminated by a user. You need to end the corresponding record in Twingle as well, or it will still be collected." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php ./api/v3/TwingleDonation/Endrecurring.php ./api/v3/TwingleDonation/Submit.php +#: Civi/Twingle/Shop/ApiCall.php +msgid "Could not find Twingle API token" +msgstr "" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "Call to Twingle API failed. Please check your api token." +msgstr "" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "GET curl failed" +msgstr "" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "http status code 404 (not found)" +msgstr "" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "https status code 500 (internal error)" +msgstr "" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "Connection not yet established. Use connect() method." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not find PriceField for Twingle Product ['id': %1, 'external_id': %2]: %3" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not find PriceFieldValue for Twingle Product ['id': %1, 'external_id': %2]: %3" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product already exists." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product does not exist and cannot be edited." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not check if PriceField for this Twingle Product already exists." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not find PriceSet for this Twingle Product." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not create PriceField for this Twingle Product: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not find PriceFieldValue for this Twingle Product: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not create PriceFieldValue for this Twingle Product: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not find TwingleProduct in database: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not save TwingleProduct to database: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "An Error occurred while searching for the associated PriceFieldValue: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not delete associated PriceFieldValue: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product still exists." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "An Error occurred while searching for the associated PriceField: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleProduct.php +msgid "Could not delete associated PriceField: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not find TwingleShop in database: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not find associated PriceSet: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not delete associated PriceSet: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "PriceSet for this Twingle Shop already exists." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "PriceSet for this Twingle Shop does not exist and cannot be edited." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not check if PriceSet for this TwingleShop already exists." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not create PriceSet for this TwingleShop." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "This Twingle Project is not a shop." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not retrieve Twingle projects from API.\n Please check your API credentials." +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not retrieve associated products: %1" +msgstr "" + +#: Civi/Twingle/Shop/BAO/TwingleShop.php +msgid "Could not delete associated products: %1" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Twingle Products" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Twingle Product" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Unique TwingleProduct ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "External ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "The ID of this product in the Twingle database" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php api/v3/TwingleProduct/Get.php +msgid "Price Field ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "FK to Price Field" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php api/v3/TwingleProduct/Create.php +msgid "Twingle Shop ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "FK to Twingle Shop" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Created At" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Timestamp of when the product was created in the database" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Updated At" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleProduct.php +msgid "Timestamp of when the product was last updated in the database" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Twingle Shops" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Twingle Shop" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Unique TwingleShop ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "Project Identifier" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Twingle Project Identifier" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Numerical Project ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "Numerical Twingle Project Identifier" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleShop/Get.php +msgid "Price Set ID" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "FK to Price Set" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleShop/Get.php +msgid "Name" +msgstr "" + +#: Civi/Twingle/Shop/DAO/TwingleShop.php +msgid "name of the shop" +msgstr "" + +#: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php api/v3/TwingleDonation/Submit.php msgid "Project ID" msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php ./api/v3/TwingleDonation/Endrecurring.php ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php api/v3/TwingleDonation/Submit.php msgid "The Twingle project ID." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php ./api/v3/TwingleDonation/Endrecurring.php ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php api/v3/TwingleDonation/Submit.php msgid "Transaction ID" msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php ./api/v3/TwingleDonation/Endrecurring.php ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php api/v3/TwingleDonation/Submit.php msgid "The unique transaction ID of the donation" msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "Cancelled at" msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "The date when the donation was cancelled, format: YmdHis." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "Cancel reason" msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "The reason for the donation being cancelled." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "Invalid date for parameter \"cancelled_at\"." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php +#: api/v3/TwingleDonation/Cancel.php msgid "SEPA Mandate for contribution [%1 not found." msgstr "" -#: ./api/v3/TwingleDonation/Cancel.php ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php msgid "Could not terminate SEPA mandate" msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "Ended at" msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "The date when the recurring donation was ended, format: YmdHis." msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "Invalid date for parameter \"ended_at\"." msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "SEPA Mandate for recurring contribution [%1 not found." msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "SEPA Mandate [%1] already terminated." msgstr "" -#: ./api/v3/TwingleDonation/Endrecurring.php +#: api/v3/TwingleDonation/Endrecurring.php msgid "Mandate closed by TwingleDonation.Endrecurring API call" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Confirmed at" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The date when the donation was issued, format: YmdHis." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The purpose of the donation." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Amount" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The donation amount in minor currency unit." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Currency" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The ISO-4217 currency code of the donation." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Newsletter" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Whether to subscribe the contact to the newsletter group defined in the profile." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Postal mailing" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Whether to subscribe the contact to the postal mailing group defined in the profile." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Donation receipt" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Whether the contact requested a donation receipt." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Payment method" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The Twingle payment method used for the donation." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Donation rhythm" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The interval which the donation is recurring in." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "SEPA IBAN" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The IBAN for SEPA Direct Debit payments, conforming with ISO 13616-1:2007." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "SEPA BIC" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The BIC for SEPA Direct Debit payments, conforming with ISO 9362." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "SEPA Direct Debit Mandate reference" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The mandate reference for SEPA Direct Debit payments." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "SEPA Direct Debit Account holder" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The account holder for SEPA Direct Debit payments." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Anonymous donation" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Whether the donation is submitted anonymously." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Gender" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The gender of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Date of birth" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The date of birth of the contact, format: Ymd." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Formal title" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The formal title of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Email address" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The e-mail address of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "First name" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The first name of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Last name" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The last name of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Street address" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The street address of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Postal code" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The postal code of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The city of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The country of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Telephone" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The telephone number of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Company" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The company of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Language" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The preferred language of the contact. A 2-digit ISO-639-1 language code." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "User extra field" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Additional information of the contact." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Campaign ID" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "The CiviCRM ID of a campaign to assign the contribution." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Custom fields" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Additional information for either the contact or the (recurring) contribution." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php +msgid "Products" +msgstr "" + +#: api/v3/TwingleDonation/Submit.php +msgid "Products ordered via TwingleShop" +msgstr "" + +#: api/v3/TwingleDonation/Submit.php msgid "Additional remarks for the donation." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Contribution with the given transaction ID already exists." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Organisation contact could not be found or created." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Individual contact could not be found or created." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Missing attribute %1 for SEPA mandate" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "SEPA creditor is not configured for profile \"%1\"." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Could not create recurring contribution." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Could not find recurring contribution with given parent transaction ID." msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Could not create contribution" msgstr "" -#: ./api/v3/TwingleDonation/Submit.php +#: api/v3/TwingleDonation/Submit.php msgid "Twingle membership postprocessing call has failed, see log for more information" msgstr "" -#: ./managed/Navigation__twingle_configuration.mgd.php +#: api/v3/TwingleProduct/Create.php api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "TwingleProduct ID" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "The TwingleProduct ID in the database" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Twingle ID" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "External product ID in Twingle database" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "ID of the corresponding Twingle Shop" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Name" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Name of the product" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Is active?" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Is the product active?" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Description" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Short description of the product" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Price" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Price of the product" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Sort" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Sort order of the product" +msgstr "" + +#: api/v3/TwingleProduct/Create.php api/v3/TwingleShop/Create.php +msgid "Financial Type ID" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "ID of the financial type of the product" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "FK to TwingleShop" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Twingle timestamp" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "Timestamp of last update in Twingle db" +msgstr "" + +#: api/v3/TwingleProduct/Create.php +msgid "FK to PriceField" +msgstr "" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "The TwingleProduct ID in CiviCRM" +msgstr "" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "External TwingleProduct ID" +msgstr "" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "Twingle's ID of the product" +msgstr "" + +#: api/v3/TwingleProduct/Delete.php +msgid "TwingleProduct could not be deleted." +msgstr "" + +#: api/v3/TwingleProduct/Get.php +msgid "FK to civicrm_price_field" +msgstr "" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "TwingleShop ID" +msgstr "" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "The TwingleShop ID in CiviCRM" +msgstr "" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "Twingle project identifier" +msgstr "" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php api/v3/TwingleShop/Get.php +msgid "Numerical Project Identifier" +msgstr "" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Get.php +msgid "Twingle numerical project identifier" +msgstr "" + +#: api/v3/TwingleShop/Create.php +msgid "Numerical Twingle project identifier" +msgstr "" + +#: api/v3/TwingleShop/Create.php +msgid "Shop Name" +msgstr "" + +#: api/v3/TwingleShop/Create.php +msgid "Name of the shop" +msgstr "" + +#: api/v3/TwingleShop/Create.php +msgid "FK to civicrm_financial_type" +msgstr "" + +#: api/v3/TwingleShop/Delete.php +msgid "TwingleShop could not be found." +msgstr "" + +#: api/v3/TwingleShop/Delete.php +msgid "TwingleShop could not be deleted." +msgstr "" + +#: api/v3/TwingleShop/Fetch.php +msgid "Project Identifiers" +msgstr "" + +#: api/v3/TwingleShop/Fetch.php +msgid "Comma separated list of Twingle project identifiers." +msgstr "" + +#: api/v3/TwingleShop/Get.php +msgid "Name of the TwingleShop" +msgstr "" + +#: api/v3/TwingleShop/Get.php +msgid "FK to civicrm_price_set" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not fetch products" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not fetch products. Please check your Twingle API key." +msgstr "" + +#: js/twingle_shop.js +msgid "Create" +msgstr "" + +#: js/twingle_shop.js +msgid "Update" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not create Price Field for this product" +msgstr "" + +#: js/twingle_shop.js +msgid "Delete Price Field" +msgstr "" + +#: js/twingle_shop.js +msgid "Are you sure you want to delete the price field associated with this product?" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not delete Price Field" +msgstr "" + +#: js/twingle_shop.js +msgid "The Price Field was deleted successfully." +msgstr "" + +#: js/twingle_shop.js +msgid "Price Field deleted" +msgstr "" + +#: js/twingle_shop.js +msgid "select financial type" +msgstr "" + +#: js/twingle_shop.js +msgid "Product" +msgstr "" + +#: js/twingle_shop.js +msgid "Financial Type" +msgstr "" + +#: js/twingle_shop.js +msgid "Price Field" +msgstr "" + +#: js/twingle_shop.js +msgid "Create Price Set" +msgstr "" + +#: js/twingle_shop.js +msgid "Update Price Set" +msgstr "" + +#: js/twingle_shop.js +msgid "Delete Price Set" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not create Twingle Shop" +msgstr "" + +#: js/twingle_shop.js +msgid "The Price Set was created successfully." +msgstr "" + +#: js/twingle_shop.js +msgid "Price Field created" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not create TwingleShop" +msgstr "" + +#: js/twingle_shop.js +msgid "Are you sure you want to delete the price set associated with this Twingle Shop?" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not delete Twingle Shop" +msgstr "" + +#: js/twingle_shop.js +msgid "The Price Set was deleted successfully." +msgstr "" + +#: js/twingle_shop.js +msgid "Price Set deleted" +msgstr "" + +#: js/twingle_shop.js +msgid "Could not update Twingle Shop" +msgstr "" + +#: managed/Navigation__twingle_configuration.mgd.php msgid "Twingle API Configuration" msgstr "" -#: ./managed/Navigation__twingle_configuration.mgd.php +#: managed/Navigation__twingle_configuration.mgd.php msgid "Twingle API Settings" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select which location type to use for addresses for individuals, either when no organisation name is specified, or an organisation address can not be shared with the individual contact." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Put your project's Twingle ID in here, to activate this profile for that project." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "You can also provide multiple project IDs separated by a comma." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "The Contact Matcher (XCM) manages the identification or creation of the related contact." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "We recommend creating a new XCM profile only to be used with the Twingle API." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select which location type to use for addresses for organisations and shared organisation addresses for individual contacts." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select which financial type to use for one-time contributions." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select which financial type to use for recurring contributions." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select whether to use CiviCRM's Double-Opt-In feature for subscribing to mailing lists. Note that this only works for public mailing lists. Any non-public mailing list selected above will be ignored when this setting is enabled." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Also, do not forget to disable Twingle's own Double Opt-In option in the Twingle Manager to avoid subscribers receiving multiple confirmation e-mails. Only one or the other option should be enabled." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Some organisations have specific conventions on how a membership should be created. Since the Twingle-API can only create a \"bare bone\" membership object, you can enter a API Call (as 'Entity.Action') to adjust any newly created membership to your organisation's needs." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "The API call would receive the following parameters:
    \n
  • membership_id: The ID of the newly created membership
  • \n
  • contact_id: The ID of the contact involved
  • \n
  • organization_id: The ID of the contact's organisation, potentially empty
  • \n
  • contribution_id: The ID contribution received, potentially empty
  • \n
  • recurring_contribution_id: The ID of the recurring contribution. If empty, this was only a one-off donation.
  • \n
" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Select the address components that must be present to create or update an address for the contact." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Depending on your XCM settings, the transferred address might replace an existing one." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "Since in some cases Twingle send the country of the user as the only address parameter, depending on your XCM configuration, not declaring other address components as required might lead to the current user address being overwritten with an address containing the country only." msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "

Map Twingle custom fields to CiviCRM fields using the following format (each assignment in a separate line):

\n
twingle_field_1=custom_123
twingle_field_2=custom_789
\n

Always use the custom_[id] notation for CiviCRM custom fields.

\n

This works for fields that Twingle themselves provide in the custom_fields parameter, and for any other parameter (e.g. user_extrafield)

\n

Only custom fields extending one of the following CiviCRM entities are allowed:

\n
    \n
  • Contact – Will be set on the Individual contact
  • \n
  • Individual – Will be set on the Individual contact
  • \n
  • Organization – Will be set on the Organization contact, if an organisation name was submitted
  • \n
  • Contribution – Will be set on the contribution
  • \n
  • ContributionRecur – Will be set on the recurring contribution and deriving single contributions
  • \n
" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "

Create a contribution note for each field specified in this selection.

\n

Tip: You can enable or disable this fields in the TwingleMANAGER.

" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.hlp +#: templates/CRM/Twingle/Form/Profile.hlp msgid "

Create a contact note for each field specified in this selection.

\n

Tip: You can enable or disable this fields in the TwingleMANAGER.

" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "Enable the processing of orders via Twingle Shop for this profile. The ordered products will then appear as line items in the contribution." +msgstr "" + +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "If this option is enabled, all Twingle Shop products corresponding to the specified project IDs will be retrieved from Twingle and mapped as price sets and price fields. Each Twingle Shop is mapped as a price set with its products as price fields." +msgstr "" + +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "This allows you to manually create contributions with the same line items for phone orders, for example, as would be the case for orders placed through the Twingle Shop." +msgstr "" + +#: templates/CRM/Twingle/Form/Profile.tpl msgid "General settings" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Help" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "XCM Profile" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Gender/Prefix for value 'male'" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Gender/Prefix for value 'female'" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Gender/Prefix for value 'other'" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Payment methods" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Groups and Correlations" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Newsletter Double Opt-In" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Membership Postprocessing" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl templates/CRM/Twingle/Page/Profiles.tpl +msgid "Shop Integration" +msgstr "" + +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Are you sure you want to reset the default profile?" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Are you sure you want to delete the profile %1?" msgstr "" -#: ./templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Form/Profile.tpl msgid "Profile name not given or invalid." msgstr "" -#: ./templates/CRM/Twingle/Form/Settings.hlp +#: templates/CRM/Twingle/Form/Settings.hlp msgid "When the %1 is enabled and one of its payment instruments is assigned to a Twingle payment method (practically the debit_manual payment method), submitting a Twingle donation through the API will create a SEPA mandate with the given data." msgstr "" -#: ./templates/CRM/Twingle/Form/Settings.hlp +#: templates/CRM/Twingle/Form/Settings.hlp msgid "When the %1 is enabled, you can activate this to use your own references instead of the ones submitted by Twingle." msgstr "" -#: ./templates/CRM/Twingle/Form/Settings.hlp +#: templates/CRM/Twingle/Form/Settings.hlp msgid "Will protect all recurring contributions created by Twingle from termination, since this does NOT terminate the Twingle collection process" msgstr "" -#: ./templates/CRM/Twingle/Form/Settings.hlp +#: templates/CRM/Twingle/Form/Settings.hlp msgid "You can use this setting to add a prefix to the Twingle transaction ID, in order to avoid collisions with other transaction ids." msgstr "" -#: ./templates/CRM/Twingle/Page/Configuration.tpl +#: templates/CRM/Twingle/Form/Settings.hlp +msgid "If you enable Twingle Shop integration, you can configure Twingle API profiles to include products ordered through Twingle Shop as line items in the created contribution." +msgstr "" + +#: templates/CRM/Twingle/Form/Settings.hlp +msgid "Enter your twingle API access key." +msgstr "" + +#: templates/CRM/Twingle/Page/Configuration.tpl msgid "Profiles" msgstr "" -#: ./templates/CRM/Twingle/Page/Configuration.tpl +#: templates/CRM/Twingle/Page/Configuration.tpl msgid "Configure profiles" msgstr "" -#: ./templates/CRM/Twingle/Page/Configuration.tpl +#: templates/CRM/Twingle/Page/Configuration.tpl msgid "Settings" msgstr "" -#: ./templates/CRM/Twingle/Page/Configuration.tpl +#: templates/CRM/Twingle/Page/Configuration.tpl msgid "Configure extension settings" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "New profile" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Selectors" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Used" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Last Used" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Operations" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl +msgid "enabled" +msgstr "" + +#: templates/CRM/Twingle/Page/Profiles.tpl +msgid "disabled" +msgstr "" + +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Edit profile %1" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Edit" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Copy profile %1" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Copy" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Reset profile %1" msgstr "" -#: ./templates/CRM/Twingle/Page/Profiles.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Delete profile %1" msgstr "" -#: ./twingle.php +#: twingle.php msgid "Twingle API: Access Twingle API" msgstr "" -#: ./twingle.php +#: twingle.php msgid "Allows access to the Twingle API actions." msgstr "" From 612224901aa1dbf4b6969302f0133f1fe7cd606d Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 24 Sep 2024 14:28:34 +0200 Subject: [PATCH 05/15] Update translation template --- l10n/de.systopia.twingle.pot | 416 +++++++++++++++++------------------ 1 file changed, 208 insertions(+), 208 deletions(-) diff --git a/l10n/de.systopia.twingle.pot b/l10n/de.systopia.twingle.pot index 2a38969..e358b75 100644 --- a/l10n/de.systopia.twingle.pot +++ b/l10n/de.systopia.twingle.pot @@ -1,3 +1,111 @@ +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not find PriceField for Twingle Product ['id': %1, 'external_id': %2]: %3" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not find PriceFieldValue for Twingle Product ['id': %1, 'external_id': %2]: %3" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product already exists." +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product does not exist and cannot be edited." +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not check if PriceField for this Twingle Product already exists." +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not find PriceSet for this Twingle Product." +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not create PriceField for this Twingle Product: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not find PriceFieldValue for this Twingle Product: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not create PriceFieldValue for this Twingle Product: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not find TwingleProduct in database: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not save TwingleProduct to database: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "An Error occurred while searching for the associated PriceFieldValue: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not delete associated PriceFieldValue: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "PriceField for this Twingle Product still exists." +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "An Error occurred while searching for the associated PriceField: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleProduct.php +msgid "Could not delete associated PriceField: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not find TwingleShop in database: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not find associated PriceSet: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not delete associated PriceSet: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "PriceSet for this Twingle Shop already exists." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "PriceSet for this Twingle Shop does not exist and cannot be edited." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not check if PriceSet for this TwingleShop already exists." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not create PriceSet for this TwingleShop." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "This Twingle Project is not a shop." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not retrieve Twingle projects from API.\n Please check your API credentials." +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not retrieve associated products: %1" +msgstr "" + +#: CRM/Twingle/BAO/TwingleShop.php +msgid "Could not delete associated products: %1" +msgstr "" + #: CRM/Twingle/Config.php msgid "No" msgstr "" @@ -10,6 +118,106 @@ msgstr "" msgid "Create Activity" msgstr "" +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Twingle Products" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Twingle Product" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php CRM/Twingle/DAO/TwingleShop.php +msgid "ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Unique TwingleProduct ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "External ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "The ID of this product in the Twingle database" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php api/v3/TwingleProduct/Get.php +msgid "Price Field ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "FK to Price Field" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php api/v3/TwingleProduct/Create.php +msgid "Twingle Shop ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "FK to Twingle Shop" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Created At" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Timestamp of when the product was created in the database" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Updated At" +msgstr "" + +#: CRM/Twingle/DAO/TwingleProduct.php +msgid "Timestamp of when the product was last updated in the database" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Twingle Shops" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Twingle Shop" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Unique TwingleShop ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "Project Identifier" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Twingle Project Identifier" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Numerical Project ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "Numerical Twingle Project Identifier" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php api/v3/TwingleShop/Get.php +msgid "Price Set ID" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "FK to Price Set" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php api/v3/TwingleShop/Get.php +msgid "Name" +msgstr "" + +#: CRM/Twingle/DAO/TwingleShop.php +msgid "name of the shop" +msgstr "" + #: CRM/Twingle/Form/Profile.php msgid "Profile with ID \"%1\" not found" msgstr "" @@ -530,214 +738,6 @@ msgstr "" msgid "Connection not yet established. Use connect() method." msgstr "" -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not find PriceField for Twingle Product ['id': %1, 'external_id': %2]: %3" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not find PriceFieldValue for Twingle Product ['id': %1, 'external_id': %2]: %3" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "PriceField for this Twingle Product already exists." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "PriceField for this Twingle Product does not exist and cannot be edited." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not check if PriceField for this Twingle Product already exists." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not find PriceSet for this Twingle Product." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not create PriceField for this Twingle Product: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not find PriceFieldValue for this Twingle Product: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not create PriceFieldValue for this Twingle Product: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not find TwingleProduct in database: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not save TwingleProduct to database: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "An Error occurred while searching for the associated PriceFieldValue: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not delete associated PriceFieldValue: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "PriceField for this Twingle Product still exists." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "An Error occurred while searching for the associated PriceField: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleProduct.php -msgid "Could not delete associated PriceField: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not find TwingleShop in database: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not find associated PriceSet: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not delete associated PriceSet: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "PriceSet for this Twingle Shop already exists." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "PriceSet for this Twingle Shop does not exist and cannot be edited." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not check if PriceSet for this TwingleShop already exists." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not create PriceSet for this TwingleShop." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "This Twingle Project is not a shop." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not retrieve Twingle projects from API.\n Please check your API credentials." -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not retrieve associated products: %1" -msgstr "" - -#: Civi/Twingle/Shop/BAO/TwingleShop.php -msgid "Could not delete associated products: %1" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Twingle Products" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Twingle Product" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Unique TwingleProduct ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "External ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "The ID of this product in the Twingle database" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php api/v3/TwingleProduct/Get.php -msgid "Price Field ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "FK to Price Field" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php api/v3/TwingleProduct/Create.php -msgid "Twingle Shop ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "FK to Twingle Shop" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Created At" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Timestamp of when the product was created in the database" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Updated At" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleProduct.php -msgid "Timestamp of when the product was last updated in the database" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Twingle Shops" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Twingle Shop" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Unique TwingleShop ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php -msgid "Project Identifier" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Twingle Project Identifier" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Numerical Project ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "Numerical Twingle Project Identifier" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleShop/Get.php -msgid "Price Set ID" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "FK to Price Set" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php api/v3/TwingleShop/Get.php -msgid "Name" -msgstr "" - -#: Civi/Twingle/Shop/DAO/TwingleShop.php -msgid "name of the shop" -msgstr "" - #: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php api/v3/TwingleDonation/Submit.php msgid "Project ID" msgstr "" From 30c34f72bea38791c0b9f57eed0aa567aa79eeae Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 24 Sep 2024 14:29:26 +0200 Subject: [PATCH 06/15] Version 1.5-beta2 --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index c019d80..6e2d126 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - - 1.5-dev - dev + 2024-09-24 + 1.5-beta2 + beta 5.58 From 9c9fed20d7d698bac1eb4ffba15de79bae613ed9 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 24 Sep 2024 14:29:38 +0200 Subject: [PATCH 07/15] Back to 1.5-dev --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index 6e2d126..c019d80 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - 2024-09-24 - 1.5-beta2 - beta + + 1.5-dev + dev 5.58 From 82456d2ae43370915c56e9e0c43a73e4c27c2368 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 1 Oct 2024 14:24:23 +0200 Subject: [PATCH 08/15] Update German translation --- l10n/de_DE/LC_MESSAGES/twingle.mo | Bin 29888 -> 44836 bytes l10n/de_DE/LC_MESSAGES/twingle.po | 658 +++++++++++++++++++++++++++++- 2 files changed, 657 insertions(+), 1 deletion(-) diff --git a/l10n/de_DE/LC_MESSAGES/twingle.mo b/l10n/de_DE/LC_MESSAGES/twingle.mo index 78498f0172762c1ca981c4a566147748306906b4..b7c97292a885e91d1eba63ab908501a13fe7c5f9 100644 GIT binary patch literal 44836 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 löschen" msgid "Reset" msgstr "Zurücksetzen" -#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Page/Profiles.tpl +#: CRM/Twingle/Form/Profile.php js/twingle_shop.js +#: templates/CRM/Twingle/Page/Profiles.tpl msgid "Delete" msgstr "Löschen" @@ -254,6 +490,22 @@ msgstr "Kontakt-Notizen erstellen für" msgid "User Extra Field" msgstr "Benutzer-Extra-Feld" +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl +msgid "Enable Shop Integration" +msgstr "Shop-Integration aktivieren" + +#: CRM/Twingle/Form/Profile.php +msgid "Default Financial Type" +msgstr "Standard-Zuwendungsart" + +#: CRM/Twingle/Form/Profile.php +msgid "Financial Type for top up donations" +msgstr "Zuwendungsart für zusätzliche Spenden" + +#: CRM/Twingle/Form/Profile.php templates/CRM/Twingle/Form/Profile.tpl +msgid "Map Products as Price Fields" +msgstr "Produkte Preisfeldern zuordnen" + #: CRM/Twingle/Form/Profile.php CRM/Twingle/Form/Settings.php msgid "Save" msgstr "Speichern" @@ -262,6 +514,15 @@ msgstr "Speichern" msgid "Warning" msgstr "Warnung" +#: CRM/Twingle/Form/Profile.php +msgid "" +"The required configuration option \"%1\" has no value. Saving the profile " +"might set this option to a possibly unwanted default value." +msgstr "" +"Die erforderliche Konfigurationsoption \"%1\" hat keinen Wert. Das Speichern " +"des Profils könnte diese Option auf einen möglicherweise ungewollten " +"Standardwert setzen." + #: CRM/Twingle/Form/Profile.php msgid "No profile set." msgstr "Kein Profil eingestellt." @@ -314,10 +575,24 @@ msgstr "Status" msgid "Assigned To" msgstr "Zugewiesen an" +#: CRM/Twingle/Form/Settings.php +msgid "Use Twingle Shop Integration" +msgstr "Twingle-Shop-Integration verwenden" + +#: CRM/Twingle/Form/Settings.php +msgid "Twingle Access Key" +msgstr "Twingle-Zugriffsschlüssel" + #: CRM/Twingle/Form/Settings.php msgid "This is required for activity creation" msgstr "Diese Angaben sind erforderlich für das Erstellen von Aktivitäten" +#: CRM/Twingle/Form/Settings.php +msgid "An Access Key is required to enable Twingle Shop Integration" +msgstr "" +"Ein Zugriffsschlüssel ist für die Aktivierung der Twingle-Shop-Integration " +"erforderlich" + #: CRM/Twingle/Form/Settings.php msgid "-select-" msgstr "- auswählen -" @@ -478,6 +753,10 @@ msgstr "" msgid "Invalid format for custom fields." msgstr "Ungültiges Format für benutzerdefinierte Felder." +#: CRM/Twingle/Submission.php +msgid "Invalid format for products." +msgstr "Ungültiges Format für Produkte." + #: CRM/Twingle/Submission.php msgid "campaign_id must be a numeric string. " msgstr "campaign_id muss eine numerische Zeichenkette sein. " @@ -490,6 +769,14 @@ msgstr "Unbekanntes Land %1." msgid "Could not calculate SEPA cycle day from configuration." msgstr "SEPA-Einzugstag konnte nicht aus der Konfiguration berechnet werden." +#: CRM/Twingle/Submission.php +msgid "Could not create line item for product '%1'" +msgstr "Belegzeile für Produkt konnte nicht erstellt werden: %1" + +#: CRM/Twingle/Submission.php +msgid "Could not create line item for donation" +msgstr "Belegzeile für Spende konnte nicht erstellt werden" + #: CRM/Twingle/Tools.php msgid "" "This is a Twingle recurring contribution. It should be terminated through " @@ -508,6 +795,30 @@ msgstr "" "Benutzer beendet. Es ist erforderlich, den zugehörigen Datensatz auch in " "Twingle zu beenden, da die Zuwendung ansonsten weiter eingezogen wird." +#: Civi/Twingle/Shop/ApiCall.php +msgid "Could not find Twingle API token" +msgstr "Twingle-API-Token konnte nicht gefunden werden" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "Call to Twingle API failed. Please check your api token." +msgstr "Aufruf der Twingle-API fehlgeschlagen. Überprüfen Sie Ihren API-Token." + +#: Civi/Twingle/Shop/ApiCall.php +msgid "GET curl failed" +msgstr "GET cURL fehlgeschlagen" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "http status code 404 (not found)" +msgstr "HTTP-Statuscode 404 (not found)" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "https status code 500 (internal error)" +msgstr "HTTP-Statuscode 500 (internal error)" + +#: Civi/Twingle/Shop/ApiCall.php +msgid "Connection not yet established. Use connect() method." +msgstr "Verbindung nch nicht hergestellt. connect()-Methode verwenden." + #: api/v3/TwingleDonation/Cancel.php api/v3/TwingleDonation/Endrecurring.php #: api/v3/TwingleDonation/Submit.php msgid "Project ID" @@ -827,6 +1138,14 @@ msgstr "" "Zusätzliche Informationen für entweder den Kontakt oder die (wiederkehrende) " "Zuwendung." +#: api/v3/TwingleDonation/Submit.php +msgid "Products" +msgstr "Produkte" + +#: api/v3/TwingleDonation/Submit.php +msgid "Products ordered via TwingleShop" +msgstr "Über TwingleShop bestellte Produkte" + #: api/v3/TwingleDonation/Submit.php msgid "Additional remarks for the donation." msgstr "Zusätzliche Anmerkungen für die Zuwendung." @@ -873,6 +1192,285 @@ msgstr "" "Die Nachbearbeitung (postprocessing) der Twingle-Mitgliedschaft ist " "fehlgeschlagen, siehe Protokoll für weitere Informationen." +#: api/v3/TwingleProduct/Create.php api/v3/TwingleProduct/Delete.php +#: api/v3/TwingleProduct/Get.php +msgid "TwingleProduct ID" +msgstr "TwingleProduct-ID" + +#: api/v3/TwingleProduct/Create.php +msgid "The TwingleProduct ID in the database" +msgstr "Die TwingleProduct-ID in der Datenbank" + +#: api/v3/TwingleProduct/Create.php +msgid "Twingle ID" +msgstr "Twingle-ID" + +#: api/v3/TwingleProduct/Create.php +msgid "External product ID in Twingle database" +msgstr "Externe Produkt-ID in der Twingle-Datenbank" + +#: api/v3/TwingleProduct/Create.php +msgid "ID of the corresponding Twingle Shop" +msgstr "ID des zugehlrigen Twingle-Shops" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Name" +msgstr "Produktname" + +#: api/v3/TwingleProduct/Create.php +msgid "Name of the product" +msgstr "Name des Produkts" + +#: api/v3/TwingleProduct/Create.php +msgid "Is active?" +msgstr "Status" + +#: api/v3/TwingleProduct/Create.php +msgid "Is the product active?" +msgstr "Ob das Produkt aktiviert ist" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Description" +msgstr "Produktbeschreibung" + +#: api/v3/TwingleProduct/Create.php +msgid "Short description of the product" +msgstr "Kurzbeschreibung des Produkts" + +#: api/v3/TwingleProduct/Create.php +msgid "Product Price" +msgstr "Produkt-Preis" + +#: api/v3/TwingleProduct/Create.php +msgid "Price of the product" +msgstr "Preis des Produkts" + +#: api/v3/TwingleProduct/Create.php +msgid "Sort" +msgstr "Sortierung" + +#: api/v3/TwingleProduct/Create.php +msgid "Sort order of the product" +msgstr "Sortierungsreihenfolge des Produkts" + +#: api/v3/TwingleProduct/Create.php api/v3/TwingleShop/Create.php +msgid "Financial Type ID" +msgstr "Zuwendungsart" + +#: api/v3/TwingleProduct/Create.php +msgid "ID of the financial type of the product" +msgstr "ID der Zuwendungsart des Produkts" + +#: api/v3/TwingleProduct/Create.php +msgid "FK to TwingleShop" +msgstr "Fremdschlüssel zu TwingleShop" + +#: api/v3/TwingleProduct/Create.php +msgid "Twingle timestamp" +msgstr "Twingle-Zeitstempel" + +#: api/v3/TwingleProduct/Create.php +msgid "Timestamp of last update in Twingle db" +msgstr "Zeitstempel der letzten Aktualisierung in der Twingle-Datenbank" + +#: api/v3/TwingleProduct/Create.php +msgid "FK to PriceField" +msgstr "Fremdschlüssel zu PriceField" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "The TwingleProduct ID in CiviCRM" +msgstr "Die TwingleProduct-ID in CiviCRM" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "External TwingleProduct ID" +msgstr "Externe TwingleProduct-ID" + +#: api/v3/TwingleProduct/Delete.php api/v3/TwingleProduct/Get.php +msgid "Twingle's ID of the product" +msgstr "Twingles ID des Produkts" + +#: api/v3/TwingleProduct/Delete.php +msgid "TwingleProduct could not be deleted." +msgstr "TwingleProduct konnte nicht gelöscht werden." + +#: api/v3/TwingleProduct/Get.php +msgid "FK to civicrm_price_field" +msgstr "Fremdschlüssel zu civicrm_price_field" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Delete.php +#: api/v3/TwingleShop/Get.php +msgid "TwingleShop ID" +msgstr "TwingleShop-ID" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Delete.php +#: api/v3/TwingleShop/Get.php +msgid "The TwingleShop ID in CiviCRM" +msgstr "Die TwingleShop-ID in CiviCRM" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php +#: api/v3/TwingleShop/Delete.php api/v3/TwingleShop/Get.php +msgid "Twingle project identifier" +msgstr "Twingle-Projekt-Identifikator" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Create.php +#: api/v3/TwingleShop/Get.php +msgid "Numerical Project Identifier" +msgstr "Numerischer Projekt-Identifikator" + +#: api/v3/TwingleProduct/Get.php api/v3/TwingleShop/Get.php +msgid "Twingle numerical project identifier" +msgstr "Twingles numerischer Projekt-Identifikator" + +#: api/v3/TwingleShop/Create.php +msgid "Numerical Twingle project identifier" +msgstr "Numerischer Twingle-Projekt-Identifikator" + +#: api/v3/TwingleShop/Create.php +msgid "Shop Name" +msgstr "Shop-Name" + +#: api/v3/TwingleShop/Create.php +msgid "Name of the shop" +msgstr "Name des Shops" + +#: api/v3/TwingleShop/Create.php +msgid "FK to civicrm_financial_type" +msgstr "ZuwendungsartFremdschlüssel zu civicrm_financial_type" + +#: api/v3/TwingleShop/Delete.php +msgid "TwingleShop could not be found." +msgstr "TwingleShop konnte nicht gefunden werden." + +#: api/v3/TwingleShop/Delete.php +msgid "TwingleShop could not be deleted." +msgstr "TwingleShop konnte nicht gelöscht werden." + +#: api/v3/TwingleShop/Fetch.php +msgid "Project Identifiers" +msgstr "Projekt-Identifikatoren" + +#: api/v3/TwingleShop/Fetch.php +msgid "Comma separated list of Twingle project identifiers." +msgstr "Kommaseparierte Liste von Twingle-Projekt-Identifikatoren." + +#: api/v3/TwingleShop/Get.php +msgid "Name of the TwingleShop" +msgstr "Name des TwingleShop" + +#: api/v3/TwingleShop/Get.php +msgid "FK to civicrm_price_set" +msgstr "Fremdschlüssel zu civicrm_price_set" + +#: js/twingle_shop.js +msgid "Could not fetch products" +msgstr "Produkte konnten nicht abgerufen werden" + +#: js/twingle_shop.js +msgid "Could not fetch products. Please check your Twingle API key." +msgstr "" +"Produkte konnten nicht abgerufen werden. Überprüfen Sie Ihren Twingle-API-" +"Schlüssel." + +#: js/twingle_shop.js +msgid "Create" +msgstr "Erstellen" + +#: js/twingle_shop.js +msgid "Update" +msgstr "Bearbeiten" + +#: js/twingle_shop.js +msgid "Could not create Price Field for this product" +msgstr "Preisfeld für dieses Produkt konnte nicht erstellt werden" + +#: js/twingle_shop.js +msgid "Delete Price Field" +msgstr "Preisfeld löschen" + +#: js/twingle_shop.js +msgid "" +"Are you sure you want to delete the price field associated with this product?" +msgstr "Möchten Sie wirklich das diesem Produkt zugehörige Preisfeld löschen?" + +#: js/twingle_shop.js +msgid "Could not delete Price Field" +msgstr "Preisfeld konnte nicht gelöscht werden" + +#: js/twingle_shop.js +msgid "The Price Field was deleted successfully." +msgstr "Das Preisfeld wurde erfolgreich gelöscht." + +#: js/twingle_shop.js +msgid "Price Field deleted" +msgstr "Preisfeld gelöscht" + +#: js/twingle_shop.js +msgid "select financial type" +msgstr "Zuwendungsart auswählen" + +#: js/twingle_shop.js +msgid "Product" +msgstr "Produkt" + +#: js/twingle_shop.js +msgid "Financial Type" +msgstr "Zuwendungsart" + +#: js/twingle_shop.js +msgid "Price Field" +msgstr "Preisfeld" + +#: js/twingle_shop.js +msgid "Create Price Set" +msgstr "Preisschema erstellen" + +#: js/twingle_shop.js +msgid "Update Price Set" +msgstr "Preisschema bearbeiten" + +#: js/twingle_shop.js +msgid "Delete Price Set" +msgstr "Preisschema löschen" + +#: js/twingle_shop.js +msgid "Could not create Twingle Shop" +msgstr "Twingle-Shop konnte nicht erstellt werden" + +#: js/twingle_shop.js +msgid "The Price Set was created successfully." +msgstr "Das Preisschema wurde erfolgreich erstellt." + +#: js/twingle_shop.js +msgid "Price Field created" +msgstr "Preisfeld erstellt" + +#: js/twingle_shop.js +msgid "Could not create TwingleShop" +msgstr "TwingleShop konnte nicht erstellt werden" + +#: js/twingle_shop.js +msgid "" +"Are you sure you want to delete the price set associated with this Twingle " +"Shop?" +msgstr "" +"Möchten Sie wirklich das diesem Twingle-Shop zugehörige Preisschema löschen?" + +#: js/twingle_shop.js +msgid "Could not delete Twingle Shop" +msgstr "Twingle-Shop konnte nicht gelöscht werden" + +#: js/twingle_shop.js +msgid "The Price Set was deleted successfully." +msgstr "Das Preisschema wurde erfolgreiche gelöscht." + +#: js/twingle_shop.js +msgid "Price Set deleted" +msgstr "Preisschema gelöscht" + +#: js/twingle_shop.js +msgid "Could not update Twingle Shop" +msgstr "Twingle-Shop konnte nicht aktualisiert werden" + #: managed/Navigation__twingle_configuration.mgd.php msgid "Twingle API Configuration" msgstr "Twingle-API-Konfiguration" @@ -1099,6 +1697,37 @@ msgstr "" "

Tipp: Sie können diese Felder im TwingleMANAGER aktivieren oder " "deaktivieren.

" +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "" +"Enable the processing of orders via Twingle Shop for this profile. The " +"ordered products will then appear as line items in the contribution." +msgstr "" +"Aktiviert die Verarbeitung von Bestellungen über den Twingle-Shop für dieses " +"Profil. Die bestellten Produkte werden als Belegzeilen der Zuwendung " +"erscheinen." + +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "" +"If this option is enabled, all Twingle Shop products corresponding to the " +"specified project IDs will be retrieved from Twingle and mapped as price " +"sets and price fields. Each Twingle Shop is mapped as a price set with its " +"products as price fields." +msgstr "" +"Wenn diese Option aktiviert ist, werden alle zur angegebenen Projekt-ID " +"gehörenden Twingle-Shop-Produkte von Twingle abgerufen und als Preisschemata " +"und Preisfelder zugeordnet. Jeder Twingle-Shop wird als ein Preisschema mit " +"seinen Produkten als Preisfelder zugeordnet." + +#: templates/CRM/Twingle/Form/Profile.hlp +msgid "" +"This allows you to manually create contributions with the same line items " +"for phone orders, for example, as would be the case for orders placed " +"through the Twingle Shop." +msgstr "" +"Dies ermöglicht das manuelle Erstellen von Zuwendungen mit den gleichen " +"Belegzeilen wie bei Bestellungen über den Twingle-Shop, z. B. für " +"telefonische Bestellungen." + #: templates/CRM/Twingle/Form/Profile.tpl msgid "General settings" msgstr "Allgemeine Einstellungen" @@ -1139,6 +1768,11 @@ msgstr "Double-Opt-In für Newsletter" msgid "Membership Postprocessing" msgstr "Mitgliedschafts--Nachbearbeitung (Postprocessing)" +#: templates/CRM/Twingle/Form/Profile.tpl +#: templates/CRM/Twingle/Page/Profiles.tpl +msgid "Shop Integration" +msgstr "Shop-Integration" + #: templates/CRM/Twingle/Form/Profile.tpl msgid "Are you sure you want to reset the default profile?" msgstr "Möchten Sie wirklich das Standard-Profil zurücksetzen?" @@ -1188,6 +1822,20 @@ msgstr "" "Transaktions-ID voranzustellen, um Kollisionen mit anderen Transaktions-IDs " "auszuschließen." +#: templates/CRM/Twingle/Form/Settings.hlp +msgid "" +"If you enable Twingle Shop integration, you can configure Twingle API " +"profiles to include products ordered through Twingle Shop as line items in " +"the created contribution." +msgstr "" +"Mit aktivierter Twingle-Shop-Integration können Twingle-API-Profile so " +"konfiguriert werden, dass über den Twingle-Shop bestellte Produkte als " +"Belegzeilen in der erstellten Zuwendung enthalten sind." + +#: templates/CRM/Twingle/Form/Settings.hlp +msgid "Enter your twingle API access key." +msgstr "Geben Sie ihren Zugriffsschlüssel für die Twingle-API ein." + #: templates/CRM/Twingle/Page/Configuration.tpl msgid "Profiles" msgstr "Profile" @@ -1224,6 +1872,14 @@ msgstr "Zuletzt verwendet" msgid "Operations" msgstr "Operationen" +#: templates/CRM/Twingle/Page/Profiles.tpl +msgid "enabled" +msgstr "aktiviert" + +#: templates/CRM/Twingle/Page/Profiles.tpl +msgid "disabled" +msgstr "deaktiviert" + #: templates/CRM/Twingle/Page/Profiles.tpl msgid "Edit profile %1" msgstr "Profil %1 bearbeiten" From eaf9d531696170ae3e28e339c360d3aeef98d01a Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 1 Oct 2024 14:27:53 +0200 Subject: [PATCH 09/15] Version 1.5-beta3 --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index c019d80..099915c 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - - 1.5-dev - dev + 2024-010-01 + 1.5-beta3 + beta 5.58 From 82952a01623b1127c7268352a06cbc543487c402 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Tue, 1 Oct 2024 14:28:06 +0200 Subject: [PATCH 10/15] Back to 1.5-dev --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index 099915c..c019d80 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - 2024-010-01 - 1.5-beta3 - beta + + 1.5-dev + dev 5.58 From c7c766d926bc3475b0e119a6ff9b9a283d2bc8a8 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Wed, 9 Oct 2024 12:39:57 +0200 Subject: [PATCH 11/15] Fix BAO class namespace issues --- CRM/Twingle/BAO/TwingleShop.php | 2 +- CRM/Twingle/Submission.php | 3 +-- api/v3/TwingleProduct/Create.php | 3 +-- api/v3/TwingleProduct/Delete.php | 3 +-- api/v3/TwingleProduct/Get.php | 5 ++--- api/v3/TwingleShop/Create.php | 3 +-- api/v3/TwingleShop/Delete.php | 6 +++--- api/v3/TwingleShop/Fetch.php | 5 ++--- api/v3/TwingleShop/Get.php | 4 ++-- twingle.php | 4 ++-- 10 files changed, 16 insertions(+), 22 deletions(-) diff --git a/CRM/Twingle/BAO/TwingleShop.php b/CRM/Twingle/BAO/TwingleShop.php index a4b006c..27ae3b8 100644 --- a/CRM/Twingle/BAO/TwingleShop.php +++ b/CRM/Twingle/BAO/TwingleShop.php @@ -294,7 +294,7 @@ class CRM_Twingle_BAO_TwingleShop extends CRM_Twingle_DAO_TwingleShop { /** * Get associated products. * - * @return array[Civi\Twingle\Shop\BAO\TwingleProduct] + * @return list * @throws \Civi\Core\Exception\DBQueryException * @throws \Civi\Twingle\Shop\Exceptions\ProductException */ diff --git a/CRM/Twingle/Submission.php b/CRM/Twingle/Submission.php index 2c3e85d..1955d18 100644 --- a/CRM/Twingle/Submission.php +++ b/CRM/Twingle/Submission.php @@ -18,7 +18,6 @@ declare(strict_types = 1); use CRM_Twingle_ExtensionUtil as E; use Civi\Twingle\Exceptions\BaseException; use Civi\Twingle\Shop\Exceptions\LineItemException; -use Civi\Twingle\Shop\BAO\TwingleProduct; class CRM_Twingle_Submission { @@ -503,7 +502,7 @@ class CRM_Twingle_Submission { // Try to find the TwingleProduct with its corresponding PriceField // for this product try { - $price_field = TwingleProduct::findByExternalId($product['id']); + $price_field = CRM_Twingle_BAO_TwingleProduct::findByExternalId($product['id']); } catch (Exception $e) { Civi::log()->error(E::LONG_NAME . diff --git a/api/v3/TwingleProduct/Create.php b/api/v3/TwingleProduct/Create.php index 36bb48a..2490557 100644 --- a/api/v3/TwingleProduct/Create.php +++ b/api/v3/TwingleProduct/Create.php @@ -2,7 +2,6 @@ use Civi\Twingle\Shop\Exceptions\ProductException; use CRM_Twingle_ExtensionUtil as E; -use Civi\Twingle\Shop\BAO\TwingleProduct; /** * TwingleProduct.Create API specification (optional) @@ -121,7 +120,7 @@ function civicrm_api3_twingle_product_Create($params): array { try { // Create TwingleProduct and load params - $product = new TwingleProduct(); + $product = new CRM_Twingle_BAO_TwingleProduct(); $product->load($params); // Save TwingleProduct diff --git a/api/v3/TwingleProduct/Delete.php b/api/v3/TwingleProduct/Delete.php index 60c9591..7c675ab 100644 --- a/api/v3/TwingleProduct/Delete.php +++ b/api/v3/TwingleProduct/Delete.php @@ -1,7 +1,6 @@ delete(); diff --git a/api/v3/TwingleProduct/Get.php b/api/v3/TwingleProduct/Get.php index a7f64ca..9544678 100644 --- a/api/v3/TwingleProduct/Get.php +++ b/api/v3/TwingleProduct/Get.php @@ -1,7 +1,6 @@ getMessage(), [ diff --git a/api/v3/TwingleShop/Create.php b/api/v3/TwingleShop/Create.php index ebb34f4..ab858ff 100644 --- a/api/v3/TwingleShop/Create.php +++ b/api/v3/TwingleShop/Create.php @@ -1,6 +1,5 @@ load($params); // Save TwingleShop diff --git a/api/v3/TwingleShop/Delete.php b/api/v3/TwingleShop/Delete.php index d1f3323..cc851a7 100644 --- a/api/v3/TwingleShop/Delete.php +++ b/api/v3/TwingleShop/Delete.php @@ -1,6 +1,6 @@ deleteByConstraint(); if ($result) { return civicrm_api3_create_success(1, $params, 'TwingleShop', 'Delete'); diff --git a/api/v3/TwingleShop/Fetch.php b/api/v3/TwingleShop/Fetch.php index 961f42b..9c5d3e3 100644 --- a/api/v3/TwingleShop/Fetch.php +++ b/api/v3/TwingleShop/Fetch.php @@ -1,7 +1,6 @@ fetchProducts(); $returnValues[$projectId] = []; $returnValues[$projectId] += $shop->getAttributes(); @@ -63,7 +62,7 @@ function civicrm_api3_twingle_shop_Fetch($params) { return $product->getAttributes(); }, $products); } - catch (ShopException|ApiCallError|ProductException $e) { + catch (ShopException | ApiCallError | ProductException $e) { // If this project identifier doesn't belong to a project of type // 'shop', just skip it if ($e->getErrorCode() == ShopException::ERROR_CODE_NOT_A_SHOP) { diff --git a/api/v3/TwingleShop/Get.php b/api/v3/TwingleShop/Get.php index 2915212..9309e04 100644 --- a/api/v3/TwingleShop/Get.php +++ b/api/v3/TwingleShop/Get.php @@ -1,6 +1,6 @@ getMessage(), [ diff --git a/twingle.php b/twingle.php index c00ac35..9c20db1 100644 --- a/twingle.php +++ b/twingle.php @@ -17,7 +17,7 @@ function twingle_civicrm_pre($op, $objectName, $id, &$params) { // Create/delete PriceField and PriceFieldValue for TwingleProduct elseif ($objectName == 'TwingleProduct') { - $twingle_product = new \Civi\Twingle\Shop\BAO\TwingleProduct(); + $twingle_product = new CRM_Twingle_BAO_TwingleProduct(); $twingle_product->load($params); if ($op == 'create' || $op == 'edit') { $twingle_product->createPriceField(); @@ -30,7 +30,7 @@ function twingle_civicrm_pre($op, $objectName, $id, &$params) { // Create PriceSet for TwingleShop elseif ($objectName == 'TwingleShop' && ($op == 'create' || $op == 'edit')) { - $twingle_shop = new \Civi\Twingle\Shop\BAO\TwingleShop(); + $twingle_shop = new CRM_Twingle_BAO_TwingleShop(); $twingle_shop->load($params); $twingle_shop->createPriceSet(); $params = $twingle_shop->getAttributes(); From 2ee06faf34bb7ccdd40e066770d175ac0f7cbba5 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Thu, 23 Jan 2025 15:17:54 +0100 Subject: [PATCH 12/15] Version 1.5-beta4 --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index c019d80..56b4ef3 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - - 1.5-dev - dev + 2025-01-23 + 1.5-beta4 + beta 5.58 From c8a577b6517807a7b273e2691454fa9f597dd366 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Thu, 23 Jan 2025 15:18:14 +0100 Subject: [PATCH 13/15] Back to dev (1.5-dev) --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index 56b4ef3..c019d80 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - 2025-01-23 - 1.5-beta4 - beta + + 1.5-dev + dev 5.58 From 21f29ce169ffe00eebab2daf36dc68b9533fc1c7 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Fri, 21 Feb 2025 13:13:44 +0100 Subject: [PATCH 14/15] Version 1.5.0 --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index c019d80..1e7baa0 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - - 1.5-dev - dev + 2025-02-21 + 1.5.0 + stable 5.58 From b8f44d962de634a777bf85fe25300101c66788cd Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Fri, 21 Feb 2025 13:14:04 +0100 Subject: [PATCH 15/15] Back to dev (1.6-dev) --- info.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/info.xml b/info.xml index 1e7baa0..edfa3fb 100644 --- a/info.xml +++ b/info.xml @@ -14,9 +14,9 @@ https://github.com/systopia/de.systopia.twingle/issues http://www.gnu.org/licenses/agpl-3.0.html - 2025-02-21 - 1.5.0 - stable + + 1.6-dev + dev 5.58