CodeIgniter で構築されたアプリの既存のフォームに Facebook のようなボタンを追加する必要があります。
ユーザーが公式の FB のようなボタン コードを使用して (恐ろしいことですが) いいね! をクリックしない限り、フォームは有効になりません。コード igniter に慣れておらず、PHP の知識も限られています。私のコードを拡張する助けがあれば大歓迎です。
現在、私は次のものを持っています:
public function likeGate( ) {
if( $this->hasUserPerms() != true )
{
$this->tplVars['js_footer'] = 'app.fb.geifPerms();';
}
return false;
}
検証のために:
public function getPostDetails()
{
header('Content-Type: application/json');
$errors = array();
$fields = array(
'liked' => function( $value ){
if( $this->tplVars['perms'] == false || $this->tplVars['likes'] == false )
{
return false;
}
else
{
return true;
}
},
'full_name' => function( $value ){
if( strlen( $value ) > 5 && preg_match('/^[a-zA-ZàáâäãåąćęèéêëìíîïłńòóôöõøùúûüÿýżźñçčšžÀÁÂÄÃÅĄĆĘÈÉÊËÌÍÎÏŁŃÒÓÔÖÕØÙÚÛÜŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.\'-]+$/iu', $value ) == 1 )
{
return true;
}
else
{
return false;
}
},
'email' => function( $value )
{
if( preg_match( '/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/', $value ) )
{
return true;
}
return false;
},
'terms' => function( $value )
{
if( $value !== 'agreed' )
{
return false;
}
return true;
},
'card_number' => function( $value )
{
if( !empty( $value ) && ( strlen( $value ) < 11 || strlen( $value ) > 12 ) ) // Maybe add further card validation
{
return false;
}
return true;
}
);
foreach( $fields as $key => $field )
{
if( ( !isset( $_POST[$key] ) && $key != 'card_number' ) ) {
$errors[$key] = 'This is a required field';
} else if( isset( $_POST[$key] ) && $field($_POST[$key]) == false ) {
$errors[$key] = 'Invalid value, please correct it and try again.';
}
}
if( !empty( $errors ) )
{
$return = array( 'success' => false, 'errors' => $errors );
}
else if( $this->userHasSubmission() )
{
$return = array('success' => false, 'errors' => array( 'full_name' => 'User already has completed a submission'));
}
else
{
$data = array_merge( $_POST, array('fbid' => $this->facebook->getUser()));
$return = array('success' => true, 'errors' => array());
$this->load->model('Henhouse_model');
$this->Henhouse_model->insertRow( $data );
}
echo json_encode( $return );
exit;
}
ユーザー権限:
private function hasUserPerms()
{
if( isset( $_SESSION['fb_token'] ) )
{
$this->facebook->setAccessToken( $_SESSION['fb_token'] );
}
else if( isset( $_GET['code'] ) )
{
$this->facebook->setAccessToken($_GET['code']);
}
$this->facebook->getAccessToken();
$fbid = $this->facebook->getUser();
// check if we have valid user
if( $fbid )
{
try
{
// Proceed knowing you have a logged in user who's authenticated.
$fb_user_profile = $this->facebook->api('/me');
$_SESSION['fb_token'] = $this->facebook->getAccessToken();
}
catch ( FacebookApiException $e )
{
return false;
}
}
else
{
return false;
}
return true;
}
private function userLikesPage()
{
if( !$this->hasUserPerms() )
{
return false;
}
$like_status = $this->facebook->api('/me/likes/140681946901');
if( isset( $like_status ) && $like_status['data'] == true )
{
return true;
}
return false;
}