Dynamic Dependent Select Box using jQuery, Ajax and PHP

Some content on this page was disabled on February 9, 2017 as a result of a DMCA takedown notice from CodexWorld. You can learn more about the DMCA here:

https://en.support.wordpress.com/copyright-and-the-dmca/

Advertisements

Make a menu as tree by associative array PHP

Make a menu as tree by associative array PHP

    function menu($arr) {
        echo "<ul>";
        foreach ($arr as $val) {

            if (!empty($val['children'])) {
                echo "<li>" . $val['name'];
                menu($val['children']);
                echo "</li>";
            } else {
                echo "<li>|</li>";
                echo "<li>-&gt;" . $val['name'] . "</li>";
            }
        }
        echo "</ul>";
    }

    $arr = array(
	  array('id'=&gt;100, 'parentid'=&gt;0, 'name'=&gt;'a'),
	  array('id'=&gt;101, 'parentid'=&gt;100, 'name'=&gt;'a'),
	  array('id'=&gt;102, 'parentid'=&gt;101, 'name'=&gt;'a'),
	  array('id'=&gt;103, 'parentid'=&gt;101, 'name'=&gt;'a'),
	);

	$new = array();
	foreach ($arr as $a){
	    $new[$a['parentid']][] = $a;
	}
	
	$tree = createTree($new, array($arr[0]));
	echo('<pre>');
	//print_r($tree);
	echo('</pre>');
	menu($tree);

	function createTree(&amp;$list, $parent){
	    $tree = array();
	    foreach ($parent as $k=&gt;$l){
	        if(isset($list[$l['id']])){
	            $l['children'] = createTree($list, $list[$l['id']]);
	        }
	        $tree[] = $l;
	    } 
	    return $tree;
	}

Twitter Caching Machanism for avoiding get rate limited (twitterauth.class.php)

A class which describes how to get rid of being rate limited by using twitter api.

/*
 * Abraham Williams (abraham@abrah.am) http://abrah.am
 *
 * The first PHP Library to support OAuth for Twitter's REST API.
 */
/* Load OAuth lib. You can find it at http://oauth.net */
require_once('OAuth.php');

/**
 * Twitter OAuth class
 */
class TwitterOAuth
{
    /* Contains the last HTTP status code returned. */
    public $http_code;
    /* Contains the last API call. */
    public $url;
    /* Set up the API root URL. */
    public $host = "https://api.twitter.com/1.1/";
    /* Set timeout default. */
    public $timeout = 30;
    /* Set connect timeout. */
    public $connecttimeout = 30;
    /* Verify SSL Cert. */
    public $ssl_verifypeer = FALSE;
    /* Respons format. */
    public $format = 'json';
    /* Decode returned json data. */
    public $decode_json = TRUE;
    /* Contains the last HTTP headers returned. */
    public $http_info;
    /* Set the useragnet. */
    public $useragent = 'TwitterOAuth v0.2.0-beta2';
    /* Immediately retry the API call if the response was not successful. */
    //public $retry = TRUE;
    /**
     * Set API URLS
     */
    function accessTokenURL()
    {
        return 'https://api.twitter.com/oauth/access_token';
    }

    function authenticateURL()
    {
        return 'https://api.twitter.com/oauth/authenticate';
    }

    function authorizeURL()
    {
        return 'https://api.twitter.com/oauth/authorize';
    }

    function requestTokenURL()
    {
        return 'https://api.twitter.com/oauth/request_token';
    }

    /**
     * Debug helpers
     */
    function lastStatusCode()
    {
        return $this->http_status;
    }

    function lastAPICall()
    {
        return $this->last_api_call;
    }

    function rateLimitStatus()
    {
        return $this->get($this->host . 'application/rate_limit_status.json', array('resources' => 'statuses' ),'status');
    }

