"We are back" « oc.at

php/sql hilfe

nicolas conte 10.03.2011 - 09:38 3034 14
Posts

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
hallo,

für ein projekt benutze ich civicrm, wobei ich ein paar änderungen vornehmen müsste.

ich habe das ganze genauer in diesem thread http://forum.civicrm.org/index.php/...g78673.html#new im civicrm forum beschrieben; dort konnt mir lieder niemand helfen.

ich hab nicht wirklich ahnung von php, muss ich gleich dazu sagen, und vielleicht ist auch mein ganzer ansatz lächerlich. wär trotzdem nett, wenn jemand sich das mal anschauen könnte.

danke
mfg
conte

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Es wär sinnvoll wenn du das Problem hier noch einmal zusammenfassend beschreibst, was du eigentlich willst, wie der code jetzt aussieht und was du verändert hast (diff)

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
hi

ok:

also bei der open-source software civicrm gibt es das module civicontribute, das für die spendenverwaltung zuständig ist. In dem Modul gibt es ein dashboard mit einer tabelle in der das jährliche spendenvolumen, die spenden des aktuellen monats etc. angezeigt werden.

Diese Tabelle möchte ich um ein paar punkte erweitern. Ich möchte die Summe der einzelnen Spendentypen (Privatspenden, Firmenspeden, etc.) des aktuellen Monats aufgelistet haben.

die datei dashboard.tpl ist für die tabelle zuständig, da würde ich einfach folgendes hinzufügen, was auch funktioniert:

Code: HTML
<tr>
    <td><strong>{ts}Private Donations{/ts}</strong></td>
    <td class="label">{if NOT $monthToDate.Valid.amount}{ts}(n/a){/ts}{else}{$monthToDate.Valid.amount}{/if}</td>
    <td class="label">{$monthToDate.Valid.count}</td>
    <td><a href="{$monthToDate.Valid.url}">{ts}view details{/ts}...</a></td>
</tr>

in der datei dashboard.php werden meines wissen nach die einzelnen punkte berechnet:

Code: PHP
/**
     * Heart of the viewing process. The runner gets all the meta data for
     * the contact and calls the appropriate type of page to view.
     *
     * @return void
     * @access public
     *
     */
    function preProcess( )
    {
        CRM_Utils_System::setTitle( ts('CiviContribute') );

        $status      = array( 'Valid', 'Cancelled' );
        $prefixes    = array( 'start', 'month', 'year'  );
        $startDate   = null;
        $startToDate = $monthToDate = $yearToDate = array( );

        //get contribution dates.
        require_once 'CRM/Contribute/BAO/Contribution.php';
        $dates = CRM_Contribute_BAO_Contribution::getContributionDates( );
        foreach ( array( 'now', 'yearDate', 'monthDate' ) as $date ) {
            $$date = $dates[$date];
        }
        $yearNow = $yearDate + 10000;
        foreach ( $prefixes as $prefix ) {
            $aName = $prefix . 'ToDate';
            $dName = $prefix . 'Date';

            if ( $prefix == 'year') {
                $now  = $yearNow;
            }

            foreach ( $status as $s ) {
                ${$aName}[$s]        = CRM_Contribute_BAO_Contribution::getTotalAmountAndCount( $s, $$dName, $now );
                ${$aName}[$s]['url'] = CRM_Utils_System::url( 'civicrm/contribute/search',
                                                              "reset=1&force=1&status=1&start={$$dName}&end=$now&test=0");
            }

            $this->assign( $aName, $$aName );
        }

        //for contribution tabular View
        $buildTabularView = CRM_Utils_Array::value( 'showtable', $_GET, false );
        $this->assign( 'buildTabularView', $buildTabularView );
        if( $buildTabularView ) return;

ich müsste eben dashboard.php so modifizieren, dass es mir die Summe der einzelnen Spendentypen anzeigt.

Ich hoffe, dass ich das halbwegs klar formuliert habe und mir jemand dabei helfen kann.

Danke
mfg
conte
Bearbeitet von nicolas conte am 21.03.2011, 13:50

bensh

Addicted
Avatar
Registered: Jun 2003
Location: Wien
Posts: 371
Die Funktion ist nicht vollständig oder ? Egal.

Ich hab kurz bei dem anderen Thread reingeschaut und fand:

getTotalAmountAndCount( $s, $$dName, $now );

aus diesem Block:

foreach ( $status as $s ) {
${$aName}[$s] = CRM_Contribute_BAO_Contribution::getTotalAmountAndCount( $s, $$dName, $now );
${$aName}[$s]['url'] = CRM_Utils_System::url( 'civicrm/contribute/search',
"reset=1&force=1&status=1&start={$$dName}&end=$now&test=0");

Das was ich herausgezogen hab ist eine Funktion die wohl scheinbar genau das tut (könnte zmd sein, name passt ja so halbwegs) was du willst, nur das $now mit dem aktuellen Jahr funktioniert.

Du müsstest einfach eine Äquivalente Funktion in der Funktionsliste mit einer weiteren Variable einfügen, also nach $now noch , $nowmonth oder so,
dann in der Funktion eben nach $month == thismonth und $year == thisyear überprüfen und dir das dann ausgeben.

Dazu musst du halt nen weiteren Block dort einfügen wo die Ausgaben definiert werden und dort die Funktion callen.

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
hi

ja dieser block berechnet das, aber wie kann ich den erweitern, damit er mir die jeweiligen Summen der einzelnen Spendentypen des aktuellen Monats sagt.

ich hab das mal ohne php kenntnissen so geändert:

Code: PHP
        $status      = array( 'Valid', 'Cancelled' );
        $prefixes    = array( 'start', 'month', 'year' , 'private' );
        $startDate   = null;
        $startToDate = $monthToDate = $yearToDate = $privateToDate = array( );

        //get contribution dates.
        require_once 'CRM/Contribute/BAO/Contribution.php';
        $dates = CRM_Contribute_BAO_Contribution::getContributionDates( );
        foreach ( array( 'now', 'yearDate', 'monthDate', 'privateDate' ) as $date ) {
            $$date = $dates[$date];
        }
        $yearNow = $yearDate + 10000;
        foreach ( $prefixes as $prefix ) {
            $aName = $prefix . 'ToDate';
            $dName = $prefix . 'Date';
            $type = $contribution_type_id_value = 3;

            if ( $prefix == 'year') {
                $now  = $yearNow;
            }

            foreach ( $status as $s ) {
                ${$aName}[$s]        = CRM_Contribute_BAO_Contribution::getTotalAmountAndCount( $s, $$dName, $now, $type );
                ${$aName}[$s]['url'] = CRM_Utils_System::url( 'civicrm/contribute/search',
                                                              "reset=1&force=1&status=1&start={$$dName}&end=$now&test=0");
            }

            $this->assign( $aName, $$aName );
        }

hab in dashboard.tpl das eingefügt:

Code: PHP
<tr>
    <td><strong>{ts}Privatspenden{/ts}</strong></td>
    <td class="label">{if NOT $privateToDate.Valid.amount}{ts}(n/a){/ts}{else}{$privateToDate.Valid.amount}{/if}</td>
    <td class="label">{$privateToDate.Valid.count}</td>
    <td><a href="{$privateToDate.Valid.url}">{ts}view details{/ts}...</a></td>
</tr>

funktioniert jedenfalls nicht, dass mir dann die Privatspenden des aktuellen Monats angezeigt werden. es liefert mir jetzt die Summe aller Spenden in allen Jahren.

Any ideas?

danke
conte
Bearbeitet von nicolas conte am 23.03.2011, 12:47

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Du kannst nicht erwarten einfach einer Funktion ein zusätzliches Argument zu übergeben und das funktioniert dann. Da muss man schon auch den Code noch ändern.

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
Zitat von watchout
Du kannst nicht erwarten einfach einer Funktion ein zusätzliches Argument zu übergeben und das funktioniert dann. Da muss man schon auch den Code noch ändern.

du kannst nicht erwarten, dass mir das weiter hilft. :)

conte

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von nicolas conte
du kannst nicht erwarten, dass mir das weiter hilft. :)

