Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewlimaza committed Jan 16, 2024
2 parents aaf9c9e + f8e2dee commit 2e15631
Show file tree
Hide file tree
Showing 16 changed files with 1,660 additions and 510 deletions.
49 changes: 49 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Contribute to Paid Memberships Pro

Paid Memberships Pro is the "community solution" for membership sites on WordPress, and so contributions of all kinds are appreciated.

When contributing, please follow these guidelines to ensure things work as smoothly as possible.

__Please Note:__ GitHub is for bug reports and contributions only. If you have a support or customization question, go to our [Member Support Page](https://www.paidmembershipspro.com/support/) instead.

## Getting Started

* __Do not report potential security vulnerabilities here. Email them privately to [[email protected]](mailto:[email protected]) with the words "Security Vulnerability" in the subject.__
* Submit a ticket for your issue, assuming one does not already exist.
* Raise it on our [Issue Tracker](https://github.com/strangerstudios/pmpro-import-users-from-csv/issues/new/choose)
* Clearly describe the issue including steps to reproduce the bug.
* Make sure you fill in the earliest version that you know has the issue as well as the version of WordPress you're using.

## Making Changes

* Fork the repository on GitHub
* For bug fixes, checkout the DEV branch of the PMPro repository.
* For new features and enhancements, checkout the branch for the version the feature is milestoned for.
* Make sure to pull in any "upstream" changes first.
* Use `git remote add upstream https://github.com/strangerstudios/pmpro-import-users-from-csv.git` to set the upstream repo
* Use `git checkout dev` to get on the development branch.
* Use `git pull upstream dev` to get the latest updates.
* Use `git push` to push those updates to your fork.
* Create a new local branch for each separate bug fix or feature. This will ensure that each pull request is for one issue only and easier to process.
* Use `git checkout -b nameofmybugfixorfeature` to create the new branch
* Make the changes to your local repository.
* Ensure you stick to the [WordPress Coding Standards](https://codex.wordpress.org/WordPress_Coding_Standards) (even though much of the PMPro code does not currently)
* If you have an automatic beautifier in your IDE or dev environment, turn it off. Unrelated style changes in your pull requests will make them harder to process. Feel free to message the core development team to ask them to clean up a file you are working on if the inconsitent coding styles is bothering you.
* You can update the readme.txt to include a comment about your fix or feature in the changelog, but if you do not the core team will do it for you.
* When committing, reference your issue (if present) and include a note about the fix in the commit message.
* Push the changes to your fork.
* For bug fixes, submit a pull request to the DEV branch of the PMPro repository.
* For new features and enhancements, submit a pull request to the version the feature is milestoned for. This will usually be the version number following the current release unless the core dev team has milestoned the feature for a later release.
* We will process all pull requests and make suggestions or changes as soon as possible. Feel free to ping us politely via email or social networks to take a look at your pulls.

## Code Documentation

* We would like for every function, filter, class, and class method to be documented using phpDoc standards.
* An example of [how PMPro uses phpDoc blocks can be found here](https://gist.github.com/sunnyratilal/5308969).
* Please make sure that every function is documented so that when we update our API Documentation things don't go awry!
* If you're adding/editing a function in a class, make sure to add `@access {private|public|protected}`
* Finally, please use tabs and not spaces. The tab indent size should be 4 for all Paid Memberships Pro code.

# Additional Resources
* [General GitHub Documentation](https://help.github.com/)
* [GitHub Pull Request documentation](https://help.github.com/send-pull-requests/)
36 changes: 36 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
name: "🐛 Bug Report"
about: Report a bug if something isn't working as expected in Paid Memberships Pro.
title: ''
labels: 'bug'
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is. Please be as descriptive as possible; issues lacking detail, or for any other reason than to report a bug, may be closed or left unattended.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Screenshots**
If applicable, please attach a screenshot to make your issue clearer.

**Expected behavior**
A clear and concise description of what you expected to happen.

**Isolating the problem (mark completed items with an [x]):**
- [ ] I have deactivated other plugins and confirmed this bug occurs when only Paid Memberships Pro plugin is active.
- [ ] This bug happens with a default WordPress theme active, or [Memberlite](https://wordpress.org/themes/memberlite/).
- [ ] I can reproduce this bug consistently using the steps above.

**WordPress Environment**
<details>
```
Please share non-sensitive information about your hosting environment such as WordPress version, PHP version, Paid Memberships Pro and any related plugins versions.
```
</details>
21 changes: 21 additions & 0 deletions .github/ISSUE_TEMPLATE/enhancement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
name: "⭐️ Enhancement"
about: If you have an idea to improve an existing feature or need something
for development (such as a new hook) please let us know or submit a Pull Request.
title: ''
labels: 'enhancement'
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
If applicable, add any other context or screenshots about the enhancement here.
21 changes: 21 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
name: "➕ Feature Request"
about: "Suggest a new feature. We'll consider building it if it receives
sufficient interest!"
title: ''
labels: 'feature request'
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
If applicable, add any other context or screenshots about your feature request here.
19 changes: 19 additions & 0 deletions .github/ISSUE_TEMPLATE/support.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
name: "💬 Support Question"
about: "If you have a question, please see our docs or use our helpdesk."
title: ''
labels: 'Type: support'
assignees: ''

---

We don't offer technical support on GitHub so we recommend using the following:

**Reading our documentation**
Usage docs can be found here: https://www.paidmembershipspro.com/documentation/

**Technical support for premium extensions or if you're an active paid member**
Submit a ticket on our helpdesk by visiting https://www.paidmembershipspro.com/new-topic/ (Please note that an [active paid membership](https://www.paidmembershipspro.com/pricing) is required for paid support.)

**General usage and development questions**
- Website: https://www.paidmembershipspro.com/contact/
32 changes: 32 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
### All Submissions:

* [ ] Have you followed the [Contributing guideline](https://github.com/strangerstudios/pmpro-import-users-from-csv/blob/master/.github/CONTRIBUTING.md)?
* [ ] Does your code follow the [WordPress' coding standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/)?
* [ ] Have you checked to ensure there aren't other open [Pull Requests](https://github.com/strangerstudios/pmpro-import-users-from-csv/pulls) for the same update/change?

<!-- Mark completed items with an [x] -->

<!-- You can erase any parts of this template not applicable to your Pull Request. -->

### Changes proposed in this Pull Request:

<!-- Describe the changes made to this Pull Request and the reason for such changes. -->

Resolves XXX.

### How to test the changes in this Pull Request:

1.
2.
3.

### Other information:

* [ ] Have you added an explanation of what your changes do and why you'd like us to include them?
* [ ] Have you successfully run tests with your changes locally?

<!-- Mark completed items with an [x] -->

### Changelog entry

> Enter a summary of all changes on this Pull Request. This will appear in the changelog if accepted.
160 changes: 160 additions & 0 deletions class-readcsv.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<?php
/**
* @package uc_stock_update
* @version 6.x-2.0.2
* @licence GNU GPL v2
*/
// $Id: ReadCSV.inc 3 2011-09-19 02:32:14Z david $
/**
* Use this to read CSV files. PHP's fgetcsv() does not conform to RFC
* 4180. In particular, it doesn't handle the correct quote escaping
* syntax. See http://tools.ietf.org/html/rfc4180
*
* David Houlder May 2010
* http://davidhoulder.com
*/

class ReadCSV {
const field_start = 0;
const unquoted_field = 1;
const quoted_field = 2;
const found_quote = 3;
const found_cr_q = 4;
const found_cr = 5;

private $file;
private $sep;
// If $eof is TRUE, the next next_char() will return FALSE.
// Note that this is different to feof(), which is TRUE
// _after_ EOF is encountered.
private $eof;
private $nc;

/**
* @param $file_handle
* open file to read from
* @param $sep
* column separator character
* @param $skip
* initial character sequence to skip if found. e.g. UTF-8 byte-order mark
*/
public function __construct($file_handle, $sep, $skip="") {
$this->file = $file_handle;
$this->sep = $sep;
$this->nc = fgetc($this->file);
// skip junk at start
for ($i=0; $i < strlen($skip); $i++) {
if ($this->nc !== $skip[$i])
break;
$this->nc = fgetc($this->file);
}
$this->eof = ($this->nc === FALSE);
}

private function next_char() {
$c = $this->nc;
$this->nc = fgetc($this->file);
$this->eof = ($this->nc === FALSE);
return $c;
}

public function seek($position) {
fseek($this->file, $position);
$this->nc = fgetc($this->file);
$this->eof = ($this->nc === FALSE);
}

public function get_position() {
return ftell($this->file);
}

/**
* Get next record from CSV file.
*
* @return
* array of strings from the next record in the CSV file, or NULL if
* there are no more records.
*/
public function get_row() {
if ($this->eof)
return NULL;

$row=array();
$field="";
$state=self::field_start;

while (1) {
$char = $this->next_char();

if ($state == self::quoted_field) {
if ($char === FALSE) {
// EOF. (TODO: error case - no closing quote)
$row[]=$field;
return $row;
}
// Fall through to accumulate quoted chars in switch() {...}
} elseif ($char === FALSE || $char == "\n") {
// End of record.
// (TODO: error case if $state==self::field_start here - trailing comma)
$row[] = $field;
return $row;
} elseif ($char == "\r") {
// Possible start of \r\n line end, but might be just part of foo\rbar
$state = ($state == self::found_quote)? self::found_cr_q: self::found_cr;
continue;
} elseif ($char == $this->sep &&
($state == self::field_start ||
$state == self::found_quote ||
$state == self::unquoted_field)) {
// End of current field, start of next field
$row[]=$field;
$field="";
$state=self::field_start;
continue;
}

switch ($state) {

case self::field_start:
if ($char == '"')
$state = self::quoted_field;
else {
$state = self::unquoted_field;
$field .= $char;
}
break;

case self::quoted_field:
if ($char == '"')
$state = self::found_quote;
else
$field .= $char;
break;

case self::unquoted_field:
$field .= $char;
// (TODO: error case if '"' in middle of unquoted field)
break;

case self::found_quote:
// Found '"' escape sequence
$field .= $char;
$state = self::quoted_field;
// (TODO: error case if $char!='"' - non-separator char after single quote)
break;

case self::found_cr:
// Lone \rX instead of \r\n. Treat as literal \rX. (TODO: error case?)
$field .= "\r".$char;
$state = self::unquoted_field;
break;

case self::found_cr_q:
// (TODO: error case: "foo"\rX instead of "foo"\r\n or "foo"\n)
$field .= "\r".$char;
$state = self::quoted_field;
break;
}
}
}
}
5 changes: 5 additions & 0 deletions examples/import.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
user_login,user_email,user_pass,first_name,last_name,display_name,role,membership_id,membership_code_id,membership_initial_payment,membership_billing_amount,membership_cycle_number,membership_cycle_period,membership_billing_limit,membership_trial_amount,membership_trial_limit,membership_status,membership_startdate,membership_enddate,membership_subscription_transaction_id,membership_gateway,membership_payment_transaction_id,membership_affiliate_id,membership_timestamp
johndoe,[email protected],,John,Doe,John Doe,subscriber,1,,50,50,1,month,,,,active,2020-01-02,2025-01-02,,stripe,,,2020-12-02
janedoe,[email protected],test,Jane,Doe,Jane Doe,contributor,2,,100,100,1,year,,,,active,2020-02-03,,,stripe,,,2020-02-03
jerrydoe,[email protected],,Jerry,Doe,Jerry Doe,subscriber,3,,250,,,,,,,active,2020-03-08,2025-03-08,,,,,2020-03-08
juliedoe,[email protected],,Julie,Doe,Julie Doe,subscriber,2,,100,100,1,year,,,,active,2020-02-03,,,paypalexpress,,,2020-02-03
Loading

0 comments on commit 2e15631

Please sign in to comment.