Bitcoin Forum
May 27, 2024, 09:38:20 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Warning: One or more bitcointalk.org users have reported that they strongly believe that the creator of this topic is a scammer. (Login to see the detailed trust ratings.) While the bitcointalk.org administration does not verify such claims, you should proceed with extreme caution.
Pages: [1]
  Print  
Author Topic: PHP/CSS/Jquery developer Looking for work.  (Read 976 times)
r3wt (OP)
Hero Member
*****
Offline Offline

Activity: 686
Merit: 504


always the student, never the master.


View Profile
June 25, 2014, 02:01:58 AM
Last edit: July 01, 2014, 08:21:58 AM by r3wt
 #1

Hi, you may know me from my time spent working on OpenEx. You may also remember that the product i delivered was subpar and very unacceptable. As a result of the closure of the exchange, i now owe about 10,000 dollars at the time of investment worth of bitcoin to 20 or so investors. I have been working very hard for the last 3 months improving my skills, and i am close to being able to relaunch OpenEx.

I will display a small showcase of my skills here, as well as a link to my stackoverflow profile. I am looking for small jobs in php, jquery, or css/html so that i can begin working on paying off the investors who got the brunt of the demise of OpenEx. I feel very responsible for this. If you are willing at all to give me a shot, even on a trial basis i will work very hard for you and or your company.

I have grown familiar with two sets of front end developer frameworks:
Bootstrap and Ink Interface Kit(http://ink.sapo.pt)

my stackoverflow profile
http://stackoverflow.com/users/2401804/r3wt

live demo of OpenEx current version
https://openex.info

Here's a few code snippets and/or live examples of sites i am actively developing.


An ajax Profile Picture and Profile Information Update. (jquery,php,ink ui kit)

jquery
Code:
//the profile fields form
$('#profile-up').submit(function() {
var queryString = $(this).formSerialize();
$.post('./ajax/private/?do=profileupdate', queryString, function(data){
var d = JSON.parse(data);
for(var i = 0; i < d.length; i++)
{
if(d[i].type == 'success')
{
$('#'+d[i].message+'').val(d[i].update);
notify('Your '+d[i].message+' was succesfully updated','false');
}
if(d[i].type == 'error')
{
notify(d[i].message,'true');
}
}
});
return false;
});


//the image form
$("#image-up").submit(function(){
$('#loading').show();
$('#overlay').show();
$.ajax({
url: "./upload.php",
type: "POST",
data:  new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data){
var d = JSON.parse(data);
console.log(d);
for(var i = 0; i < d.length; i++)
{
if(d[i].type == 'error')
{
notify(d[i].message,"true");
}
if(d[i].type == 'success')
{
notify(d[i].message,"true");
$('#profile-pic').attr('src','http://website.com/uploads/'+d[i].update+'');
}
}
},
error: function(){
}        
});
$('#overlay').hide();
$('#loading').hide();
return false;
});

//pre upload file tests using html5 file api.
function beforeSubmit() {
if (window.File && window.FileReader && window.FileList && window.Blob)
{
if( !$('#image-input').val())
{
notify("Please select a file to continue",'true');//notify is just a wrapper function to jGrowl.
return false;
}  
var fsize = $('#image-input')[0].files[0].size; //get file size
var ftype = $('#image-input')[0].files[0].type; // get file type
switch(ftype)
{
case 'image/png': case 'image/gif': case 'image/jpeg':
break;
default:
notify("Unsupported File Type",'true');
return false;
}
var mbyte = 1048576;
if(fsize> mbyte)
{
notify("Image is too large. Maximum upload size is 1 Mb.","true");
return false;
}
}else{
//the browser doesn't support the html5 api, but we need to upload the image. we'll validate the file size and type serverside.
return return true;
}
return true;
}

HTML(Ink UI Kit), rendered from php view function