    /**
     * construct TwitterOAuth object
     */
    function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL)
    {
        $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
        $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
        if (!empty($oauth_token) && !empty($oauth_token_secret)) {
            $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
        } else {
            $this->token = NULL;
        }
    }

    /**
     * Get a request_token from Twitter
     *
     * @returns a key/value array containing oauth_token and oauth_token_secret
     */
    function getRequestToken($oauth_callback)
    {
        $parameters = array();
        $parameters['oauth_callback'] = $oauth_callback;
        $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
        $token = OAuthUtil::parse_parameters($request);
        $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
        return $token;
    }

    /**
     * Get the authorize URL
     *
     * @returns a string
     */
    function getAuthorizeURL($token, $sign_in_with_twitter = TRUE)
    {
        if (is_array($token)) {
            $token = $token['oauth_token'];
        }
        if (empty($sign_in_with_twitter)) {
            return $this->authorizeURL() . "?oauth_token={$token}";
        } else {
            return $this->authenticateURL() . "?oauth_token={$token}";
        }
    }

    /**
     * Exchange request token and secret for an access token and
     * secret, to sign API calls.
     *
     * @returns array("oauth_token" => "the-access-token",
     *                "oauth_token_secret" => "the-access-secret",
     *                "user_id" => "9436992",
     *                "screen_name" => "abraham")
     */
    function getAccessToken($oauth_verifier)
    {
        $parameters = array();
        $parameters['oauth_verifier'] = $oauth_verifier;
        $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
        $token = OAuthUtil::parse_parameters($request);
        $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
        return $token;
    }

    /**
     * One time exchange of username and password for access token and secret.
     *
     * @returns array("oauth_token" => "the-access-token",
     *                "oauth_token_secret" => "the-access-secret",
     *                "user_id" => "9436992",
     *                "screen_name" => "abraham",
     *                "x_auth_expires" => "0")
     */
    function getXAuthToken($username, $password)
    {
        $parameters = array();
        $parameters['x_auth_username'] = $username;
        $parameters['x_auth_password'] = $password;
        $parameters['x_auth_mode'] = 'client_auth';
        $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
        $token = OAuthUtil::parse_parameters($request);
        $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
        return $token;
    }

    /**
     * GET wrapper for oAuthRequest.
     */
    function get($url, $parameters = array(), $type = '')
    {
        $response = $this->oAuthRequest($url, 'GET', $parameters,false,$type);

        // return print_r($response);
        if ($this->format === 'json' && $this->decode_json) {
            return json_decode($response);
        }
        return $response;
    }

    /**
     * POST wrapper for oAuthRequest.
     */
    function post($url, $parameters = array(), $multipart = false, $type = '')
    {
        $response = $this->oAuthRequest($url, 'POST', $parameters, $multipart, $type);
        if ($this->format === 'json' && $this->decode_json) {
            return json_decode($response);
        }
        return $response;
    }

    /**
     * DELETE wrapper for oAuthReqeust.
     */
    function delete($url, $parameters = array())
    {
        $response = $this->oAuthRequest($url, 'DELETE', $parameters);
        if ($this->format === 'json' && $this->decode_json) {
            return json_decode($response);
        }
        return $response;
    }

    /**
     * Format and sign an OAuth / API request
     */
    function oAuthRequest($url, $method, $parameters, $multipart = false,$cache_type = '')
    {
        if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
            $url = "{$this->host}{$url}.{$this->format}";
        }
        $signature_parameters = array();
        // When making a multipart request, use only oauth_* -keys for signature
        foreach ($parameters AS $key => $value) {
            if ($multipart && strpos($key, 'oauth_') !== 0) {
                continue;
            }
            $signature_parameters[$key] = $value;
        }
        $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $signature_parameters);
        $request->sign_request($this->sha1_method, $this->consumer, $this->token);

        // start techlogicians check cache 

        if( $cache_type != '') {

            // check cache ..
            // $cache_static = null;

            $cache_static = $cache_file = 'cache/twitter-cache-' . $cache_type;
            $cache_static = file_get_contents($cache_static);
            // echo $cache_file;

            if($cache_type != 'auth' && $cache_type != 'status') {

                if($this->isRateLimited($cache_type)){

                    return $cache_static;

                }
            }    

            $json = '';

            switch ($method) {
                case 'GET':
                    $json = $this->http($request->to_url(), 'GET');

                    break;
                default:
                    // Submit parameters as an array to make cURL set "Content-Type: multipart/form-data" for the upload
                    $json = $this->http($request->get_normalized_http_url(), $method, ($multipart ? $parameters : $request->to_postdata()), $request, $multipart);
                    break;
            }

            if ($json)
            {
                $cache_static = fopen($cache_file, 'w');
                fwrite($cache_static, $json);
                fclose($cache_static);

                return $json;
            }

        }

            // ------------------------------------------------ //

//             $modified = filemtime($cache_file);
//             $now = time();

//             if($cache_type == 'auth')
//                 $interval = 216000; // ten minutes
//             else if($cache_type == 'status')
//                 $interval = 0;
//             else
//                 $interval = 900;

//             echo $cache_type. " " .$modified . "-". $now. "-". ($now - $modified) ."-".$interval. "
";

//             if (!$modified || (($now - $modified) > $interval)) {
//                 // $json = file_get_contents( $feed );

//                 $json = '';

//                 switch ($method) {
//                     case 'GET':
//                         $json = $this->http($request->to_url(), 'GET');

// //                        return $json;
//                         break;
//                     default:
//                         // Submit parameters as an array to make cURL set "Content-Type: multipart/form-data" for the upload
//                         $json = $this->http($request->get_normalized_http_url(), $method, ($multipart ? $parameters : $request->to_postdata()), $request, $multipart);
// //                        return $json;
//                         break;
//                 }

//                 if(isset($json->errors[0]->message) && $json->errors[0]->message != ""){
//                     return $cache_static;
//                 }
//                 if ($json) {
//                     $cache_static = fopen($cache_file, 'w');
//                     fwrite($cache_static, $json);
//                     fclose($cache_static);

//                     return $json;
//                 }
//             }

//             return $cache_static;

//         }

        // end techlogicians check cache

        $json = '';

        switch ($method) {
            case 'GET':
                $json = $this->http($request->to_url(), 'GET');

                return $json;
            default:
                // Submit parameters as an array to make cURL set "Content-Type: multipart/form-data" for the upload
                $json = $this->http($request->get_normalized_http_url(), $method, ($multipart ? $parameters : $request->to_postdata()), $request, $multipart);
                return $json;
        }

    }

    /**
     * Make an HTTP request
     *
     * @return API results
     */
    function http($url, $method, $postfields = NULL, OAuthRequest $request = NULL, $multipart = false)
    {
        $this->http_info = array();
        $ci = curl_init();
        /* Curl settings */
        curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
        curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
        $headers = array('Expect:');
        if ($multipart) {
            $headers[] = $request->to_header();
        }
        curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
        curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
        curl_setopt($ci, CURLOPT_HEADER, FALSE);
        switch ($method) {
            case 'POST':
                curl_setopt($ci, CURLOPT_POST, TRUE);
                if (!empty($postfields)) {
                    curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                }
                break;
            case 'DELETE':
                curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
                if (!empty($postfields)) {
                    $url = "{$url}?{$postfields}";
                }
        }
        curl_setopt($ci, CURLOPT_URL, $url);
        $response = curl_exec($ci);
        $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
        $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
        $this->url = $url;
        curl_close($ci);
        return $response;
    }

    /**
     * Get the header info to store.
     */
    function getHeader($ch, $header)
    {
        $i = strpos($header, ':');
        if (!empty($i)) {
            $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
            $value = trim(substr($header, $i + 2));
            $this->http_header[$key] = $value;
        }
        return strlen($header);
    }

    // added by techlogicians.. 

    function isRateLimited($category = 'home_timeline',$resource = 'statuses',$name = 'remaining')
    {
        $rate_status = $this->rateLimitStatus();
        // converting object into associative array...
        $statuses = $this->object_to_array($rate_status);
        // $statuses = (array)($rate_status);

        // return $statuses;

        $remaining = $statuses['resources'][$resource]['/'.$resource.'/'.$category][$name];
        // return $remaining;
        if($remaining){
            return FALSE;
        }

        return TRUE;

    }

    function object_to_array($obj) {
        if(is_object($obj)) $obj = (array) $obj;
        if(is_array($obj)) {
            $new = array();
            foreach($obj as $key => $val) {
                $new[$key] = $this->object_to_array($val);
            }
        }
        else $new = $obj;
        return $new;
    }
}