コード例 #1
0
ファイル: Publish.php プロジェクト: nabble/ajde-core
 public function beforeSave(MetaModel $meta, $value, Model $model)
 {
     if ($value == 1) {
         // we need to publish this thing
         $stream = $meta->getOption('stream');
         $publisherClass = "Ajde_Publisher_" . ucfirst($stream);
         /* @var $publisher Ajde_Publisher */
         $publisher = new $publisherClass();
         if (strtolower($stream) == 'twitter') {
             $publisher->setOptions(array('consumerKey' => $meta->getOption('twitter_consumerkey'), 'consumerSecret' => $meta->getOption('twitter_consumersecret'), 'token' => $meta->getOption('twitter_token'), 'tokenSecret' => $meta->getOption('twitter_tokensecret')));
         }
         if (strtolower($stream) == 'mail') {
             $addresses = $model->getPublishRecipients();
             $publisher->setRecipients($addresses);
         }
         // fill with content
         $publishData = $model->getPublishData();
         $publisher->setTitle($publishData['title']);
         $publisher->setMessage($publishData['message']);
         $publisher->setImage($publishData['image']);
         $publisher->setUrl($publishData['url']);
         $value = $publisher->publish();
     }
     return $value;
 }
コード例 #2
0
ファイル: Model.php プロジェクト: nabble/ajde-core
 public function deleteMetaValue($metaId)
 {
     if (($this->validateAccess('update', false) || $this->validateAccess('insert', false)) == false) {
         $this->validationErrorRedirect();
     }
     parent::deleteMetaValue($metaId);
 }
コード例 #3
0
ファイル: User.php プロジェクト: nabble/ajde-core
 public function getMetaField(MetaModel $meta)
 {
     Model::register('user');
     $field = $this->decorationFactory($meta);
     $field->setType('fk');
     $field->setModelName('user');
     return $field;
 }
コード例 #4
0
ファイル: Wedeal.php プロジェクト: nabble/ajde-core
 public function updatePayment()
 {
     $request = Ajde::app()->getRequest();
     $username = $request->getParam('Username');
     $password = $request->getParam('Password');
     $id = $request->getParam('ID');
     $secret = $request->getParam('Reference');
     $paymentMethod = $request->getParam('PaymentMethod');
     $state = $request->getParam('PaymentState');
     $description = $request->getParam('Description');
     if ($username != Config::get('shopWedealCallbackUsername')) {
         Log::log('Invalid username for callback of transaction ' . $secret);
         return false;
     }
     if ($password != Config::get('shopWedealCallbackPassword')) {
         Log::log('Invalid password for callback of transaction ' . $secret);
         return false;
     }
     Model::register('shop');
     $transaction = new TransactionModel();
     if (!$transaction->loadByField('secret', $secret)) {
         Log::log('Could not find transaction for PayPal payment with txn id ' . $txn_id . ' and transaction secret ' . $secret);
     }
     $request = array("type" => 'query', "merchant" => array("username" => Config::get('shopWedealUsername'), "password" => Config::get('shopWedealPassword'), "reference" => $secret));
     // Pause a little before request is made to allow for processing on provider
     // as this request will be made synchronously after payment
     sleep(3);
     $res = $this->sendRequest($request);
     if ($res['success'] === true) {
         $response = $res['response']->paymentinfo;
         $count = (int) $res['response']->count;
         // get transaction details
         if ($count == 0) {
             $transaction->payment_status = 'refused';
             $transaction->save();
             Log::log('iDeal callback didn\'t return any transaction for ' . $secret);
         } elseif (self::isPaid((string) $response->state)) {
             if ((string) $response->id != $id) {
                 Log::log('IDs don\'t match for iDeal callback of transaction ' . $secret);
             } else {
                 $details = 'AMOUNT: ' . (string) $response->amount . PHP_EOL . 'PAYER_NAME: ' . (string) $response->consumername . PHP_EOL . 'PAYER_ACCOUNT: ' . (string) $response->consumeraccount . PHP_EOL . 'PAYER_CITY: ' . (string) $response->consumercity . PHP_EOL . 'PAYER_COUNTRY: ' . (string) $response->consumercountry . PHP_EOL . 'WEDEAL_ID: ' . (string) $response->id;
                 $transaction->payment_details = $details;
                 $transaction->payment_status = 'completed';
                 $transaction->save();
                 return array('success' => true, 'transaction' => $transaction);
             }
         } elseif (self::isRefused((string) $response->state)) {
             $transaction->payment_status = 'refused';
             $transaction->save();
             Log::log("iDeal payment refused with state " . (string) $response->state);
         } else {
             Log::log("iDeal payment callback called with state " . (string) $response->state . " but no status change for transaction " . $secret . " detected");
         }
     } else {
         Log::log("Wedeal::updatePayment() failed because: " . $res['response']);
     }
     return array('success' => false, 'transaction' => $transaction);
 }
コード例 #5
0
ファイル: Controller.php プロジェクト: nabble/ajde-core
 /**
  *
  * @return UserModel
  */
 protected function getLoggedInUser()
 {
     if (!isset($this->_user)) {
         foreach ($this->_registerUserModels as $model) {
             Model::register($model);
         }
         $this->_user = UserModel::getLoggedIn();
     }
     return $this->_user;
 }
コード例 #6
0
ファイル: Autologon.php プロジェクト: nabble/ajde-core
 public static function __bootstrap()
 {
     Model::register('user');
     if (User::getLoggedIn()) {
         return true;
     }
     $user = new UserModel();
     $user->verifyCookie(false);
     return true;
 }
コード例 #7
0
ファイル: Db.php プロジェクト: nabble/ajde-core
 public static function _($message, $channel = Log::CHANNEL_INFO, $level = Log::LEVEL_INFORMATIONAL, $description = '', $code = '', $trace = '')
 {
     // don't use db writer on db error
     if (substr_count($message, 'SQLSTATE')) {
         return false;
     }
     Model::register('admin');
     $log = new LogModel();
     $log->populate(array('message' => $message, 'channel' => $channel, 'level' => $level, 'description' => $description, 'code' => $code, 'trace' => $trace, 'request' => self::getRequest(), 'user_agent' => self::getUserAgent(), 'referer' => self::getReferer(), 'ip' => self::getIP()));
     return $log->insert();
 }
コード例 #8
0
ファイル: Autodebug.php プロジェクト: nabble/ajde-core
 public static function __bootstrap()
 {
     Model::register('user');
     if (($user = User::getLoggedIn()) && $user->getDebug()) {
         $config = Config::getInstance();
         $config->debug = true;
         if (!in_array('Debugger', $config->documentProcessors['html'])) {
             $config->documentProcessors['html'][] = 'Debugger';
         }
     }
     return true;
 }
コード例 #9
0
ファイル: Controller.php プロジェクト: nabble/ajde-core
 public function beforeInvoke($allowed = array())
 {
     foreach ($this->_registerAclModels as $model) {
         Model::register($model);
     }
     if (!in_array($this->getAction(), array_merge($this->_allowedActions, $allowed)) && $this->hasAccess() === false) {
         Log::_('ACL firewall hit', Log::CHANNEL_SECURITY, Log::LEVEL_INFORMATIONAL, implode(PHP_EOL, Ajde_Acl::$log));
         Ajde::app()->getRequest()->set('message', __('You may not have the required permission to view this page'));
         Ajde::app()->getResponse()->dieOnCode(Response::RESPONSE_TYPE_UNAUTHORIZED);
     } else {
         return true;
     }
 }
コード例 #10
0
ファイル: Spatial.php プロジェクト: nabble/ajde-core
 public function getMetaField(MetaModel $meta)
 {
     $field = $this->decorationFactory($meta);
     $field->setType('spatial');
     if ($meta->getOption('spatialtype') === 'Image') {
         Model::register('media');
         $media = new MediaModel();
         $media->loadByPK($meta->getOption('media'));
         $field->setUseImage(true);
         $field->setLayerImage($this->_uploaddir . $media->get('thumbnail'));
     }
     return $field;
 }
コード例 #11
0
ファイル: Controller.php プロジェクト: nabble/ajde-core
 public function beforeInvoke($allowed = array())
 {
     $token = Ajde::app()->getRequest()->getParam('token', false);
     if ($token) {
         Model::register('user');
         $user = new UserModel();
         list($uid, $hash) = explode(':', $token);
         if ($user->loadByPK($uid)) {
             if ($user->getCookieHash(false) === $hash) {
                 $user->login();
             }
         }
     }
     $user = UserModel::getLoggedIn();
     if ($user) {
         return parent::beforeInvoke($allowed);
     }
     Ajde::app()->getRequest()->set('message', __('You may not have the required permission to view this page'));
     Ajde::app()->getResponse()->dieOnCode(Response::RESPONSE_TYPE_UNAUTHORIZED);
 }
コード例 #12
0
ファイル: Media.php プロジェクト: nabble/ajde-core
 public function getMetaField(MetaModel $meta)
 {
     Model::register('media');
     $field = $this->decorationFactory($meta);
     $field->setType('fk');
     $field->setModelName('media');
     if ($meta->getOption('usemediatype')) {
         $field->setAdvancedFilter(array(new Where('mediatype', Filter::FILTER_EQUALS, $meta->getOption('usemediatype'))));
     }
     if ($meta->getOption('popup')) {
         $field->setListRoute('admin/media:view.crud');
         $field->setUsePopupSelector(true);
         $field->setUseImage(true);
         $field->addTableFileField('thumbnail', UPLOAD_DIR);
         $field->setThumbDim(600, 200);
     }
     //		$field->setUseImage(true);
     //		$field->addTableFileField('thumbnail', UPLOAD_DIR);
     //		$field->setThumbDim(300, 20);
     return $field;
 }
コード例 #13
0
ファイル: Merge.php プロジェクト: nabble/ajde-core
 public static function mergeUserToClient()
 {
     Model::register('user');
     Model::register('shop');
     if ($user = User::getLoggedIn()) {
         // Do we have a saved cart for logged in user?
         $userCart = new CartModel();
         if ($userCart->loadByUser($user)) {
             // Do we have a saved cart for client?
             $clientCart = new CartModel();
             if ($clientCart->loadByClient() === false) {
                 $clientCart->client = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
                 $clientCart->insert();
             }
             foreach ($userCart->getItems() as $item) {
                 /* @var $item Ajde_Shop_Cart_Item */
                 $clientCart->addItem($item->getEntity(), null, $item->getQty());
             }
             $userCart->delete();
         }
     }
 }
コード例 #14
0
ファイル: Model.php プロジェクト: nabble/ajde-core
 protected function _load($sql, $values, $populate = true)
 {
     $return = parent::_load($sql, $values, $populate);
     if (Lang::getInstance()->autoTranslateModels() && $return) {
         // get translation
         $lang = Lang::getInstance();
         if ($translation = $this->getTranslated($lang->getLang())) {
             /* @var $translation Ajde_Lang_Proxy_Model */
             $this->reset();
             $this->loadFromValues($translation->values());
         }
     }
     return $return;
 }
コード例 #15
0
ファイル: Revision.php プロジェクト: nabble/ajde-core
 public function save()
 {
     // check all changed fields
     $modelName = get_class($this);
     $shadowModel = new $modelName();
     /* @var $shadowModel Ajde_Model */
     $shadowModel->loadByPK($this->getPK());
     if ($shadowModel->_hasMeta) {
         $shadowModel->populateMeta();
     }
     // old values
     $oldValues = $shadowModel->values();
     foreach ($oldValues as &$oldValue) {
         @($oldValue = (string) $oldValue);
     }
     // populate meta of current model, but don't override
     if ($this->_hasMeta) {
         $this->populateMeta(false, false);
     }
     // new values
     $newValues = $this->values();
     foreach ($newValues as $k => &$newValue) {
         if ($k == 'meta_4') {
             //                die('hier');
         }
         @($newValue = (string) $newValue);
     }
     // ignore fields
     foreach ($this->_ignoreFieldInRevision as $ignoreField) {
         unset($oldValues[$ignoreField]);
         unset($newValues[$ignoreField]);
     }
     // ignore fields
     foreach ($this->_ignoreFieldInRevisionIfEmpty as $ignoreField) {
         if (!isset($newValues[$ignoreField]) || empty($newValues[$ignoreField])) {
             unset($oldValues[$ignoreField]);
             unset($newValues[$ignoreField]);
         }
     }
     if ($diffs = array_diff_assoc($oldValues, $newValues)) {
         foreach ($diffs as $diffField => $diffValue) {
             $revision = new RevisionModel();
             $revision->model = $this->getModelName();
             $revision->foreignkey = $this->getPK();
             $revision->user = UserModel::getLoggedIn();
             $revision->field = $diffField;
             $revision->old = issetor($oldValues[$diffField]);
             $revision->new = issetor($newValues[$diffField]);
             $revision->insert();
         }
     }
     return parent::save();
 }
コード例 #16
0
ファイル: Paypal.php プロジェクト: nabble/ajde-core
 public function updatePayment()
 {
     // PHP 4.1
     // read the post from PayPal system and add 'cmd'
     $req = 'cmd=_notify-validate';
     foreach ($_POST as $key => $value) {
         $value = urlencode(stripslashes($value));
         $req .= "&{$key}={$value}";
     }
     // post back to PayPal system to validate
     $header = '';
     $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
     $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
     $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
     $fp = fsockopen($this->isSandbox() ? 'ssl://www.sandbox.paypal.com' : 'ssl://www.paypal.com', 443, $errno, $errstr, 30);
     // assign posted variables to local variables
     $item_name = issetor($_POST['item_name']);
     $item_number = issetor($_POST['item_number']);
     $payment_status = issetor($_POST['payment_status']);
     $payment_amount = issetor($_POST['mc_gross']);
     $payment_currency = issetor($_POST['mc_currency']);
     $txn_id = issetor($_POST['txn_id']);
     $receiver_email = issetor($_POST['receiver_email']);
     $payer_email = issetor($_POST['payer_email']);
     Model::register('shop');
     $secret = issetor($_POST['custom']);
     $transaction = new TransactionModel();
     $changed = false;
     if (!$fp) {
         // HTTP ERROR
     } else {
         fputs($fp, $header . $req);
         while (!feof($fp)) {
             $res = fgets($fp, 1024);
             if (strcmp($res, "VERIFIED") == 0) {
                 if (!$transaction->loadByField('secret', $secret)) {
                     Log::log('Could not find transaction for PayPal payment with txn id ' . $txn_id . ' and transaction secret ' . $secret);
                     return array('success' => false, 'transaction' => null);
                 }
                 // check the payment_status is Completed
                 // accept Pending from PayPal (eChecks?)
                 $acceptPending = true;
                 if ($payment_status == 'Completed' || $acceptPending && $payment_status == 'Pending') {
                     $details = 'AMOUNT: ' . $payment_amount . PHP_EOL . 'CURRENCY: ' . $payment_currency . PHP_EOL . 'PAYER_EMAIL: ' . $payer_email . PHP_EOL . 'RECEIVER_EMAIL: ' . $receiver_email . PHP_EOL . 'TXN_ID: ' . $txn_id . PHP_EOL;
                     // update transaction only once
                     if ($transaction->payment_status != 'completed') {
                         $transaction->payment_details = $details;
                         $transaction->payment_status = 'completed';
                         $transaction->save();
                         $changed = true;
                     }
                     // Write pending to Log
                     if ($payment_status == 'Pending') {
                         Log::log('Status is Pending but accepting now. PayPal payment with txn id ' . $txn_id . ' and transaction secret ' . $secret);
                     }
                     return array('success' => true, 'changed' => $changed, 'transaction' => $transaction);
                 } else {
                     if ($transaction->payment_status != 'refused') {
                         $transaction->payment_status = 'refused';
                         $transaction->save();
                         $changed = true;
                     }
                     Log::log('Status is not Completed but ' . $payment_status . ' for PayPal payment with txn id ' . $txn_id . ' and transaction secret ' . $secret);
                 }
                 // check that txn_id has not been previously processed
                 // check that receiver_email is your Primary PayPal email
                 // check that payment_amount/payment_currency are correct
                 // process payment
             } else {
                 if (strcmp($res, "INVALID") == 0) {
                     if (!$transaction->loadByField('secret', $secret)) {
                         // secret not found anyway
                         $transaction = null;
                         Log::log('Could not find transaction for PayPal payment with txn id ' . $txn_id . ' and transaction secret ' . $secret);
                     } else {
                         // log for manual investigation
                         if ($transaction->payment_status != 'refused') {
                             $transaction->payment_status = 'refused';
                             $transaction->save();
                             $changed = true;
                         }
                         Log::log('Validation failed for PayPal payment with txn id ' . $txn_id);
                     }
                 }
             }
         }
         fclose($fp);
     }
     return array('success' => false, 'changed' => $changed, 'transaction' => $transaction);
 }
コード例 #17
0
ファイル: Item.php プロジェクト: nabble/ajde-core
 /**
  *
  * @param string $entity
  * @return Ajde_Model
  */
 protected function _getEntityModel($entityName)
 {
     Model::registerAll();
     $entityModelName = ucfirst((string) $entityName) . 'Model';
     return new $entityModelName();
 }
コード例 #18
0
ファイル: Cms.php プロジェクト: nabble/ajde-core
 protected function __construct()
 {
     Model::registerAll();
     // Load applications bootstrap file
     require_once APP_DIR . 'Bootstrap.php';
 }
コード例 #19
0
ファイル: Meta.php プロジェクト: nabble/ajde-core
 public function getMetaFields($crossReferenceTable, $crossReferenceField, $sortField, $parentField, $filters = array())
 {
     $allFields = array();
     Model::register('admin');
     $metas = new MetaCollection();
     $metas->concatCrossReference($crossReferenceTable, $crossReferenceField);
     $metas->concatField($crossReferenceTable, $sortField);
     if (!empty($filters)) {
         $group = new WhereGroup();
         foreach ($filters as $filter) {
             if ($filter instanceof Where) {
                 $group->addFilter($filter);
             } else {
                 $metas->addFilter($filter);
             }
         }
         $metas->addFilter($group);
     }
     foreach ($metas as $meta) {
         $metaField = $this->getType($meta->get('type'));
         $fieldOptions = $metaField->getMetaField($meta);
         // add show only when
         foreach (explode(',', $meta->get($crossReferenceField)) as $parentValue) {
             $fieldOptions->addShowOnlyWhen($parentField, $parentValue);
         }
         // add sorting
         foreach (explode(',', $meta->get($sortField)) as $parentValue) {
             $fieldOptions->addDynamicSort($parentField, $parentValue);
         }
         $allFields['meta_' . $meta->getPK()] = $fieldOptions;
     }
     return $allFields;
 }