Code:
function profileView($profile)
{
global $loggedInUser,$cfg;
@$pub = security($_GET['pub-view']) or null;
if(!profileExists($profile))
{
jumpTo('/error/?t=418',0); die;
}else{
if($loggedInUser->profile_id == $profile && $pub == null)
{
echo
'
<center>
<h3>'. $loggedInUser->username .'\'s Profile</h3>
</center>
<hr>
<div class="column-group quarter-gutters">
<form action="" name="profile-up" id="profile-up" class="ink-form all-50 small-100 tiny-100">
<center>
<h5>
<div class="ink-dropdown push-left" data-target="#prof-options" id="prof-dropdown" style="display:inline-block;">
<button class="ink-button fa fa-cog"></button>
<ul id="prof-options" class="dropdown-menu hide-all">
<li class="heading">Settings</li>
<li class="separator-above"><a href="#">Privacy</a></li>
<li><a href="#">Change Password</a></li>
<li><a href="#">Channel Settings</a></li>
<li class="separator-above disabled"><a href="#">...</a></li>
</ul>
</div>
<script>
new Dropdown(\'#prof-dropdown\');
</script>
Your Profile Settings
</h5></center>
                    <fieldset>
                        <div class="control-group column-group quarter-gutters">
                            <label for="username" class="all-20 align-right">Username</label>
                            <div class="control all-80">
                                <input type="text" id="username" name="username" value="'. $loggedInUser->username .'">
                                <p class="tip">Subject to Admin approval</p>
                            </div>
</div>
                        <div class="control-group column-group quarter-gutters">
                            <label for="email" class="all-20 align-right">Email</label>
                            <div class="control all-80">
                                <input type="text" id="email" name="email" value="'. $loggedInUser->email .'">
<p class="tip">Change Your Email</p>
                            </div>
                        </div>
                        <div class="control-group column-group quarter-gutters">
                            <label for="caption" class="all-20 align-right">Caption</label>
                            <div  class="control all-80">
                                <textarea id="caption" name="caption">'. $loggedInUser->caption .'</textarea>
<p class="tip">Change your public profile description</p>
                            </div>
                        </div>
                        
<div class="control-group column-group quarter-gutters">
                            <label for="submit" class="all-20 align-right">&nbsp;</label>
                            <div  class="control all-80">
'.form_protect($loggedInUser->csrf_token).'
                                <input type="submit" value="Update" id="submit-form">
                            </div>
                        </div>
                    </fieldset>
                </form>

                <div class="all-50 small-100 tiny-100">
<center><h5>Your Profile Picture</h5>
                    <img id="profile-pic" src="/uploads/'. $loggedInUser->avatar .'" alt="" class="all-100 small-100 tiny-100 push-center">
<br/>
<form name="image-up" method="post" action="" enctype="multipart/form-data" id="image-up" class="ink-form all-100 small-100 tiny-100">
<div class="control-group column-group">
                            <div  class="control all-100">
                                <div class="input-file all-100">
                                    <input type="file" id="image-input" name="image-input" class="all-100" />
'.form_protect($loggedInUser->csrf_token).'
<input type="submit" value="Update" id="submit-file" class="all-25 ink-button" />
                                </div>
                            </div>
                        </div>
</form>
</center>
                </div>
            </div>
<hr>
';

}else{
$info = getProfile($profile);
$vids = getVideos($profile);
$foto = getPhotos($profile);
//to do: finish public profile view
}
}
}


Profile Field server side code for ajax request(PHP)

this function handles the ajax request, validates the request, and if the request is valid it returns a json encoded response.
Code:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if(isUserLoggedIn() && $loggedInUser !== null && is_object($loggedInUser) !== false) {
#rate limiting#
$minute = 60;
$minute_limit = 100;
$last_ajax_request = $loggedInUser->last_ajax_request;
$last_ajax_diff = time() - $last_ajax_request; # in seconds
$minute_throttle = $loggedInUser->minute_throttle;
if (is_null($minute_limit)) {
$new_minute_throttle = 0;
}else{
$new_minute_throttle = $minute_throttle - $last_ajax_diff;
$new_minute_throttle = $new_minute_throttle < 0 ? 0 : $new_minute_throttle;
$new_minute_throttle += $minute / $minute_limit;
$minute_hits_remaining = floor(($minute - $new_minute_throttle ) * $minute_limit / $minute);
$minute_hits_remaining = $minute_hits_remaining >= 0 ? $minute_hits_remaining : 0;
}

if ($new_minute_throttle > $minute) {
$wait = ceil($new_minute_throttle - $minute);
$response = ['type'=>'error','message'=>'rate limit exceeded wait '.$wait.' seconds.'];
die(json_encode($response));//ajax rate limiting exceeded.
}
$loggedInUser->last_ajax_request = time();
$loggedInUser->minute_throttle   = $new_minute_throttle;
#end#

@$do   = security($_GET["do"]);
@$csrf = security($_POST["csrf_token"]);
if(isset($csrf))
{
if($loggedInUser->csrf_validate($csrf) === true)
{
if($do == 'profileupdate')
{
$response = updateProfile();
}
elseif($do == 'somethingelse')
{
//for other ajax methods to be added later.
}else{
$response = ['type'=>'error','message'=>'failed'];
}
if(isset($response) && !empty($response))
{
die(json_encode($response));
}else{
http_response_code(500);
die;
}
}else{
http_response_code(404);
die;
}
}else{
http_response_code(404);
die;
}
}else{
http_response_code(401);
die;
}
}else{
http_response_code(405);
die;
}

update profile function from above example

This function updates the user's session object($loggedInUser) and updates the database, but only if each field differs from the session object.
Code:
function updateProfile()
{
global $loggedInUser;
$response = [];
if($loggedInUser == null || isUserLoggedIn() === false)
{
$response[] = json_encode(['type'=>'error','message'=>'login']);
}else{
if(!empty($_POST))
{

$uid = $loggedInUser->user_id;
$uname = sanitize(trim($_POST["username"]));
$captn = sanitize($_POST["caption"]);//leave spaces in tact for caption.
$ename = sanitize(trim($_POST["email"]));
if(!empty($uname) && ($uname !== $loggedInUser->username))
{
if(!ctype_alnum($uname)){
$response[] = ['type'=>'error','message'=>lang("ACCOUNT_USER_INVALID_CHARACTERS")];
}else{
if(!usernameExists($uname))
{
if(updateUsername($uid,$uname))
{
$loggedInUser->username = $uname;
$response[] = ['type'=>'success','message'=>'username','update'=>security($uname)];
}else{
$response[] = ['type'=>'error','message'=>'an error occured. please try again.'];
}
}else{
$response[] = ['type'=>'error','message'=>'Username is taken. try again.'];
}
}
}
if((!empty($captn)) &&($captn !== $loggedInUser->caption))
{
if(updateCaption($uid,$captn))
{
$loggedInUser->caption = $captn;
$response[] = ['type'=>'success','message'=>'caption','update'=>$captn];
}else{
$response[] = ['type'=>'error','message'=>'an error occured. please try again.'];
}
}
if((!empty($ename)) && ($ename !== $loggedInUser->email))
{
if(!emailExists($ename))
{
if(updateEmail($ename))
{
$loggedInUser->email = $ename;
$response[] = ['type'=>'success','message'=>'email','update'=>security($ename)];
}
}
}
}else{
$response[] = ['type'=>'error','message'=>'empty'];
}
}
return $response;
}

Image upload processing script(PHP)

Code:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if(isUserLoggedIn() === true && $loggedInUser !== null && is_object($loggedInUser) !== false) {
if(isset($_POST) && !empty($_POST))
{
$response = [];
@$csrf = security($_POST['csrf_token']);
if($loggedInUser->csrf_validate($csrf) === true)
{
if($_FILES)
{
$BigImageMaxSize        = 300; //Image Maximum height or width
//$maxheight = 200;
$DestinationDirectory   = 'uploads/'; //specify upload directory
$Quality                = 90; //jpeg quality
if(!isset($_FILES['image-input']) || !is_uploaded_file($_FILES['image-input']['tmp_name']))
{
$response[] = ['type'=>'error','message'=>'empty file upload'];
}else{
$RandomNumber   = rand(0, 9999999999);
$rand2 = rand(0, 999);
$ImageName      = $RandomNumber .'-'. md5(openssl_random_pseudo_bytes(4)) . '-da-' . $rand2 . time();
$ImageSize      = $_FILES['image-input']['size'];
$TempSrc        = $_FILES['image-input']['tmp_name'];
$ImageType      = $_FILES['image-input']['type'];
$mbyte          = 1048576;//1 megabyte
if( (int) $ImageSize > $mbyte)
{
die(json_encode(['type'=>'error','message'=>'F_SIZE_EXCEEDS']));//kill script and return json error response.
}
switch(strtolower($ImageType))
{
case 'image/png':
//Create a new image from file
$CreatedImage =  imagecreatefrompng($_FILES['image-input']['tmp_name']);
break;
case 'image/gif':
$CreatedImage =  imagecreatefromgif($_FILES['image-input']['tmp_name']);
break;          
case 'image/jpeg':
case 'image/pjpeg':
$CreatedImage = imagecreatefromjpeg($_FILES['image-input']['tmp_name']);
break;
default:
$response[] = ['type'=>'error','message'=>'unsupported file type']; //output error and exit
}
list($CurWidth,$CurHeight) = getimagesize($TempSrc);
if($CurWidth == null || $CurHeight == null)
{
die(json_encode(['type'=>'error','string'=>'418']));
}
$ImageExt = substr($_FILES['image-input']['name'], strrpos($_FILES['image-input']['name'], '.'));
$ImageExt = str_replace('.','',$ImageExt);
$NewImageName = $ImageName.'.'.$ImageExt;
$DestRandImageName = $DestinationDirectory.$NewImageName; // Image with destination directory
}
if(resizeImage($CurWidth,$CurHeight,$BigImageMaxSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType))
{
$uid = $loggedInUser->user_id;
if(updateAvatar($uid,$NewImageName))
{
$loggedInUser->avatar = $NewImageName;
$response[] = ['type'=>'success','message'=>'your profile picture was updated','update'=>$NewImageName];
}
}else{
$response[] = ['type'=>'error','message'=>'error resizing image'];
}

if(isset($response) && !empty($response))
{
die(json_encode($response));
}else{
die(json_encode(['type'=>'error','message'=>'script error occured']));
}
}
}else{
http_response_code(403);
}
}else{
http_response_code(401);
}
}else{
http_response_code(403);
}
}else{
http_response_code(405);
}

Thanks for your time

My negative trust rating is reflective of a personal vendetta by someone on default trust.
r3wt (OP)
Hero Member
*****
Offline Offline

Activity: 686
Merit: 504


always the student, never the master.


View Profile
June 25, 2014, 11:46:13 PM
 #2

daily bump

My negative trust rating is reflective of a personal vendetta by someone on default trust.
PondSea
Legendary
*
Offline Offline

Activity: 1428
Merit: 1000


View Profile
June 27, 2014, 11:53:04 AM
 #3

What are your rates?





░░░░░░░░░▀▀▀█████████
░░░░░░░░░░░░░░░████████
░░░░▄███████▄░░░░████████
░░░░███████████░░░░██████
░░░▀███████████░░░░████░░
███▄░░░░░░░░░░▀████░░░███░░██
█████▄▄▄▄▄▄▄▄▄▄▄████░░░██░░██
█████████████▄░░████░░░░░
░░█████████████░░█████
░░░░█████████▀░░░██████▌
░░░░░░░▀▀▀▀░░░░▄████████▌
░░░░░░░░░░▄▄▄▄███████
SuperNET.org
..BarterDEX..
.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
DECENTRALIZED CRYPTOCURRENCY EXCHANGE
Developed to Unite Coin Communities | ✔ SECURE ✔ FREE ✔ VISIBILITY ✔ EASY INTEGRATION |

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

r3wt (OP)
Hero Member
*****
Offline Offline

Activity: 686
Merit: 504


always the student, never the master.


View Profile
July 01, 2014, 08:12:57 AM
 #4

What are your rates?

My rates are negotiable. Depends on the complexity of the job. If its a small job, i would be inclined to charge a fixed rate. if its a large job, i might charge per hour. This is my first time offering my services. Make me an offer if you like.

My negative trust rating is reflective of a personal vendetta by someone on default trust.
r3wt (OP)
Hero Member
*****
Offline Offline

Activity: 686
Merit: 504


always the student, never the master.


View Profile
July 01, 2014, 08:18:47 AM
 #5

new code snippet. PHP function to ban users in chat application.

Code:
function newBan($user_message) 
{
global $mysqli;
$command = explode(" ", $user_message);
if(count($command) >= 2) {
$toban   = $command[1];
if(!empty($toban)) {
if(usernameExists($toban)) {
$begin = time();
if(isset($command[2])) {
switch ($command[2]) {
case '10m' : $length = 10 * 60; $duration = '10 minutes'; break;
case '30m' : $length = 30 * 60; $duration = '30 minutes'; break;
case '1h'  : $length = 60 * 60; $duration = '1 hour'; break;
case '1d'  : $length = 24 * 60 * 60; $duration = '1 day'; break;
case '1w'  : $length = 7 * 24 * 60 * 60; $duration = '1 week'; break;
default    : return;
}
}else{
$length   = 5 * 60;
$duration = '5 minutes';
}
$end  = $begin + $length;
$stmt = $mysqli->prepare("INSERT INTO uc_chat_bans (username,starttime,endtime,duration) VALUES (?,?,?,?)");
$stmt->bind_param('siis',$toban,$begin,$end,$duration);
$stmt->execute();
$stmt->close();
$ban_nme = 'System';
$ban_msg = '** '.security($toban).' has been banned from chat for '.security($duration).'**';
$ban_col = '000000';
$ban_now = time();
$stmt = $mysqli->prepare("INSERT INTO uc_chat_msg (username,message,color,timestamp) VALUES (?,?,?,?);");
$stmt->bind_param('sssi',$ban_nme,$ban_msg,$ban_col,$ban_now);
$stmt->execute();
$stmt->close();
$response_text = mask(json_encode(array('type'=>'userban', 'toban'=>$toban, 'bantime'=>$duration)));
send_message($response_text); //send data
}
}
}
}

My negative trust rating is reflective of a personal vendetta by someone on default trust.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!