conte
Also suchst du eigentlich keine Hilfe sondern wen der das für dich macht, oder?

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
er braucht wohl ein php-tut zum besseren verständnis, vielleicht reicht auch die php-doku.

bensh

Addicted
Avatar
Registered: Jun 2003
Location: Wien
Posts: 371
Zitat von nicolas conte
du kannst nicht erwarten, dass mir das weiter hilft. :)

conte
Es gibt irgendwo eine Liste in der stehen die Funktionen.
In ca. der Form:

function functionenname(var1,var2,var3)
{
FUNKTION
}

Da gibts eben die eine, die kopierst du, bennenst sie um und fügst eben ein varX oder so dazu. Dann musst du noch die Funktion ansich umschreiben so dass sie tut was du willst.

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
Zitat von watchout
Also suchst du eigentlich keine Hilfe sondern wen der das für dich macht, oder?

ganz und gar nicht. ich habe ja schon einiges probiert, aber wie gesagt, hab ich nicht sonderlich viel ahnung von php

in der file dashboard.php werden eben die werte berechnet und ich glaube mit ein paar änderungen, sollte ich meine wünsche realisieren können, aber irgendwo happerts noch.

danke
mfg
conte

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25538
Du wirst dich genauer in PHP einarbeiten müssen. So gerne dir einer von uns helfen möchte, es wird wenig bringen, wenn du die Änderungen nicht verstehst.

Du hast ja scheinbar eine funktionierende Code-Basis ... experimentiere damit herum und du wirst sehen, dass alles seinen Grund hat. Die PHP-Dokumentation ist sehr benutzerfreundlich und sorgt für ausreichend Informationen, ohne eine Suchmaschine anwerfen zu müssen.

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
hallo,

danke für die antworten. ich sehe schon, dass ich dies wahrscheinlich nicht hinbekommen werde.

könnte das jemand von euch, natürlich gegen bezahlung, übernehmen? wieviel arbeitsaufwand ist das ungefähr?

mfg
conte
Bearbeitet von nicolas conte am 29.03.2011, 11:05

nicolas conte

Here to stay
Avatar
Registered: Mar 2002
Location: vienna
Posts: 690
up

Paxi

Overclocking Team Member
Avatar
Registered: Oct 2009
Location: Wien
Posts: 389
check your pm^^
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz