コード例 #1
0
ファイル: TwitterSeed.php プロジェクト: JamesLinus/platform
 public static function handleRedirectReturn($data = false)
 {
     if (isset($data['error'])) {
         return 'There was an error. (general) Please try again.';
     } else {
         $connections = CASHSystem::getSystemSettings('system_connections');
         require_once CASH_PLATFORM_ROOT . '/lib/twitter/OAuth.php';
         require_once CASH_PLATFORM_ROOT . '/lib/twitter/twitteroauth.php';
         $temporary_credentials = AdminHelper::getPersistentData('twitter_temporary_credentials');
         $twitter = new TwitterOAuth($connections['com.twitter']['client_id'], $connections['com.teitter']['client_secret'], $temporary_credentials['oauth_token'], $temporary_credentials['oauth_token_secret']);
         $access_token = $twitter->getAccessToken($_REQUEST['oauth_verifier']);
         if ($twitter->http_code == 200) {
             // we can safely assume (AdminHelper::getPersistentData('cash_effective_user') as the OAuth
             // calls would only happen in the admin. If this changes we can f**k around with it later.
             $new_connection = new CASHConnection(AdminHelper::getPersistentData('cash_effective_user'));
             $result = $new_connection->setSettings('@' . $access_token['screen_name'] . ' (Twitter)', 'com.twitter', array('token' => $access_token));
             if ($result) {
                 AdminHelper::formSuccess('Success. Connection added. You\'ll see it in your list of connections.', '/settings/connections/');
             } else {
                 AdminHelper::formFailure('Error. Could not save connection.', '/settings/connections/');
             }
         } else {
             AdminHelper::formFailure('Error. Problem communicating with Twitter', '/settings/connections/');
         }
     }
 }
コード例 #2
0
ファイル: S3Seed.php プロジェクト: JamesLinus/platform
 public static function handleRedirectReturn($data = false)
 {
     $connections = CASHSystem::getSystemSettings('system_connections');
     if (isset($connections['com.amazon'])) {
         $s3_default_email = $connections['com.amazon']['email'];
     } else {
         $s3_default_email = false;
     }
     $success = S3Seed::connectAndAuthorize($data['key'], $data['secret'], $data['bucket'], $s3_default_email);
     if ($success) {
         // we can safely assume (AdminHelper::getPersistentData('cash_effective_user') as the OAuth
         // calls would only happen in the admin. If this changes we can f**k around with it later.
         $new_connection = new CASHConnection(AdminHelper::getPersistentData('cash_effective_user'));
         $connection_name = $data['bucket'] . ' (Amazon S3)';
         if (substr($connection_name, 0, 10) == 'cashmusic.') {
             $connection_name = 'Amazon S3 (created ' . date("M j, Y") . ')';
         }
         $result = $new_connection->setSettings($connection_name, 'com.amazon', array('bucket' => $data['bucket']));
         if ($result) {
             AdminHelper::formSuccess('Success. Connection added. You\'ll see it in your list of connections.', '/settings/connections/');
         } else {
             AdminHelper::formFailure('Error. Something just didn\'t work right.');
         }
     } else {
         //$return_markup = '<h4>Error</h4>'
         //			   . '<p>We couldn\'t connect with your S3 account. Please check the key and secret.</p>';
         AdminHelper::formFailure('We couldn\'t connect your S3 account. Please check the key and secret.');
     }
     return $return_markup;
 }
コード例 #3
0
ファイル: CASHSystem.php プロジェクト: nodots/DIY
 /**
  * Handle annoying environment issues like magic quotes, constants and 
  * auto-loaders before firing up the CASH platform and whatnot
  *
  * @return array
  */
 public static function startUp()
 {
     // remove magic quotes, never call them "magic" in front of your friends
     if (get_magic_quotes_gpc()) {
         function stripslashes_from_gpc(&$value)
         {
             $value = stripslashes($value);
         }
         $gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
         array_walk_recursive($gpc, 'stripslashes_from_gpc');
         unset($gpc);
     }
     // define constants (use sparingly!)
     $root = realpath(dirname(__FILE__) . '/../..');
     define('CASH_PLATFORM_ROOT', $root);
     $cash_settings = CASHSystem::getSystemSettings();
     define('CASH_API_URL', $cash_settings['apilocation']);
     define('CASH_PUBLIC_URL', str_replace('api/', 'public/', $cash_settings['apilocation']));
     // set up auto-load
     spl_autoload_register('CASHSystem::autoloadClasses');
     // set timezone
     date_default_timezone_set($cash_settings['timezone']);
     // fire off new CASHRequest to cover any immediate-need things like GET
     // asset requests, etc...
     $cash_page_request = new CASHRequest();
     if (!empty($cash_page_request->response)) {
         $cash_page_request->sessionSet('initial_page_request', array('request' => $cash_page_request->request, 'response' => $cash_page_request->response, 'status_uid' => $cash_page_request->response['status_uid']), 'script');
     }
     unset($cash_page_request);
 }
コード例 #4
0
ファイル: 007_CASHSystem.php プロジェクト: nodots/DIY
 function test_setSystemSetting()
 {
     // also tests findAndReplaceInFile()
     $control = CASHSystem::getSystemSettings('timezone');
     CASHSystem::setSystemSetting('timezone', 'Not really a timezone');
     $return = CASHSystem::getSystemSettings('timezone');
     $this->assertNotEqual($control, $return);
     $this->assertEqual('Not really a timezone', $return);
 }
コード例 #5
0
ファイル: MandrillSeed.php プロジェクト: JamesLinus/platform
 public static function getRedirectMarkup($data = false)
 {
     $connections = CASHSystem::getSystemSettings('system_connections');
     if (isset($connections['com.mandrillapp'])) {
         require_once CASH_PLATFORM_ROOT . '/lib/mandrill/Mandrill.php';
         $login_url = 'http://mandrillapp.com/api-auth/?id=' . $connections['com.mandrillapp']['app_authentication_id'] . '&redirect_url=' . urlencode($connections['com.mandrillapp']['redirect_uri']);
         $return_markup = '<h4>Mandrill</h4>' . '<p>This will redirect you to a secure login on mandrillapp.com and bring you right back.</p>' . '<a href="' . $login_url . '" class="button">Connect your Mandrill account</a>';
         return $return_markup;
     } else {
         return 'Please add default mandrill app credentials.';
     }
 }
コード例 #6
0
ファイル: PaypalSeed.php プロジェクト: hubub/platform
 public static function getRedirectMarkup($data = false)
 {
     $connections = CASHSystem::getSystemSettings('system_connections');
     // I don't like using ADMIN_WWW_BASE_PATH below, but as this call is always called inside the
     // admin I'm just going to do it. Without the full path in the form this gets all fucky
     // and that's no bueno.
     if (isset($connections['com.paypal'])) {
         $return_markup = '<h4>Paypal</h4>' . '<p>You\'ll need a verified Business or Premier Paypal account to connect properly. ' . 'Those are free upgrades, so just double-check your address and enter it below. You ' . 'can learn more about what they entail <a href="https://cms.paypal.com/cgi-bin/?cmd=_render-content&content_ID=developer/EC_setup_permissions">here</a>.</p>' . '<form accept-charset="UTF-8" method="post" id="paypal_connection_form" action="' . ADMIN_WWW_BASE_PATH . '/settings/connections/add/com.paypal">' . '<input type="hidden" name="dosettingsadd" value="makeitso" />' . '<input type="hidden" name="permission_type" value="accelerated" />' . '<input id="connection_name_input" type="hidden" name="settings_name" value="(Paypal)" />' . '<input type="hidden" name="settings_type" value="com.paypal" />' . '<label for="merchant_email">Your Paypal email address:</label>' . '<input type="text" name="merchant_email" id="merchant_email" value="" />' . '<br />' . '<div><input class="button" type="submit" value="Add The Connection" /></div>' . '</form>' . '<script type="text/javascript">' . '$("#paypal_connection_form").submit(function() {' . '	var newvalue = $("#merchant_email").val() + " (Paypal)";' . '	$("#connection_name_input").val(newvalue);' . '});' . '</script>';
         return $return_markup;
     } else {
         return 'Please add default paypal api credentials.';
     }
 }
コード例 #7
0
ファイル: AdminHelper.php プロジェクト: JamesLinus/platform
 public static function getPageMenuDetails()
 {
     $pages_array = json_decode(file_get_contents(dirname(__FILE__) . '/../components/interface/en/menu.json'), true);
     // remove non-multi links
     $platform_type = CASHSystem::getSystemSettings('instancetype');
     if ($platform_type == 'multi') {
         unset($pages_array['settings/update'], $pages_array['people/contacts']);
     }
     // make an array for return
     $return_array = array('page_title' => 'CASH Music', 'tagline' => null, 'section_menu' => '', 'link_text' => null);
     // generate submenu markup
     $current_endpoint = '';
     $previous_endpoint = '';
     $menustr = '';
     foreach ($pages_array as $page_endpoint => $page) {
         $exploded = explode('/', $page_endpoint);
         $current_endpoint = $exploded[0];
         if ($current_endpoint !== $previous_endpoint) {
             if ($previous_endpoint !== '') {
                 $menustr .= '</ul>';
                 $return_array[$previous_endpoint . '_section_menu'] = $menustr;
             }
             $menustr = '<ul>';
             $previous_endpoint = $current_endpoint;
         }
         $menulevel = substr_count($page_endpoint, '/');
         if ($menulevel == 1 && !isset($page['hide'])) {
             // only show top-level menu items
             if (!isset($page['add_class'])) {
                 $page['add_class'] = '';
             }
             $menustr .= "<li><a title=\"{$page['page_name']}\" class=\"{$page['add_class']}\" href=\"" . ADMIN_WWW_BASE_PATH . "/{$page_endpoint}/\"><span>{$page['page_name']}</span><div class=\"icon icon-{$page['menu_icon']}\"></div><!--icon--></a></li>";
         }
     }
     // find the right page title
     $endpoint = str_replace('_', '/', BASE_PAGENAME);
     $endpoint_parts = explode('/', $endpoint);
     if (isset($pages_array[$endpoint])) {
         $current_title = '';
         $current_title .= $pages_array[$endpoint]['page_name'];
         $return_array['page_title'] = $current_title;
         if (isset($pages_array[$endpoint]['tagline'])) {
             $return_array['tagline'] = $pages_array[$endpoint]['tagline'];
         }
     }
     // set link text for the main template
     $return_array['link_text'] = array('link_main_page' => $pages_array['mainpage']['page_name'], 'link_menu_assets' => $pages_array['assets']['page_name'], 'link_menu_people' => $pages_array['people']['page_name'], 'link_menu_commerce' => $pages_array['commerce']['page_name'], 'link_menu_calendar' => $pages_array['calendar']['page_name'], 'link_menu_elements' => $pages_array['elements']['page_name'], 'link_menu_help' => $pages_array['help']['page_name'], 'link_youraccount' => $pages_array['account']['page_name'], 'link_settings' => $pages_array['settings']['page_name'], 'link_settings_connections' => $pages_array['settings/connections']['page_name']);
     return $return_array;
 }
コード例 #8
0
ファイル: AdminCore.php プロジェクト: JamesLinus/platform
 public function __construct($effective_user_id = false, $primary_request = false)
 {
     $this->platform_type = CASHSystem::getSystemSettings('instancetype');
     if (!$this->platform_type) {
         $this->platform_type = 'single';
     }
     $this->stored_responses = array();
     $this->stored_data = array();
     $this->page_data = array();
     if ($effective_user_id) {
         $this->effective_user_id = $effective_user_id;
     }
     if ($primary_request) {
         $this->primary_request = $primary_request;
     }
 }
コード例 #9
0
ファイル: MailchimpSeed.php プロジェクト: JamesLinus/platform
 public static function handleRedirectReturn($data = false)
 {
     if (isset($data['error'])) {
         return 'There was an error. (general) Please try again.';
     } else {
         $connections = CASHSystem::getSystemSettings('system_connections');
         require_once CASH_PLATFORM_ROOT . '/lib/oauth2/OAuth2Client.php';
         require_once CASH_PLATFORM_ROOT . '/lib/oauth2/OAuth2Exception.php';
         require_once CASH_PLATFORM_ROOT . '/lib/mailchimp/MC_OAuth2Client.php';
         $oauth_options = array('redirect_uri' => $connections['com.mailchimp']['redirect_uri'], 'client_id' => $connections['com.mailchimp']['client_id'], 'client_secret' => $connections['com.mailchimp']['client_secret'], 'code' => $data['code']);
         $client = new MC_OAuth2Client($oauth_options);
         $session = $client->getSession();
         if ($session) {
             require_once CASH_PLATFORM_ROOT . '/lib/mailchimp/MailChimp.class.php';
             $cn = new MC_OAuth2Client($oauth_options);
             $cn->setSession($session, false);
             $odata = $cn->api('metadata', 'GET');
             $access_token = $session['access_token'];
             $api_key = $session['access_token'] . '-' . $odata['dc'];
             $api = new MailChimp($api_key);
             $lists = $api->call('lists/list');
             $return_markup = '<h4>Connect to MailChimp</h4>' . '<p>Now just choose a list and save the connection.</p>' . '<form accept-charset="UTF-8" method="post" action="">' . '<input type="hidden" name="dosettingsadd" value="makeitso" />' . '<input id="connection_name_input" type="hidden" name="settings_name" value="(MailChimp list)" />' . '<input type="hidden" name="settings_type" value="com.mailchimp" />' . '<input type="hidden" name="key" value="' . $api_key . '" />' . '<label for="list">Choose a list to connect to:</label>' . '<select id="list_select" name="list">';
             $selected = ' selected="selected"';
             $list_name = false;
             foreach ($lists['data'] as $list) {
                 if ($selected) {
                     $list_name = $list['name'];
                 }
                 $return_markup .= '<option value="' . $list['id'] . '"' . $selected . '>' . $list['name'] . '</option>';
                 $selected = false;
             }
             $return_markup .= '</select><br /><br />' . '<div><input class="button" type="submit" value="Add The Connection" /></div>' . '</form>' . '<script type="text/javascript">' . '$("#connection_name_input").val("' . $list_name . ' (MailChimp)");' . '$("#list_select").change(function() {' . '	var newvalue = this.options[this.selectedIndex].text + " (MailChimp)";' . '	$("#connection_name_input").val(newvalue);' . '});' . '</script>';
             return $return_markup;
         } else {
             return 'There was an error. (session) Please try again.';
         }
     }
 }
コード例 #10
0
ファイル: CASHData.php プロジェクト: rayangc/platform
 /**
  * Grabs database connection properties from /settings/cashmusic.ini.php and
  * opens the appropriate connection
  *
  * @return void
  */
 protected function connectDB()
 {
     $cash_db_settings = CASHSystem::getSystemSettings();
     require_once CASH_PLATFORM_ROOT . '/classes/core/CASHDBA.php';
     $this->db = new CASHDBA($cash_db_settings['hostname'], $cash_db_settings['username'], $cash_db_settings['password'], $cash_db_settings['database'], $cash_db_settings['driver']);
 }
コード例 #11
0
ファイル: SystemPlant.php プロジェクト: JamesLinus/platform
 /**
  * Records the basic login data to the people analytics table
  *
  * @return boolean
  */
 protected function recordLoginAnalytics($user_id, $element_id = null, $login_method = 'internal')
 {
     $result = false;
     // check settings first as they're already loaded in the environment
     $record_type = CASHSystem::getSystemSettings('analytics');
     if ($record_type == 'off') {
         return true;
     }
     // first the big record if needed
     if ($record_type == 'full' || !$record_type) {
         $ip_and_proxy = CASHSystem::getRemoteIP();
         $result = $this->db->setData('people_analytics', array('user_id' => $user_id, 'element_id' => $element_id, 'access_time' => time(), 'client_ip' => $ip_and_proxy['ip'], 'client_proxy' => $ip_and_proxy['proxy'], 'login_method' => $login_method));
     }
     // basic logging happens for full or basic
     if ($record_type == 'full' || $record_type == 'basic') {
         $condition = array("user_id" => array("condition" => "=", "value" => $user_id));
         $current_result = $this->db->getData('people_analytics_basic', '*', $condition);
         if (is_array($current_result)) {
             $last_login = $current_result[0]['modification_date'];
             $new_total = $current_result[0]['total'] + 1;
         } else {
             $last_login = time();
             $new_total = 1;
             $condition = false;
         }
         // store the "last_login" time (as long as it's internal (web login) and > 2 min have passed)
         if ($login_method == 'internal' && $last_login < time() - 120) {
             new CASHRequest(array('cash_request_type' => 'people', 'cash_action' => 'storeuserdata', 'user_id' => $user_id, 'key' => 'last_login', 'value' => $last_login));
             $result = $this->db->setData('people_analytics_basic', array('user_id' => $user_id, 'total' => $new_total), $condition);
         }
     }
     return $result;
 }
コード例 #12
0
ファイル: settings.php プロジェクト: blacktire/DIY
$misc_message = false;
if (isset($_POST['domisc'])) {
    CASHSystem::setSystemSetting('timezone', $_POST['timezone']);
    CASHSystem::setSystemSetting('systememail', $_POST['systememail']);
    $cash_admin->page_data['page_message'] = 'Success. All changed.';
}
$migrate_message = false;
if (isset($_POST['domigrate'])) {
    $new_settings = array('hostname' => $_POST['hostname'], 'username' => $_POST['adminuser'], 'password' => $_POST['adminpassword'], 'database' => $_POST['databasename']);
    $migrate_request = new CASHRequest(array('cash_request_type' => 'system', 'cash_action' => 'migratedb', 'todriver' => $_POST['driver'], 'tosettings' => $new_settings));
    if ($migrate_request->response['payload']) {
        $cash_admin->page_data['page_message'] = 'Success. So that happened.';
    } else {
        $cash_admin->page_data['error_message'] = 'Error. There was a problem migrating your data.';
    }
}
$platform_settings = CASHSystem::getSystemSettings();
$cash_admin->page_data['system_email'] = $platform_settings['systememail'];
$cash_admin->page_data['timezone_options'] = AdminHelper::drawTimeZones($platform_settings['timezone']);
$db_types = array('mysql' => 'MySQL', 'sqlite' => 'SQLite');
$db_type = 'unknown';
if (array_key_exists($platform_settings['driver'], $db_types)) {
    $cash_admin->page_data['db_type'] = $db_types[$platform_settings['driver']];
}
if ($cash_admin->page_data['db_type'] == 'MySQL') {
    $cash_admin->page_data['migrate_from_mysql'] = true;
} elseif ($cash_admin->page_data['db_type'] == 'SQLite') {
    $cash_admin->page_data['migrate_from_sqlite'] = true;
}
$cash_admin->page_data['platform_path'] = realpath(CASH_PLATFORM_PATH);
$cash_admin->setPageContentTemplate('settings');
コード例 #13
0
ファイル: CASHSystem.php プロジェクト: JamesLinus/platform
 public static function sendEmail($subject, $user_id, $toaddress, $message_text, $message_title, $encoded_html = false)
 {
     // pulling out just the TO email from a 'Address Name <*****@*****.**>' style address:
     if (strpos($toaddress, '>')) {
         preg_match('/([^<]+)\\s<(.*)>/', $toaddress, $matches);
         if (count($matches)) {
             $toaddress = $matches[2];
         }
     }
     // if the email is bullshit don't try to send to it:
     if (!filter_var($toaddress, FILTER_VALIDATE_EMAIL)) {
         return false;
     }
     // TODO: look up user settings for email if user_id is set — allow for multiple SMTP settings
     // on a per-user basis in the multi-user system
     $email_settings = CASHSystem::getDefaultEmail(true);
     if (CASHSystem::getSystemSettings('instancetype') == 'multi' && $user_id) {
         $user_request = new CASHRequest(array('cash_request_type' => 'people', 'cash_action' => 'getuser', 'user_id' => $user_id));
         $user_details = $user_request->response['payload'];
         $setname = false;
         if (trim($user_details['display_name'] . '') !== '' && $user_details['display_name'] !== 'Anonymous') {
             $setname = $user_details['display_name'];
         }
         if (!$setname && $user_details['username']) {
             $setname = $user_details['username'];
         }
         if ($setname) {
             $fromaddress = $setname . ' <' . $user_details['email_address'] . '>';
         } else {
             $fromaddress = $user_details['email_address'];
         }
     } else {
         $fromaddress = $email_settings['systememail'];
     }
     // let's deal with complex versus simple email addresses. if we find '>' present we try
     // parsing for name + address from a 'Address Name <*****@*****.**>' style email:
     if (strpos($fromaddress, '>')) {
         preg_match('/([^<]+)\\s<(.*)>/', $fromaddress, $matches);
         if (count($matches)) {
             $from = array($matches[2] => $matches[1]);
         } else {
             $from = $fromaddress;
         }
     } else {
         $from = $fromaddress;
     }
     // handle encoding of HTML if specific HTML isn't passed in:
     if (!$encoded_html) {
         $template = @file_get_contents(CASH_PLATFORM_ROOT . '/settings/defaults/system_email.mustache');
         if (file_exists(CASH_PLATFORM_ROOT . '/lib/markdown/markdown.php')) {
             include_once CASH_PLATFORM_ROOT . '/lib/markdown/markdown.php';
         }
         $message_text = Markdown($message_text);
         $encoded_html = preg_replace('/(\\shttp:\\/\\/(\\S*))/', '<a href="\\1">\\1</a>', $message_text);
         if (!$template) {
             $encoded_html .= '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>' . $message_title . '</title></head><body>' . "<h1>{$message_title}</h1>\n" . "<p>" . $encoded_html . "</p>" . "</body></html>";
         } else {
             // open up some mustache in here:
             include_once CASH_PLATFORM_ROOT . '/lib/mustache/Mustache.php';
             $higgins = new Mustache();
             $mustache_vars = array('encoded_html' => $encoded_html, 'message_title' => $message_title, 'cdn_url' => defined('CDN_URL') ? CDN_URL : CASH_ADMIN_URL);
             $encoded_html = $higgins->render($template, $mustache_vars);
         }
     }
     // deal with SMTP settings later:
     $smtp = $email_settings['smtp'];
     // include swift mailer
     include_once CASH_PLATFORM_ROOT . '/lib/swift/swift_required.php';
     if ($smtp) {
         // use SMTP settings for goodtimes robust happy mailing
         $transport = Swift_SmtpTransport::newInstance($email_settings['smtpserver'], $email_settings['smtpport']);
         if ($email_settings['smtpusername']) {
             $transport->setUsername($email_settings['smtpusername']);
             $transport->setPassword($email_settings['smtppassword']);
         }
     } else {
         // aww shit. use mail() and hope it gets there
         $transport = Swift_MailTransport::newInstance();
     }
     $swift = Swift_Mailer::newInstance($transport);
     $message = new Swift_Message($subject);
     $message->setFrom($from);
     $message->setBody($encoded_html, 'text/html');
     $message->setTo($toaddress);
     $message->addPart($message_text, 'text/plain');
     $headers = $message->getHeaders();
     $headers->addTextHeader('X-MC-Track', 'opens');
     // Mandrill-specific tracking...leave in by defauly, no harm if not Mandrill
     if ($recipients = $swift->send($message, $failures)) {
         return true;
     } else {
         return false;
     }
 }
コード例 #14
0
ファイル: settings.php プロジェクト: nodots/DIY
<?php

// add unique page settings:
$page_title = 'Platform Settings';
$page_tips = 'This page manages settings for all external services and APIs. Connect to third-party accounts like Twitter, S3, MailChimp, and more.';
$page_memu = array('System Settings' => array('settings/connections/' => array('Connections', 'share')));
$misc_message = false;
if (isset($_POST['domisc'])) {
    CASHSystem::setSystemSetting('timezone', $_POST['timezone']);
    CASHSystem::setSystemSetting('systememail', $_POST['systememail']);
    $misc_message = 'All changed.';
}
$migrate_message = false;
if (isset($_POST['domigrate'])) {
    $new_settings = array('hostname' => $_POST['hostname'], 'username' => $_POST['adminuser'], 'password' => $_POST['adminpassword'], 'database' => $_POST['databasename']);
    $migrate_request = new CASHRequest(array('cash_request_type' => 'system', 'cash_action' => 'migratedb', 'todriver' => $_POST['driver'], 'tosettings' => $new_settings));
    if ($migrate_request->response['payload']) {
        $migrate_message = 'Well that happened.';
    } else {
        $migrate_message = 'There was a problem migrating your data.';
    }
}
$platform_settings = $return = CASHSystem::getSystemSettings();
コード例 #15
0
ファイル: ElementPlant.php プロジェクト: JamesLinus/platform
 /**
  * Records the basic access data to the elements analytics table
  *
  * @return boolean
  */
 protected function recordAnalytics($id, $access_method, $access_action = 'getmarkup', $location = false, $access_data = '')
 {
     // check settings first as they're already loaded in the environment
     $record_type = CASHSystem::getSystemSettings('analytics');
     if ($record_type == 'off') {
         return true;
     }
     if (!$location) {
         $location = CASHSystem::getCurrentURL();
     }
     // only count one asset + situation per session
     $recorded_elements = $this->sessionGet('recorded_elements');
     if (is_array($recorded_elements)) {
         if (in_array($id . $access_method . $location, $recorded_elements)) {
             // already recorded for this session. just return true.
             return true;
         } else {
             // didn't find a record of this asset. record it and move forward
             $recorded_elements[] = $id . $access_method . $location;
             $this->sessionSet('recorded_elements', $recorded_elements);
         }
     } else {
         $this->sessionSet('recorded_elements', array($id . $access_method . $location));
     }
     // first the big record if needed
     if ($record_type == 'full' || !$record_type) {
         $ip_and_proxy = CASHSystem::getRemoteIP();
         $result = $this->db->setData('elements_analytics', array('element_id' => $id, 'access_method' => $access_method, 'access_location' => $location, 'access_action' => $access_action, 'access_data' => json_encode($access_data), 'access_time' => time(), 'client_ip' => $ip_and_proxy['ip'], 'client_proxy' => $ip_and_proxy['proxy'], 'cash_session_id' => $this->getSessionID()));
     }
     // basic logging happens for full or basic
     if ($record_type == 'full' || $record_type == 'basic') {
         $condition = array("element_id" => array("condition" => "=", "value" => $id));
         $current_result = $this->db->getData('elements_analytics_basic', '*', $condition);
         $short_geo = false;
         if (is_array($access_data)) {
             if (isset($access_data['geo'])) {
                 $short_geo = $access_data['geo']['city'] . ', ' . $access_data['geo']['region'] . ' / ' . $access_data['geo']['countrycode'];
             }
         }
         if (is_array($current_result)) {
             $new_total = $current_result[0]['total'] + 1;
             $data = json_decode($current_result[0]['data'], true);
             if (isset($data['locations'][$location])) {
                 $data['locations'][$location] = $data['locations'][$location] + 1;
             } else {
                 $data['locations'][$location] = 1;
             }
             if (isset($data['methods'][$access_method])) {
                 $data['methods'][$access_method] = $data['methods'][$access_method] + 1;
             } else {
                 $data['methods'][$access_method] = 1;
             }
             if (isset($data['geo'][$short_geo])) {
                 $data['geo'][$short_geo] = $data['geo'][$short_geo] + 1;
             } else {
                 $data['geo'][$short_geo] = 1;
             }
         } else {
             $new_total = 1;
             $data = array('locations' => array($location => 1), 'methods' => array($access_method => 1), 'geo' => array($short_geo => 1));
             $condition = false;
         }
         $result = $this->db->setData('elements_analytics_basic', array('element_id' => $id, 'data' => json_encode($data), 'total' => $new_total), $condition);
     }
     return $result;
 }
コード例 #16
0
ファイル: AssetPlant.php プロジェクト: JamesLinus/platform
 /**
  * Records the basic access data to the assets analytics table
  *
  * @return boolean
  */
 protected function recordAnalytics($id, $element_id = 0)
 {
     // check settings first as they're already loaded in the environment
     $record_type = CASHSystem::getSystemSettings('analytics');
     if ($record_type == 'off') {
         return true;
     }
     // only count one asset per session
     $recorded_assets = $this->sessionGet('recorded_assets');
     if (is_array($recorded_assets)) {
         if (in_array($id, $recorded_assets)) {
             // already recorded for this session. just return true.
             return true;
         } else {
             // didn't find a record of this asset. record it and move forward
             $recorded_assets[] = $id;
             $this->sessionSet('recorded_assets', $recorded_assets);
         }
     } else {
         $this->sessionSet('recorded_assets', array($id));
     }
     // first the big record if needed
     if ($record_type == 'full' || !$record_type) {
         $ip_and_proxy = CASHSystem::getRemoteIP();
         $result = $this->db->setData('assets_analytics', array('asset_id' => $id, 'element_id' => $element_id, 'access_time' => time(), 'client_ip' => $ip_and_proxy['ip'], 'client_proxy' => $ip_and_proxy['proxy'], 'cash_session_id' => $this->getSessionID()));
     }
     // basic logging happens for full or basic
     if ($record_type == 'full' || $record_type == 'basic') {
         $condition = array("asset_id" => array("condition" => "=", "value" => $id));
         $current_result = $this->db->getData('assets_analytics_basic', '*', $condition);
         if (is_array($current_result)) {
             $new_total = $current_result[0]['total'] + 1;
         } else {
             $new_total = 1;
             $condition = false;
         }
         $result = $this->db->setData('assets_analytics_basic', array('asset_id' => $id, 'total' => $new_total), $condition);
     }
     return $result;
 }
コード例 #17
0
 public static function handleRedirectReturn($data = false)
 {
     if (isset($data['code'])) {
         $connections = CASHSystem::getSystemSettings('system_connections');
         if (isset($connections['com.google.drive'])) {
             $credentials = GoogleDriveSeed::exchangeCode($data['code'], $connections['com.google.drive']['client_id'], $connections['com.google.drive']['client_secret'], $connections['com.google.drive']['redirect_uri']);
             $user_info = GoogleDriveSeed::getUserInfo($credentials, $connections['com.google.drive']['client_id'], $connections['com.google.drive']['client_secret']);
             if ($user_info) {
                 $email_address = $user_info['email'];
                 $user_id = $user_info['id'];
             } else {
                 $email_address = false;
                 $user_id = false;
             }
             $credentials_array = json_decode($credentials, true);
             if (isset($credentials_array['refresh_token'])) {
                 // we can safely assume (AdminHelper::getPersistentData('cash_effective_user') as the OAuth
                 // calls would only happen in the admin. If this changes we can f**k around with it later.
                 $new_connection = new CASHConnection(AdminHelper::getPersistentData('cash_effective_user'));
                 $result = $new_connection->setSettings($email_address . ' (Google Drive)', 'com.google.drive', array('user_id' => $user_id, 'email_address' => $email_address, 'access_token' => $credentials, 'access_expires' => $credentials_array['created'] + $credentials_array['expires_in'], 'refresh_token' => $credentials_array['refresh_token']));
                 if (!$result) {
                     $settings_for_user = $new_connection->getAllConnectionsforUser();
                     if (is_array($settings_for_user)) {
                         foreach ($settings_for_user as $key => $connection_data) {
                             if ($connection_data['name'] == $email_address . ' (Google Drive)') {
                                 $result = $connection_data['id'];
                                 break;
                             }
                         }
                     }
                 }
                 if (isset($data['return_result_directly'])) {
                     return $result;
                 } else {
                     if ($result) {
                         AdminHelper::formSuccess('Success. Connection added. You\'ll see it in your list of connections.', '/settings/connections/');
                     } else {
                         AdminHelper::formFailure('Error. Something just didn\'t work right.', '/settings/connections/');
                     }
                 }
             } else {
                 return 'Could not find a refresh token from google';
             }
         } else {
             return 'Please add default google drive app credentials.';
         }
     } else {
         return 'There was an error. (session) Please try again.';
     }
 }
コード例 #18
0
ファイル: DropboxSeed.php プロジェクト: JamesLinus/platform
 public static function handleRedirectReturn($data = false)
 {
     if (!isset($data['state'])) {
         return "Please start the Dropbox authentication flow from the beginning.";
     }
     $connections = CASHSystem::getSystemSettings('system_connections');
     if (!isset($connections['com.dropbox'])) {
         return 'Please add default Dropbox credentials.';
     }
     $auth_client = DropboxSeed::getWebAuthClient($connections['com.dropbox']['redirect_uri']);
     try {
         list($token, $user_id) = $auth_client->finish($data);
     } catch (Exception $e) {
         $token = false;
     }
     if (!$token) {
         return "The Dropbox authentication flow failed - please try again.";
     }
     $new_connection = new CASHConnection(AdminHelper::getPersistentData('cash_effective_user'));
     $result = $new_connection->setSettings($user_id . ' (Dropbox)', 'com.dropbox', array('access_token' => $token, 'user_id' => $user_id));
     if (!$result) {
         $settings_for_user = $new_connection->getAllConnectionsforUser();
         if (is_array($settings_for_user)) {
             foreach ($settings_for_user as $key => $connection_data) {
                 if ($connection_data['name'] == $user_id . ' (Dropbox)') {
                     $result = $connection_data['id'];
                     break;
                 }
             }
         }
     }
     if (isset($data['return_result_directly'])) {
         return $result;
     } else {
         if ($result) {
             AdminHelper::formSuccess('Success. Connection added. You\'ll see it in your list of connections.', '/settings/connections/');
         } else {
             AdminHelper::formFailure('Error. Something just didn\'t work right.', '/settings/connections/');
         }
     }
 }